✨ 欢迎关注Python机器学习AI ✨
本节介绍: 通过交叉验证减少数据偏差XGBoost模型残差可视化 。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,细节并不保证与原文一定相同,仅供参考。 详细数据和代码、文献将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。
✨ 文献信息 ✨
文献中通过交叉验证方法对XGBoost模型进行了训练与测试,为了确保评估的可靠性,数据集被划分为四个子集,其中一个子集被用作测试集,其他三个用于训练集,并通过四轮交叉验证减少数据划分带来的偏差
在可视化部分,文献中的图表展示了基于不同训练集(图中的a-d部分)构建的XGBoost模型的残差图。每个子图显示了模型在预测值与残差之间的关系,其中:
- 蓝色点表示训练数据的残差,红色圆圈表示测试数据的残差
- 每个子图的标题标明了训练集和测试集的R²值,这反映了模型在不同数据集上的拟合效果
这些残差图有助于分析模型的表现,并验证模型在不同数据划分下的稳定性与泛化能力
实际上,图中的训练集和测试集只是交叉验证过程中划分出的不同数据子集。每次交叉验证时,整个数据集会被分为四个子集,每个子集都会轮流作为一次测试集(也叫k折交叉验证里面的验证集),而剩下的三个子集则作为训练集。因此,训练集和测试集的划分并不是一次性固定的,而是在每轮交叉验证中动态调整的。这种方式可以有效减少数据划分的偏差,确保模型能够在不同数据子集上进行训练和测试,从而提高评估结果的可靠性和泛化能力
✨ 模拟实现 ✨
✨ 部分代码 ✨
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
import warnings
# 忽略所有警告
warnings.filterwarnings("ignore")
path = r"2025-5-14公众号Python机器学习AI.xlsx"
df = pd.read_excel(path, index_col=0)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['log_price', 'UTM_X', 'UTM_Y'], axis=1)
y = df['log_price']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
import xgboost as xgb
from sklearn.model_selection import GridSearchCV, KFold
from sklearn.metrics import mean_squared_error, r2_score
# 定义模型
model = xgb.XGBRegressor(n_estimators=500, # 设置迭代次数
max_depth=6, # 树的深度
learning_rate=0.1, # 学习率
eval_metric='rmse', # 使用RMSE作为评估指标
verbose=False, # 禁用输出
random_state=1314 # 设置随机种子
)
# 定义参数网格
param_grid = {
'learning_rate': [0.05, 0.1, 0.2],
'max_depth': [4, 6, 8],
'n_estimators': [100, 500, 1000]
}
# 设置4折交叉验证
kf = KFold(n_splits=4, shuffle=True, random_state=1314)
# 网格搜索与交叉验证
grid_search = GridSearchCV(estimator=model,
param_grid=param_grid,
cv=kf,
scoring='r2', # 将评分标准修改为R^2
verbose=1,
n_jobs=-1)
# 执行网格搜索
grid_search.fit(X_train, y_train)
# 输出最佳参数和得分
print("Best parameters found: ", grid_search.best_params_)
print("Best score (R^2) found: ", grid_search.best_score_)
# 使用最佳参数训练最终模型
best_model = grid_search.best_estimator_
使用XGBoost回归模型,通过网格搜索和4折交叉验证来优化模型的超参数(学习率、树的深度和迭代次数),并选择最佳参数训练最终模型,优化目标是最大化R²评分
这里的K折交叉验证是通过KFold函数自动完成的,数据划分过程是由GridSearchCV内部处理的,因此无法直接看到具体的数据分割情况;若想提取每个折的数据划分,可以通过kf.split(X_train)来查看每次训练和测试集的具体分割,然后进行相关的结果输出即可,最后对各个数据集进行相应可视化
从图中的残差图可以看到,四个K折交叉验证(kf1、kf2、kf3、kf4)在训练集和测试集上的表现。每个子图显示了对应折的训练集(蓝色点)和测试集(灰色点)的残差与预测值之间的关系,且每个子图的右上角标明了训练集和测试集的R²值
在这里,K折交叉验证结合网格搜索使用时,最后返回的最优参数是通过每一折的平均R²值来决定的,而不是单独在某一个数据分割上获得的最优参数。这个方法的目的在于评估模型的稳定性,而不是仅仅依赖于单一数据划分。通过在每一折上训练和测试,模型的性能可以在多个不同的数据子集上得到验证,从而确保模型具有更好的泛化能力。上面的可视化,也就是 各个测试集 R²的均值,等于直接采用 KFold函数返回的Best score (R^2) found值
最终的Best score (R²) found结果反映了所有折的平均成绩,而不仅仅是某一折的最优值,这有助于避免过拟合或偏倚,提升模型在不同数据集上的稳定性和可靠性。因此,K折交叉验证的应用旨在提高模型评估的准确性,使其能够在实际应用中表现得更加稳健
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 购买介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!
往期推荐
机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学
因果推断:利用EconML实现双重机器学习估计条件平均处理效应 (CATE)
期刊复现:基于XGBoost模型的网页工具SHAP力图解释单样本预测结果
期刊配图:nature cities通过ALE(累积局部效应)解析特征对模型影响
期刊复现:结合因果推断与SHAP可解释性的机器学习实现应用流程
nature communications:基于Light GBM与随机森林结合的多模型特征选择方法
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考