了解 Sklearns learning_curve

数据挖掘 Python scikit-学习 交叉验证 准确性
2022-03-01 18:15:00

我一直在使用 sklearns learning_curve ,并且文档没有回答我的一些问题(另请参见此处此处),以及更普遍的关于 sklearn 的函数提出的问题

这是我的数据集模型的一些学习曲线 在此处输入图像描述

以及产生它们的代码:

train_sizes, train_scores, valid_scores =learning_curve(linear_regression_model,rescaled_X_train,Y_train)
axes[0,0].plot(train_sizes,train_scores)
axes[0,1].plot(train_sizes,valid_scores)

train_sizes, train_scores, valid_scores =learning_curve(random_forest_model, rescaled_X_train,Y_train)
axes[1,0].plot(train_sizes,train_scores)
axes[1,1].plot(train_sizes,valid_scores)
  1. 该文档看起来像是,该线learning_curve(linear_regression_model, rescaled_X_train, Y_train)适合模型,而不是简单地显示模型拟合过程以前的行为?

一种。如果它再次拟合模型——你如何传递超参数(例如 SVM 的 gamma 或最大树深度)并确定正在使用的成本函数?

湾。如果不是,这似乎很奇怪。我会假设线性回归器默认情况下只适合最小二乘,而不是涉及 k 倍验证的东西,因为如果我正确查看上面的图表,它似乎是这样。这是sklearn通常适合回归者的方式吗?

  1. 这些图上的 y 轴是准确度得分吗?
2个回答

学习曲线一词在不同的上下文中可能意味着不同的东西,这令人困惑。

在谈论神经网络(和其他迭代训练的模型)时,学习曲线描述了模型的训练进度。它通常用于确定何时停止训练。

在 scikit-learn 中,学习曲线的解释不同。它描述了如果用更少的数据(重新)训练你的模型将如何执行。这可以帮助您猜测模型是否会通过获取更多数据来改进。

重新拟合模型时使用构建模型时指定的相同超参数。

使用的得分函数也是模型的一个参数。许多回归模型默认使用 R2 分数,这很可能是您绘制的分数。

调用learning_curve将针对不同的训练数据集大小多次调整您的模型是正确的。您可以在初始化要使用的模型时简单地传递特定的超参数,然后您可以将其传递给learning_curve参数estimator使用的实际损失函数取决于您提供的估计器的类型,搜索特定估计器的文档可能会为您提供有关拟合模型时使用的损失函数的更多信息。