Scikit learn sklearn.cross_验证分数是什么意思?

Scikit learn sklearn.cross_验证分数是什么意思?,scikit-learn,cross-validation,Scikit Learn,Cross Validation,我正在使用GradientBoostingRegressionor处理一个时间序列预测问题,我认为我看到了明显的过度拟合,这可以从训练的RMSE明显优于预测的RMSE中得到证明。为了检验这一点,我尝试使用sklearn.model\u selection.cross\u validate,但在理解结果时遇到了问题 首先:我通过拟合所有训练数据来计算RMSE,然后使用拟合模型“预测”训练数据输出,并将其与训练输出(与我用于拟合的数据相同)进行比较。我观察到的RMSE与预测值的数量级相同,更重要的是

我正在使用
GradientBoostingRegressionor
处理一个时间序列预测问题,我认为我看到了明显的过度拟合,这可以从训练的RMSE明显优于预测的RMSE中得到证明。为了检验这一点,我尝试使用
sklearn.model\u selection.cross\u validate
,但在理解结果时遇到了问题

首先:我通过拟合所有训练数据来计算RMSE,然后使用拟合模型“预测”训练数据输出,并将其与训练输出(与我用于拟合的数据相同)进行比较。我观察到的RMSE与预测值的数量级相同,更重要的是,它与我向Kaggle提交预测结果时得到的RMSE处于相同的范围内(尽管后者较低,反映了过度拟合)

其次,我使用相同的训练数据,但应用
sklearn.model\u selection.cross\u validate
,如下所示:

cross_validate( predictor, features, targets, cv = 5, scoring = "neg_mean_squared_error" )
我认为
neg_mean_squared_error
应该是RMSE的平方。考虑到这一点,我仍然发现cross_validate报告的误差比我如上所述计算的RMSE小一到两个数量级

此外,当我将GradientBoostingRegressionor
max_depth
从3修改为2时,我希望这可以减少过度拟合,从而改善CV误差,我发现情况正好相反

我对使用交叉验证非常感兴趣,因此我不必通过使用Kaggle提交来验证我的超参数选择,但根据我观察到的情况,我不清楚结果是否可以理解或有用


有人能解释一下我应该如何使用交叉验证来获得有意义的结果吗?

我认为这是一个概念上的问题

如果要计算预测误差,则不应使用训练数据。顾名思义,这类数据只用于训练,为了评估准确度得分,你必须使用模型从未见过的数据

关于交叉验证,我可以说这是一种找到最佳培训/测试集的方法。过程如下:您将数据划分为
n
组,并进行各种迭代以更改您选择的测试组。如果您有
n
组,您将进行
n
迭代,每次训练和测试集都将不同。下图更容易理解

基本上你应该做的是:

  • 使用0到30个月的时间对模型进行培训(例如)
  • 请参阅以31到35个月为输入的预测
如果输入必须是相同的长度,则将特征一分为二(应为17个月)


我希望我的理解正确,其他评论。

一个简单的澄清。你能更好地解释一下你是如何进行培训的吗?拟合模型后,是否使用相同的数据进行预测?当然:任务是,给定多个商店和商品34个月的销售信息,预测每个商店/商品下个月的销售。对于培训,我使用月[0,33]作为特征,以月34作为目标。对于预测,我使用月份[1,34]作为特征,并预测第35个月。因此,我不希望看到训练RMSE与预测的RMSE完全相等(Kaggle为我计算),但我认为它们至少具有可比的数量级,但它们不是。Federico,我想我理解CV,我之所以使用CV,是为了更真实地估计预测“新”数据时的误差。我不明白的是(在许多其他事情中…)为什么简历错误似乎不能与“自我错误”相提并论。我确实理解“自我错误”是一个过于乐观的估计(由于过度拟合),但我希望简历能够提供一些关于过度拟合本身的见解