当前位置: 首页 > news >正文

2.机器学习-回归模型-非线性模型

一.决策树回归

1.决策树的核心参数:

(1)树的生长与分裂

参数名默认值作用
criterion"squared_error"分裂节点的评估标准:
"squared_error":均方误差(MSE)。
"friedman_mse":改进的均方误差。
"absolute_error":平均绝对误差(MAE)。
splitter"best"分裂策略:
"best":选择最佳分裂点。
"random":随机选择分裂点。
max_depthNone树的最大深度。若为 None,则节点会一直分裂,直到所有叶子节点纯净或达到 min_samples_split
min_samples_split2分裂内部节点所需的最小样本数。若样本数少于该值,则不再分裂。
min_samples_leaf1叶节点所需的最小样本数。若某次分裂导致叶子节点样本数小于该值,则放弃分裂。
max_featuresNone寻找最佳分裂时考虑的最大特征数:
None:使用所有特征。
"sqrt":取特征数的平方根。
"log2":取特征数的对数。
- 整数:直接指定特征数。
- 浮点数:取特征数的百分比。

(2)随机性与剪枝

参数名默认值作用
random_stateNone随机种子,用于控制随机性(如 splitter="random" 时的随机分裂)。设置固定值可复现结果。
min_impurity_decrease0.0若某次分裂导致不纯度减少量小于该值,则放弃分裂。
ccp_alpha0.0用于最小化成本复杂度剪枝的复杂度参数。值越大,剪枝越强。

2.完整代码

#1.导入必备的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import GridSearchCV#2.设置显示选项
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
pd.set_option('display.max_rows', None)    #显示最大行数
pd.set_option('display.max_columns', None)  #显示最大列数
pd.set_option('display.max_colwidth', None)  #显示的最大列宽
pd.set_option('display.width', None)  #显示的最宽度
#3.导入数据
data=pd.read_excel("信用评分卡模型.xlsx")
#4.数据预处理
#4.1使用均值填写缺失值
print("缺失值统计:\n",data.isnull().sum())
data=data.apply(lambda col:col.fillna(col.mean()),axis=0)
#4.2处理异常值
numeric_data = data.select_dtypes(include=[np.number])
z_scores = np.abs(stats.zscore(data.select_dtypes(include=[np.number])))  # 仅对数值型数据计算 Z-score
threshold = 3  # Z-score 阈值 3个标准差
outliers = (z_scores > threshold).any(axis=1)  # 检测异常值
print("检测到的异常值行索引:\n", data[outliers].index.tolist())  # 输出异常值的行索引
print(data[outliers])
data = data[~outliers]  # 移除异常值
x=data.drop("信用评分",axis=1)
y=data["信用评分"]
#4.3将数据划分为训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(x,y,test_size=0.3,random_state=0)
#4.4创建标准化训练测试集与训练集
scaler=StandardScaler()
x_train=scaler.fit_transform(X_train)
x_test=scaler.transform(X_test)#5建立模型(网格搜索)
model = DecisionTreeRegressor(random_state=42)
cv=KFold(n_splits=5, random_state=42, shuffle=True)
param_grid = {'max_depth': [3, 5, 7, None],'min_samples_split': [2, 5, 10],'min_samples_leaf': [1, 2, 4],'max_features': ['sqrt', 'log2', None]
}
grid_search = GridSearchCV(estimator=model,param_grid=param_grid,cv=cv,scoring='neg_mean_squared_error'
)
grid_search.fit(x_train, y_train)
best_model = grid_search.best_estimator_
print("Best Model:\n", best_model)
y_pred = best_model.predict(x_test)
#5.1模型评估
print("MSE:", mean_squared_error(y_test, y_pred))
print("R² Score:", r2_score(y_test, y_pred))
cv_scores=cross_val_score(best_model, x_train, y_train, cv=cv,scoring='neg_mean_squared_error')
print(f"5折交叉验证负MSE: {np.mean(cv_scores):.4f} (±{np.std(cv_scores):.4f})")
#5.1模型特征重要性(可用于特征选择)
feature_importances = pd.DataFrame(best_model.feature_importances_, index=x.columns)
feature_importances = feature_importances.sort_values(by=0,ascending=False)
print("\n特征重要性:")
print(feature_importances)
#6.可视化
plt.figure(figsize=(10, 6))
feature_importances.plot(kind='barh')
plt.title("特征重要性")
plt.xlabel("重要性")
plt.ylabel("特征")
plt.show()
"""
方法2:随机搜索
param_dist = {'max_depth': randint(3, 20),'min_samples_split': randint(2, 20),'min_samples_leaf': randint(1, 10)
}
random_search = RandomizedSearchCV(model, param_dist, n_iter=100, cv=5)
"""

决策树回归(DecisionTreeRegressor)与决策树分类(DecisionTreeClassifier)在 代码结构上类似,但 关键参数、模型目标和输出结果 有本质区别。以下是详细对比和代码示例:


1. 核心区别

特性决策树回归 (DecisionTreeRegressor)决策树分类 (DecisionTreeClassifier)
任务类型回归(预测连续值,如房价、销售额)分类(预测离散类别,如是否离职、垃圾邮件识别)
分裂标准criterion='mse'(均方误差)或 'mae'(平均绝对误差)criterion='gini'(基尼不纯度)或 'entropy'(信息增益)
输出结果连续值(浮点数)离散类别(整数或字符串标签)
叶子节点值目标变量的平均值类别的概率分布(多数投票)
评估指标MSE、R² 等回归指标准确率、F1-Score、AUC-ROC 等分类指标

二.随机森林回归

1.核心参数

(1)树的数量与构建

参数名默认值作用
n_estimators100随机森林中树的数量。树越多,模型越稳定,但计算成本越高。
criterion"squared_error"分裂节点的评估标准:
"squared_error":均方误差(MSE)。
"absolute_error":平均绝对误差(MAE)。
max_depthNone树的最大深度。若为 None,则节点会一直分裂,直到所有叶子节点纯净或达到 min_samples_split
min_samples_split2分裂内部节点所需的最小样本数。若样本数少于该值,则不再分裂。
min_samples_leaf1叶节点所需的最小样本数。若某次分裂导致叶子节点样本数小于该值,则放弃分裂。
max_features"auto"寻找最佳分裂时考虑的最大特征数:
"auto" 或 "sqrt":取特征数的平方根。
"log2":取特征数的对数。
- 整数:直接指定特征数。
- 浮点数:取特征数的百分比。

(2)随机性与鲁棒性

参数名默认值作用
random_stateNone随机种子,用于控制随机性(如样本和特征的随机选择)。设置固定值可复现结果。
bootstrapTrue是否使用 Bootstrap 采样(有放回随机采样)。若为 False,则使用整个数据集构建每棵树。
oob_scoreFalse是否使用袋外样本(Out-of-Bag, OOB)评估模型性能。需 bootstrap=True
max_samplesNone若 bootstrap=True,指定每棵树的训练样本数(整数或浮点数比例)。

(3)并行计算与性能

参数名默认值作用
n_jobsNone并行计算使用的 CPU 核心数:
None:使用 1 个核心。
-1:使用所有核心。
verbose0控制训练过程中的日志输出:
0:不输出。
1:输出进度。
>1:更详细输出。
warm_startFalse若为 True,则复用之前训练的模型,继续添加新的树(用于增量训练)。

2.其他参数

参数名默认值作用
ccp_alpha0.0用于最小化成本复杂度剪枝的复杂度参数。值越大,剪枝越强。
min_impurity_decrease0.0若某次分裂导致不纯度减少量小于该值,则放弃分裂。
min_weight_fraction_leaf0.0叶节点所需的最小样本权重比例(与 min_samples_leaf 类似,但基于权重)。


3.完整代码 

#1.导入必备的库
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from scipy import stats
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score, KFold
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler
#2.设置显示选项
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
pd.set_option('display.max_rows', None)    #显示最大行数
pd.set_option('display.max_columns', None)  #显示最大列数
pd.set_option('display.max_colwidth', None)  #显示的最大列宽
pd.set_option('display.width', None)  #显示的最宽度
#3.导入数据
data=pd.read_excel("信用评分卡模型.xlsx")
#4.数据预处理
#4.1使用均值填写缺失值
print("缺失值统计:\n",data.isnull().sum())
data=data.apply(lambda col:col.fillna(col.mean()),axis=0)
#4.2处理异常值
numeric_data = data.select_dtypes(include=[np.number])
z_scores = np.abs(stats.zscore(data.select_dtypes(include=[np.number])))  # 仅对数值型数据计算 Z-score
threshold = 3  # Z-score 阈值 3个标准差
outliers = (z_scores > threshold).any(axis=1)  # 检测异常值
print("检测到的异常值行索引:\n", data[outliers].index.tolist())  # 输出异常值的行索引
print(data[outliers])
data = data[~outliers]  # 移除异常值
X=data.drop("信用评分",axis=1)
y=data["信用评分"]
#4.3将数据划分为训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=0)
#4.4创建标准化训练测试集与训练集
scaler=StandardScaler()
X_train=scaler.fit_transform(X_train)
X_test=scaler.transform(X_test)
#5.建立模型
Model = RandomForestRegressor(criterion='squared_error',  # 分裂标准(MSE)min_samples_leaf=2,         # 叶节点所需的最小样本数bootstrap=True,             # 使用 Bootstrap 采样oob_score=True,             # 使用袋外样本评估模型性能random_state=42,              # 固定随机种子n_jobs=-1,                  # 使用所有 CPU 核心# verbose=1                   # 输出训练进度
)
#5.1参数调优:网格搜索(数据量大时使用随机搜索)
cv = KFold(n_splits=5, shuffle=True, random_state=42)
param_grid = {'n_estimators': [50, 100, 200],     # 树的数量'max_depth': [None, 5, 10],         # 树的最大深度'min_samples_split': [2, 5],        # 分裂内部节点所需的最小样本数'max_features': ['sqrt', 'log2']    # 每棵树分裂时考虑的特征数
}
grid_search = GridSearchCV(estimator=Model,param_grid=param_grid,cv = cv,  # 5折交叉验证scoring='neg_mean_squared_error',  # 负均方误差(越大越好)n_jobs=-1,  # 使用所有CPU核心
)
grid_search.fit(X_train, y_train)
print("最佳参数组合:", grid_search.best_params_)
best_model = grid_search.best_estimator_
#5.2模型评估
cv_scores = cross_val_score(best_model, X_train, y_train,cv=cv, scoring='neg_mean_squared_error')
print(f"交叉验证 MSE: {-np.mean(cv_scores):.4f} (±{np.std(cv_scores):.4f})")
y_pred = best_model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"测试集 MSE: {mse:.4f}")
print(f"测试集 R²: {r2:.4f}")
#5.3模型特征重要性
feature_importances = pd.DataFrame(best_model.feature_importances_, index=X.columns)
feature_importances = feature_importances.sort_values(by=0,ascending=False)
print("\n特征重要性:")
print(feature_importances)
#6.可视化
plt.figure()
feature_importances.plot(kind='barh')
plt.title("Feature Importances")
plt.show()

三.支持向量回归

1、核心参数

(1). 模型类型与核函数
参数名默认值作用
kernel'rbf'指定核函数类型:
'linear':线性核。
'poly':多项式核。
'rbf':径向基函数(高斯)核。
'sigmoid':Sigmoid 核。
- 自定义核函数(通过 callable 对象)。
degree3多项式核的阶数(仅当 kernel='poly' 时有效)。
gamma'scale'核函数的系数:
'scale':1/(n_features×Var(X))1/(n_features×Var(X))。
'auto':1/n_features1/n_features。
- 浮点数:直接指定值。
coef00.0核函数中的独立项(仅对 kernel='poly' 和 kernel='sigmoid' 有效)。
(2). 正则化与误差容忍
参数名默认值作用
C1.0正则化参数,控制对误差的惩罚程度。值越大,模型越倾向于拟合训练数据。
epsilon0.1ϵϵ-不敏感损失函数的阈值,控制对误差的容忍程度。
(3). 优化与计算
参数名默认值作用
tol1e-3优化算法的停止条件(误差容忍度)。
max_iter-1最大迭代次数。若为 -1,则无限制。
shrinkingTrue是否使用启发式收缩(shrinking heuristic)加速训练。
cache_size200核函数缓存大小(单位:MB)。
(4). 多线程与随机性
参数名默认值作用
verboseFalse是否输出训练过程的详细信息。
random_stateNone随机种子,用于控制随机性(如数据打乱)。

2、参数调优建议

(1). 核函数选择
  • 线性核(kernel='linear':适合线性可分的数据。

  • RBF 核(kernel='rbf':适合非线性数据,是默认选择。

  • 多项式核(kernel='poly':适合多项式特征交互较强的数据。

  • Sigmoid 核(kernel='sigmoid':适合特定类型的非线性数据。

(2). 正则化参数 C
  • 小值(如 0.1):模型更简单,可能欠拟合。

  • 大值(如 100):模型更复杂,可能过拟合。

(3). ϵϵ 参数
  • 小值(如 0.01):对误差容忍度低,模型更精确,但可能过拟合。

  • 大值(如 0.5):对误差容忍度高,模型更鲁棒,但可能欠拟合。

(4). gamma 参数
  • 小值(如 0.01):核函数影响范围大,模型更平滑。

  • 大值(如 10):核函数影响范围小,模型更复杂。

3.完整代码

#1.导入必备的库
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from scipy import stats
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score, KFold
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR#2.设置显示选项
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
pd.set_option('display.max_rows', None)    #显示最大行数
pd.set_option('display.max_columns', None)  #显示最大列数
pd.set_option('display.max_colwidth', None)  #显示的最大列宽
pd.set_option('display.width', None)  #显示的最宽度
#3.导入数据
data=pd.read_excel("信用评分卡模型.xlsx")
#4.数据预处理
#4.1使用均值填写缺失值
print("缺失值统计:\n",data.isnull().sum())
data=data.apply(lambda col:col.fillna(col.mean()),axis=0)
#4.2处理异常值
numeric_data = data.select_dtypes(include=[np.number])
z_scores = np.abs(stats.zscore(data.select_dtypes(include=[np.number])))  # 仅对数值型数据计算 Z-score
threshold = 3  # Z-score 阈值 3个标准差
outliers = (z_scores > threshold).any(axis=1)  # 检测异常值
print("检测到的异常值行索引:\n", data[outliers].index.tolist())  # 输出异常值的行索引
print(data[outliers])
data = data[~outliers]  # 移除异常值
X=data.drop("信用评分",axis=1)
y=data["信用评分"]
#4.3将数据划分为训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=0)
#4.4创建标准化训练测试集与训练集
scaler=StandardScaler()
X_train=scaler.fit_transform(X_train)
X_test=scaler.transform(X_test)# 初始化 SVR 模型
model = SVR(kernel='rbf')
cv=KFold(n_splits=5,random_state=10,shuffle=True)
param_grid = {'C': [0.1, 1, 10],'epsilon': [0.01, 0.1, 0.5],'gamma': ['scale', 'auto', 0.1, 1]
}
grid_search = GridSearchCV(estimator=model,param_grid=param_grid,cv=cv,scoring='neg_mean_squared_error',n_jobs=-1
)
grid_search.fit(X_train, y_train)
print("最佳参数组合:", grid_search.best_params_)
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
cv_scores = cross_val_score(best_model, X_train, y_train,cv=cv, scoring='neg_mean_squared_error')
print(f"交叉验证 MSE: {-np.mean(cv_scores):.4f} (±{np.std(cv_scores):.4f})")
print("测试集 MSE:", mean_squared_error(y_test, y_pred))
print("测试集 R² Score:", r2_score(y_test, y_pred))
#可视化
plt.scatter(y_test, y_pred)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=2)
plt.xlabel("实际值")
plt.ylabel("预测值")
plt.title("实际值 vs 预测值")
plt.show()

四.K近邻回归

1、KNN 回归的核心参数

(1). 模型参数
参数名默认值作用
n_neighbors5最近邻的数量 kk。
weights'uniform'权重函数:
'uniform':所有最近邻样本的权重相等。
'distance':权重与距离成反比。
algorithm'auto'计算最近邻的算法:
'auto':自动选择最佳算法。
'ball_tree':使用 BallTree 算法。
'kd_tree':使用 KDTree 算法。
'brute':暴力搜索。
leaf_size30BallTree 或 KDTree 的叶子节点大小,影响树的构建和查询效率。
p2闵可夫斯基距离的参数 pp:
p=1:曼哈顿距离。
p=2:欧氏距离。
metric'minkowski'距离度量函数,支持自定义函数。
(2). 计算与性能
参数名默认值作用
n_jobsNone并行计算使用的 CPU 核心数:
None:使用 1 个核心。
-1:使用所有核心。

完整代码 

#1.导入必备的库
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from scipy import stats
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score, KFold
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.neighbors import KNeighborsRegressor
from sklearn.preprocessing import StandardScaler#2.设置显示选项
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
pd.set_option('display.max_rows', None)    #显示最大行数
pd.set_option('display.max_columns', None)  #显示最大列数
pd.set_option('display.max_colwidth', None)  #显示的最大列宽
pd.set_option('display.width', None)  #显示的最宽度
#3.导入数据
data=pd.read_excel("信用评分卡模型.xlsx")
#4.数据预处理
#4.1使用均值填写缺失值
print("缺失值统计:\n",data.isnull().sum())
data=data.apply(lambda col:col.fillna(col.mean()),axis=0)
#4.2处理异常值
numeric_data = data.select_dtypes(include=[np.number])
z_scores = np.abs(stats.zscore(data.select_dtypes(include=[np.number])))  # 仅对数值型数据计算 Z-score
threshold = 3  # Z-score 阈值 3个标准差
outliers = (z_scores > threshold).any(axis=1)  # 检测异常值
print("检测到的异常值行索引:\n", data[outliers].index.tolist())  # 输出异常值的行索引
print(data[outliers])
data = data[~outliers]  # 移除异常值
X=data.drop("信用评分",axis=1)
y=data["信用评分"]
#4.3将数据划分为训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=0)
#4.4创建标准化训练测试集与训练集
scaler=StandardScaler()
X_train=scaler.fit_transform(X_train)
X_test=scaler.transform(X_test)#建立模型
model = KNeighborsRegressor(n_neighbors=5)
cv=KFold(n_splits=5,random_state=10,shuffle=True)
# 参数网格
param_grid = {'n_neighbors': [3, 5, 7],'weights': ['uniform', 'distance'],'p': [1, 2]
}
grid_search = GridSearchCV(estimator=model,param_grid=param_grid,cv=5,scoring='neg_mean_squared_error',n_jobs=-1
)
grid_search.fit(X_train, y_train)
print("最佳参数组合:", grid_search.best_params_)
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
cv_scores = cross_val_score(best_model, X_train, y_train,cv=cv, scoring='neg_mean_squared_error')
print(f"交叉验证 MSE: {-np.mean(cv_scores):.4f} (±{np.std(cv_scores):.4f})")
print("测试集 MSE:", mean_squared_error(y_test, y_pred))
print("测试集 R² Score:", r2_score(y_test, y_pred))

五.梯度提升回归

1. 模型参数

参数名默认值作用
n_estimators100弱学习器的数量(即迭代次数)。
learning_rate0.1学习率,控制每一步的贡献程度。较小的学习率需要更多的弱学习器。
max_depth3每个弱学习器(决策树)的最大深度。
min_samples_split2分裂内部节点所需的最小样本数。
min_samples_leaf1叶节点所需的最小样本数。
max_featuresNone寻找最佳分裂时考虑的最大特征数:
None:使用所有特征。
'sqrt':取特征数的平方根。
'log2':取特征数的对数。
- 整数:直接指定特征数。
- 浮点数:取特征数的百分比。
loss'squared_error'损失函数:
'squared_error':均方误差。
'absolute_error':平均绝对误差。
'huber':结合均方误差和平均绝对误差。
subsample1.0每步训练时使用的样本比例(随机梯度提升)。

2. 正则化与优化

参数名默认值作用
alpha0.9Huber 损失函数的分位数参数(仅当 loss='huber' 时有效)。
initNone初始模型(如均值模型)。
random_stateNone随机种子,用于控制随机性(如样本和特征的随机选择)。
validation_fraction0.1用于早期停止的验证集比例(仅当 n_iter_no_change 有效时使用)。
n_iter_no_changeNone如果验证集性能在指定迭代次数内未提升,则提前停止训练。

3. 计算与性能

参数名默认值作用
verbose0控制训练过程中的日志输出:
0:不输出。
1:输出进度。
>1:更详细输出。
warm_startFalse若为 True,则复用之前训练的模型,继续添加新的弱学习器。
n_jobsNone并行计算使用的 CPU 核心数:
None:使用 1 个核心。
-1:使用所有核心。

4.完整代码 

#1.导入必备的库
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from scipy import stats
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score, KFold
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.neighbors import KNeighborsRegressor
from sklearn.preprocessing import StandardScaler#2.设置显示选项
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
pd.set_option('display.max_rows', None)    #显示最大行数
pd.set_option('display.max_columns', None)  #显示最大列数
pd.set_option('display.max_colwidth', None)  #显示的最大列宽
pd.set_option('display.width', None)  #显示的最宽度
#3.导入数据
data=pd.read_excel("信用评分卡模型.xlsx")
#4.数据预处理
#4.1使用均值填写缺失值
print("缺失值统计:\n",data.isnull().sum())
data=data.apply(lambda col:col.fillna(col.mean()),axis=0)
#4.2处理异常值
numeric_data = data.select_dtypes(include=[np.number])
z_scores = np.abs(stats.zscore(data.select_dtypes(include=[np.number])))  # 仅对数值型数据计算 Z-score
threshold = 3  # Z-score 阈值 3个标准差
outliers = (z_scores > threshold).any(axis=1)  # 检测异常值
print("检测到的异常值行索引:\n", data[outliers].index.tolist())  # 输出异常值的行索引
print(data[outliers])
data = data[~outliers]  # 移除异常值
X=data.drop("信用评分",axis=1)
y=data["信用评分"]
#4.3将数据划分为训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=0)
#4.4创建标准化训练测试集与训练集
scaler=StandardScaler()
X_train=scaler.fit_transform(X_train)
X_test=scaler.transform(X_test)
#建立模型
model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
cv=KFold(n_splits=5, random_state=42, shuffle=True)
# 参数网格
param_grid = {'n_estimators': [50, 100, 200],'learning_rate': [0.01, 0.1, 0.2],'max_depth': [3, 5, 7]
}
# 网格搜索
grid_search = GridSearchCV(estimator=model,param_grid=param_grid,cv=cv,scoring='neg_mean_squared_error',n_jobs=-1
)
grid_search.fit(X_train, y_train)
print("最佳参数组合:", grid_search.best_params_)
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
print("测试集 MSE:", mean_squared_error(y_test, y_pred))
print("测试集 R² Score:", r2_score(y_test, y_pred))
cv_scores = cross_val_score(best_model, X_train, y_train, cv=cv, scoring='neg_mean_squared_error')
print(f"5折交叉验证负MSE: {np.mean(cv_scores):.4f} (±{np.std(cv_scores):.4f})")

六、网格搜索中的scoring参数

1.回归任务常用评分指标

评分指标名称Scikit-learn 参数名说明
负均方误差(Negative Mean Squared Error)'neg_mean_squared_error'均方误差(MSE)的负值,数值越大(越接近 0)表示模型性能越好。
均方误差(Mean Squared Error)'neg_mean_squared_error' 的绝对值均方误差的原始值,数值越小表示模型性能越好。
均方根误差(Root Mean Squared Error)自定义(基于 mean_squared_error均方误差的平方根,与目标变量量纲一致。
负平均绝对误差(Negative Mean Absolute Error)'neg_mean_absolute_error'平均绝对误差(MAE)的负值,数值越大(越接近 0)表示模型性能越好。
R² 分数(R-squared)'r2'取值范围 [−∞,1][−∞,1],越接近 1 表示模型性能越好。
解释方差分数(Explained Variance Score)'explained_variance'取值范围 [0,1][0,1],越接近 1 表示模型性能越好。

2.分类任务常用评分指标

评分指标名称Scikit-learn 参数名说明
准确率(Accuracy)'accuracy'分类正确的样本比例。
精确率(Precision)'precision'正类预测正确的比例(针对二分类或多分类)。
召回率(Recall)'recall'正类样本中被正确预测的比例(针对二分类或多分类)。
F1 分数(F1 Score)'f1'精确率和召回率的调和平均值。
ROC AUC 分数(ROC AUC Score)'roc_auc'ROC 曲线下面积,适用于二分类任务。
对数损失(Log Loss)'neg_log_loss'对数损失的负值,数值越大(越接近 0)表示模型性能越好。

3.聚类任务常用评分指标

评分指标名称Scikit-learn 参数名说明
轮廓系数(Silhouette Score)'silhouette'衡量聚类效果的指标,取值范围 [−1,1][−1,1],越接近 1 表示聚类效果越好。
调整兰德指数(Adjusted Rand Index)'adjusted_rand_score'衡量聚类与真实标签的一致性,取值范围 [−1,1][−1,1],越接近 1 表示一致性越好。

相关文章:

2.机器学习-回归模型-非线性模型

一.决策树回归 1.决策树的核心参数: (1)树的生长与分裂 参数名默认值作用criterion"squared_error"分裂节点的评估标准: - "squared_error":均方误差(MSE)。 - "friedman_mse":改进的…...

Git提交前时间检查

为了防止在本地看日志的时候,由于本地时间被修改,导致日志的时间存在非正确时间。通过以下脚本在提交前进行时间验证,只有是正确的时间才可以提交。 使用方法如下: 复制如下脚本,命名为 pre-commit ,放到 …...

浅述WinForm 和 WPF 的前景

在.NET 开发领域,WinForm 和 WPF 都是用于创建桌面应用程序的技术框架,但它们在很多方面存在差异,对于开发者来说,也常常会思考哪个更有前途。 一、WinForm 1. 成熟/稳定度: WinForms 是较早的桌面应用程序框架&am…...

【从零开始学习计算机科学】设计模式(二)工厂模式、抽象工厂模式、单例模式、建造者模型、原型模式

【从零开始学习计算机科学】设计模式(二)工厂模式、抽象工厂模式、单例模式、建造者模型、原型模式 工厂模式主要特点类型适用场景抽象工厂模式主要特点工作原理适用场景举例优点缺点总结单例模式主要特点工作原理适用场景优点缺点总结建造者模式主要特点工作原理适用场景优点…...

超精密工件小孔几何尺寸测量:自动化解决方案

下载链接:(最新版本)超精密工件小孔几何尺寸测量:自动化解决方案python脚本代码,可直接运行,内包含测试数据,亲测好用资源-CSDN文库 在现代制造业中,超精密工件的质量控制至关重要&a…...

Mastering SAP Analytics Cloud - Empower Your Business Users

Mastering SAP Analytics Cloud - Empower Your Business Users...

Hadoop、Spark、Flink Shuffle对比

一、Hadoop的shuffle 前置知识: Map任务的数量由Hadoop框架自动计算,等于分片数量,等于输入文件总大小 / 分片大小,分片大小为HDFS默认值128M,可调 Reduce任务数由用户在作业提交时通过Job.setNumReduceTasks(int)设…...

Sublime Text 2.0.2 安装与汉化指南:从下载到中文包配置的完整教程

Sublime Text 是一款轻量级、高性能的代码编辑器,深受开发者喜爱。Sublime Text 2.0.2 是一个较旧的版本,但仍然可以满足基本的代码编辑需求。以下是关于 Sublime Text 2.0.2 的安装、中文包配置以及使用方法的详细指南。 1. 下载 Sublime Text 2.0.2 提…...

【双指针】移动零

题目描述: 算法分析: 观察输入输出: 输出中一共分为两个区域,0区和非零区。 但是在处理未完成之前,必然存在着一个零和非零数共存的区域,所以在处理的过程当中一共有三个区域,0区,…...

CMake简单入门

简介 CMake 是一个开源的跨平台构建系统生成工具,旨在简化和自动化项目的构建过程。它主要用于管理和控制软件构建的过程,特别是在处理复杂的项目结构和多个平台时。CMake 并不直接进行编译或链接,而是生成本地构建系统所需的文件&#xff0…...

【AIGC】OpenAI 集成 Langchain 操作实战使用详解

目录 一、前言 二、前置准备 2.1 安装 Langchain必须的依赖 2.1.1 python环境 2.1.2 langchain openai 环境 2.1.3 准备一个apikey 2.1.4 langchain 核心组件 三、Langchain 各组件使用 3.1 Chat models组件 3.1.1 Invocation 使用 3.1.1.1 结果解析 3.2 提示词模板…...

热key探测技术架构设计与实践

参考: 得物热点探测技术架构设计与实践 Redis数据倾斜与JD开源hotkey源码分析揭秘 京东热点检测 HotKey 学习笔记 hotkey: 京东App后台中间件,毫秒级探测热点数据,毫秒级推送至服务器集群内存,大幅降低热key对数据层查询压力 …...

【最新】 ubuntu24安装 1panel 保姆级教程

系统:ubuntu24.04.1 安装软件 :1panel 第一步:更新系统 sudo apt update sudo apt upgrade 如下图 第二步:安装1panel,运行如下命令 curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o …...

微信小程序threejs三维开发

微信小程序threejs开发 import * as THREE from three; const { performance, document, window, HTMLCanvasElement, requestAnimationFrame, cancelAnimationFrame, core, Event, Event0 } THREE .DHTML import Stats from three/examples/jsm/libs/stats.module.js; im…...

Starship:快速且高度可定制的命令行框架!!

Starship 是一款专为开发者设计的现代、快速且高度可定制的命令行框架。它通过简洁的界面提供丰富的环境信息,帮助用户更高效地进行日常开发工作。 软件介绍: Starship 是用 Rust 编写的开源项目,以其轻量级和极速启动而著称。它能够跨平台运…...

流水线(Pipeline)

在现代 CPU 设计中,流水线(Pipeline) 是将指令处理拆分为多个阶段以提高执行效率的关键技术。为了更精细地分析性能,流水线通常被分为 前端流水线(Frontend Pipeline) 和 后端流水线(Backend Pi…...

Symbian(塞班)操作系统

Symbian(塞班)是由多家通信巨头联合开发的专为移动设备设计的操作系统,曾是全球智能手机市场的早期主导者。以下是其核心定义与技术特点的整合分析: ​一、定义与起源 ​系统定位 Symbian是由英国Psion公司的EPOC操作系统演变而来…...

CSS -属性值的计算过程

目录 一、抛出两个问题1.如果我们学过优先级关系,那么请思考如下样式为何会生效2.如果我们学习过继承,那么可以知道color是可以被子元素继承使用的,那么请思考下述情景为何不生效 二、属性值计算过程1.确定声明值2.层叠冲突3.使用继承4.使用默…...

施磊老师c++(七)

STL组件 文章目录 STL组件1.整体学习内容2.vector容器3.deque和listdeque--双端队列容器list--链表容器 4.vector,deque,list对比主要内容面经问题 5.详解容器适配器--stack, queue, priority_queue容器适配器stack-栈queue-队列priority_queue-优先级队列总结 6.无序关联容器关…...

Codeforces 158B. Taxi

题目 题目链接:https://codeforces.com/problemset/problem/158/B time limit per test:3 seconds;memory limit per test:256 megabytes After the lessons n groups of schoolchildren went outside and decided to visit Polycarpus to celebrate his birthda…...

hadoop伪分布式搭建--启动过程中如果发现某个datanode出现问题,如何处理?

一、问题定位&#xff1a; &#xff08;1&#xff09;检查DataNode日志&#xff1a; DataNode日志通常位于$HADOOP_HOME/logs/或/var/log/hadoop-hdfs/目录下&#xff0c;文件名为hadoop-hdfs-datanode-<hostname>.log。重点关注以下错误类型&#xff1a; ——Incompa…...

MySQL(事物上)

目录 示例&#xff1a; 一 引入事物 1. 概念 2. 事物的4大特性 3. 为什么要有事物&#xff1f; 二 事物操作 1. 查看存储引擎支持的事物 2. 事物的提交方式 2.1 查看事物的默认提交方式 2.2 设置事物的默认提交方式 2.3 查看事物的全局隔离级别 2.4 验证事物的回滚…...

人工智能 Day06 pandas库进阶

1.处理缺失数据 总体流程是这样的&#xff0c; 归根在于如何处理NAN&#xff0c;接下来详细赘述 1.1. 处理缺失值的相关函数 判断缺失值 pd.isnull(df)&#xff1a;用于判断 DataFrame df 中的元素是否为缺失值&#xff08;NaN &#xff09;&#xff0c;返回一个与df 形状相同…...

C# --- LINQ

C# --- LINQ 什么是LINQFluent Syntax 和 SQL-Like QueryLINQ Operations 什么是LINQ LINQ的全称为Language Integrated Query, 为各种查询(包括对象查询&#xff0c;数据库查询&#xff0c;XML查询) 提供了统一模型.LINQ源于SQL&#xff0c;但比SQL更加强大&#xff0c;更加灵…...

C语言之 条件编译和预处理指令

条件编译 在编译⼀个程序的时候我们如果要将⼀条语句&#xff08;⼀组语句&#xff09;编译或者放弃是很⽅便的。因为我们有条件编译指令。 ⽐如说&#xff1a; 调试性的代码删除可惜&#xff0c;保留⼜碍事&#xff0c;所以我们可以选择性的编译。 #define M 1 int main() …...

JVM常用概念之锁省略

问题 synchronized(同步-重量级锁)会解除所有编译器优化吗? 基础知识 使用当前的 Java 内存模型&#xff0c;未观察到的锁不一定会产生任何内存效应。除其他情况外&#xff0c;这意味着对非共享对象进行同步是徒劳的&#xff0c;因此运行时不必在那里做任何事情。这给编译优…...

[网络][tcp协议]:tcp报头

tcp(传输控制协议)是一种面向字节流的传输层协议,相较于udp协议,tcp能保证传输数据的可靠性与准确性,tcp也是目前最常见的传输层协议 本文主要介绍tcp报头各个字段的含义与用途 注:保留6位和6位标记位是目前最普遍的写法,在我查资料时,发现有一些拓展情况,会在后文细说 最简单的…...

传输层自学

传输实体&#xff1a;完成传输层任务的硬件或软件 可能位于&#xff1a; 操作系统内核独立的用户进程绑定在网络应用中的链接库网络接口卡 1.功能&#xff1a; 网络层与传输层作用范围比较&#xff1f; 网络层负责把数据从源机送达到目的机 传输层负责把数据送达到具体的应…...

FFmpeg —— 各系统下ffmpeg硬件加速和API支持情况(文内表格形式详细阐述)

介绍 FFmpeg 作为一款功能强大的多媒体处理工具,支持多种硬件加速技术,能够显著提升视频编解码的效率,尤其是在处理高分辨率、高码率视频时表现尤为突出。不同操作系统下,FFmpeg 的硬件加速实现方式和支持的 API 各有特点。 在 Windows 系统上,FFmpeg 主要依赖 DirectX Vi…...

RUOYI框架在实际项目中的应用二:Ruoyi前后端分离版本

如需观看Ruoyi框架的整体介绍&#xff0c;请移步&#xff1a;RUOYI框架在实际项目中的应用一&#xff1a;ruoyi简介 一、Ruoyi前后端分离版本-RuoYi-Vue 1、官方资料 1&#xff1a;代码地址&#xff1a;https://gitee.com/y_project/RuoYi-Vue.git 2&#xff1a;文档介绍地址…...

2.12[A]distribute sys

在分布式训练中&#xff0c;特别是使用3D并行&#xff08;数据并行、流水线并行和模型并行&#xff09;时&#xff0c;不同阶段的GPU可能因为通信或数据依赖而出现空闲时间&#xff0c;这些空闲时间就是所谓的“气泡”。这些气泡会降低整体的训练效率&#xff0c;导致GPU资源的…...

R语言的移动应用开发

R语言的移动应用开发 在数据科学和统计分析的大潮中&#xff0c;R语言因其强大的数据处理和可视化能力而备受青睐。然而&#xff0c;R语言对移动应用开发的适用性并未得到广泛关注。本文将探讨R语言在移动应用开发中的潜力及其工具&#xff0c;并提供一些实践示例&#xff0c;…...

解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败

文章目录 解决 Redis 后台持久化失败的问题&#xff1a;内存不足导致 fork 失败问题背景与成因解决方案修改内核参数 vm.overcommit_memory增加系统内存或 Swap 空间调整 Redis 配置 stop-writes-on-bgsave-error 在 Docker 环境中的注意事项总结 解决 Redis 后台持久化失败的问…...

交换机控制软件的实现步骤猜测

一、主要目的 提出对交换机软件控制逻辑的猜测。 二、交换机控制软件的组成 (一)背景 1、交换机有很多的RJ45水晶头端口。 2、每个端口支持同时发送和接收字节数据。 3、每个端口接收的数据需要查表后才能转发给目标端口。 (二)端口状态扫描线程 负责扫描每个端口的状态&#x…...

100.HarmonyOS NEXT跑马灯组件教程:实际应用与场景示例

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT跑马灯组件教程&#xff1a;实际应用与场景示例 文章目录 HarmonyOS NEXT跑马灯组件教程&#xff1a;实际应用与场景示例1. 跑马灯组…...

【计算机网络】2物理层

物理层任务:实现相邻节点之间比特(或)的传输 1.通信基础 1.1.基本概念 1.1.1.信源,信宿,信道,数据,信号 数据通信系统主要划分为信源、信道、信宿三部分。 信源:产生和发送数据的源头。 信宿:接收数据的终点。 信道:信号的传输介质。 数据和信号都有模拟或数字…...

2.3 滑动窗口专题:最大连续1的个数 III(LeetCode 1004)

1. ​题目链接 1004. 最大连续1的个数 III - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/max-consecutive-ones-iii/ 2. ​题目描述 给定一个二进制数组 nums 和一个整数 k&#xff0c;允许将最多 k 个 0 翻转为 1&#xff0c;求翻转后最长的连续 1 …...

怎么解决在Mac上每次打开文件夹都会弹出一个新窗口的问题

在Mac上每次打开文件夹都会弹出一个新窗口的问题&#xff0c;可以通过以下方法解决‌ ‌调整Finder设置‌&#xff1a; 打开Finder&#xff0c;点击“Finder”菜单&#xff0c;选择“偏好设置”。在偏好设置中&#xff0c;选择“通用”标签。取消勾选“在标签页中打开文件夹”或…...

Python异常处理

异常处理 概述 在Python中&#xff0c;在处理可能会引发异常的代码块时&#xff0c;使用try和except语句。可以帮助我们捕获并处理异常&#xff0c; 而不是让程序因为一个未处理的异常而完全崩溃。 try-except try-except-finally try-finally try-except-else try-except-…...

VSTO(C#)Excel开发8:打包发布安装卸载

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

ImportError: cannot import name ‘genai‘ from ‘google‘ (unknown location) 问题如何处理

这个错误通常发生在没有正确安装Google的生成式AI库。需要安装官方的google-generativeai库&#xff1a; pip install google-generativeai如果代码中使用的导入方式与新版SDK不兼容&#xff0c;可能需要调整导入语句。根据当前代码上下文&#xff0c;正确的导入方式应该是&am…...

Advanced Intelligent Systems 软体机器手助力截肢者玩转鼠标

随着科技的不断进步&#xff0c;假肢技术在改善截肢者生活质量方面取得了显著成就。然而&#xff0c;截肢群体在就业方面仍面临巨大困难&#xff0c;适龄截肢群体的就业率仅为健全群体的一半。现有的肌电控制假肢手在与计算机交互时存在诸多挑战&#xff0c;特别是截肢者在使用…...

kubernetes对于一个nginx服务的增删改查

1、创建 Nginx 服务 1.1、创建 Deployment Deployment 用于管理 Pod 副本和更新策略。 方式一&#xff1a;命令式创建 kubectl create deployment nginx-deployment --imagenginx:latest --replicas3 --port80--replicas3&#xff1a;指定副本数为 3 --port80&#xff1a;容…...

我的世界1.20.1forge模组进阶开发教程生物篇(1)——生成

生物生成 生物生成Alexmob介绍:**1. 核心功能与技术实现****2. 项目结构与代码质量****3. 社区协作与维护****4. 扩展性与开发挑战****5. 开发者学习价值**食蚁兽一、实体属性与行为控制(`EntityAnteater`类)二、实体注册与生成规则(`AMEntityRegistry`类)三、全局生成逻辑…...

1.5 Spring Boot项目打包和运行

本文介绍了如何使用Spring Boot进行项目打包和运行。首先&#xff0c;讲解了如何将Spring Boot项目打包为可执行的JAR包&#xff0c;并直接运行&#xff0c;无需部署到外部Web服务器。接着&#xff0c;介绍了如何将项目打包为WAR包&#xff0c;以便部署到Web容器中&#xff0c;…...

287. 寻找重复数

由于题目规定数组中的数的范围是1-n&#xff0c;因此可以构造出下标n和值nums[n]的映射f(n)&#xff0c;然后构成一个链表&#xff0c;当有重复数字时&#xff0c;链表存在环&#xff0c;找到重复数字即找到链表环的入口&#xff0c;参考142. 环形链表II。 class Solution {pu…...

如何高效解决 Java 内存泄漏问题方法论

目录 一、系统化的诊断与优化方法论 二、获取内存快照&#xff1a;内存泄漏的第一步 &#xff08;一&#xff09;自动生成 Heap Dump &#xff08;二&#xff09;手动生成 Heap Dump 三、导入分析工具&#xff1a;MAT 和 JProfiler &#xff08;一&#xff09;MAT (Memor…...

【Agent】OpenManus 项目架构分析

这是我录制的一个视频&#xff0c;主要是描述我理解的 OpenManus 的思维逻辑&#xff0c;通过这个小的思维逻辑的复现&#xff0c;为后面要再分析其他 Agent 的实现做一个准备。 1. 项目概述 OpenManus 是一个基于大语言模型的智能体框架&#xff0c;旨在提供一个无需邀请码的…...

hive-进阶版-1

第6章 hive内部表与外部表的区别 Hive 是一个基于 Hadoop 的数据仓库工具&#xff0c;用于对大规模数据集进行数据存储、查询和分析。Hive 支持内部表&#xff08;Managed Table&#xff09;和外部表&#xff08;External Table&#xff09;两种表类型&#xff0c;它们在数据…...

规模效应的三重边界:大白话解读-deepseek为例

前言&#xff1a;当Scaling Laws遇见边际递减效应 在人工智能的狂飙突进中&#xff0c;大语言模型如同不断膨胀的星体&#xff0c;吞噬着海量算力与数据。OpenAI于2020年揭开的Scaling Laws&#xff0c;曾为这场盛宴指明方向&#xff1a;模型性能随参数规模&#xff08;N&…...