✨ 欢迎关注 ✨
本节介绍: 绘制带置信区间的机器学习模型学习曲线 。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。
✨ 文献信息 ✨
图 (b) 展示AdaBoost模型在训练和交叉验证阶段的学习曲线,其中训练误差(以MSE为单位)逐渐减少,而交叉验证误差在初期有所波动后趋于稳定,表明模型在训练过程中不断优化
学习曲线帮助监控模型的训练过程,通过显示训练误差与验证误差随时间(或训练迭代次数)的变化,可以识别出是否存在过拟合(验证误差远大于训练误差)或欠拟合(训练误差高且没有显著下降)
理想的学习曲线应该是训练误差和验证误差都较低且接近,表明模型具有良好的泛化能力,并且没有过拟合或欠拟合
✨ 代码实现 ✨
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-20公众号Python机器学习AI.xlsx"
df = pd.read_excel(path)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['SR'], axis=1)
y = df['SR']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
from sklearn.model_selection import learning_curve, KFold
from sklearn.ensemble import RandomForestRegressor
# 创建随机森林回归模型
model = RandomForestRegressor(random_state=42)
# 使用 KFold 进行 K 折交叉验证
kf = KFold(n_splits=10, shuffle=True, random_state=42)
# 生成学习曲线数据
train_sizes, train_scores, valid_scores = learning_curve(
model, X_train, y_train, train_sizes=np.linspace(0.1, 1.0, 100), cv=kf, scoring='neg_mean_squared_error', n_jobs=-1
) # train_sizes训练集大小,从10%到100%生成100个点
使用 learning_curve 函数根据训练集大小(从 10% 到 100%)生成随机森林回归模型的学习曲线,评估训练和验证误差(均方误差)。需要注意的是,这里的学习曲线是基于不同训练集大小的表现,而不是像深度学习中的“epoch”概念,即训练轮数或迭代次数
# 将得分转换为正的均方误差(MSE)
train_scores_mse = -train_scores
valid_scores_mse = -valid_scores
# 计算训练集得分的均值和标准差
train_mean_mse = np.mean(train_scores_mse, axis=1)
train_std_mse = np.std(train_scores_mse, axis=1)
# 计算交叉验证集得分的均值和标准差
valid_mean_mse = np.mean(valid_scores_mse, axis=1)
valid_std_mse = np.std(valid_scores_mse, axis=1)
# 绘制学习曲线 ---
plt.style.use('seaborn-v0_8-whitegrid') # 绘图样式
plt.figure(figsize=(10, 6))
# 绘制训练误差的均值(虚线)
plt.plot(train_sizes, train_mean_mse,
linestyle='--', color='black',
label='Training Error')
# 绘制交叉验证误差的均值(实线)
plt.plot(train_sizes, valid_mean_mse,
linestyle='-', color='black',
label='Validation Error')
# 填充训练误差的置信区间
plt.fill_between(train_sizes,
train_mean_mse - train_std_mse,
train_mean_mse + train_std_mse,
alpha=0.2, color='darkgray') # 使用深灰色以便区别
# 填充交叉验证误差的置信区间
plt.fill_between(train_sizes,
valid_mean_mse - valid_std_mse,
valid_mean_mse + valid_std_mse,
alpha=0.2, color='gray') # 使用灰色
plt.title('Learning Curve for Random Forest Regressor with K-Fold CV', fontsize=14, fontweight='bold') # 与示例标题匹配
plt.xlabel('Epoch', fontsize=12, fontweight='bold')
plt.ylabel('Mean Squared Error', fontsize=12, fontweight='bold')
# 添加图例
plt.legend(loc='upper right', fontsize=10)
max_error_display = max(np.max(valid_mean_mse + valid_std_mse), np.max(train_mean_mse + train_std_mse))
plt.xlim(left=0) # 让 x 轴从 0 开始
# 自动调整布局
plt.tight_layout()
plt.savefig("1.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
绘制带置信区间的学习曲线,展示了随机森林回归模型在不同训练集大小下的训练误差和验证误差(均方误差 MSE),并通过填充置信区间来表示误差的不确定性,同时使用K折交叉验证来评估模型的表现,这个绘图函数是通用的,因为它通过learning_curve函数与模型的预测误差配合使用,适用于任何机器学习模型。只要模型能够返回训练和验证误差(如通过交叉验证),就可以使用此方法来绘制学习曲线并可视化模型的性能表现
当然,一些机器学习模型,如XGBoost和LightGBM,自带函数可以直接返回学习曲线数据,包括训练误差和验证误差,这使得绘制学习曲线更加简便
import xgboost as xgb
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
# 使用适合回归任务的目标函数
params = {'objective': 'reg:squarederror', 'eval_metric': 'rmse'}
evals = [(dtrain, 'train'), (dtest, 'test')]
# 训练模型并监控学习曲线
evals_result = {}
model = xgb.train(params, dtrain, num_boost_round=100, evals=evals,
early_stopping_rounds=100, evals_result=evals_result)
# 绘制学习曲线
epochs = len(evals_result['train']['rmse']) # 获取训练过程的轮次
x_axis = range(0, epochs)
# 绘制训练和验证误差
plt.figure(figsize=(10, 6))
plt.plot(x_axis, evals_result['train']['rmse'], label='Train RMSE')
plt.plot(x_axis, evals_result['test']['rmse'], label='Test RMSE')
plt.title('XGBoost Learning Curve')
plt.xlabel('Boosting Rounds')
plt.ylabel('RMSE')
plt.legend()
plt.grid(True)
plt.savefig("2.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
这里使用XGBoost回归模型训练数据,并通过自带的xgb.train()函数监控训练和测试集的误差(RMSE),然后绘制出随着提升轮次(Boosting Rounds)变化的学习曲线,展示模型在训练过程中的性能变化
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费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与随机森林结合的多模型特征选择方法
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考