如何正确交叉验证

时间:2015-01-16 18:55:27

标签: python scikit-learn cross-validation

我一直在尝试使用Python和scikit-learn工具包训练ML分类器。

首先,我在分割数据集时应用了自己的阈值(例如int(len(X)* 0.75)),并在打印指标时得到了这个结果:

         precision    recall  f1-score   support

      1       0.63      0.96      0.76        23
      2       0.96      0.64      0.77        36

avg / total   0.83      0.76      0.76        59

然后我使用交叉验证,以便使用:scores = cross_validation.cross_val_score(X,y,cv = 10)更精确地查看模型的准确度,并获得以下分数:

Cross_val_scores = [0.66666667 0.79166667 0.45833333 0.70833333 0.52173913
                     0.52173913 0.47826087 0.47826087 0.52173913 0.47826087]

准确度:0.56(标准偏差:+/- 0.22),其中精度等于平均值​​(分数)。

有人可以建议我如何正确地解释这些分数吗?我理解在使用交叉验证时如何分割数据集以便在整个数据集范围内观察模型的准确性,但我想了解更多。

  • 例如,是否有一种方法可以将其拆分并达到最高准确度(例如0.79166667),如果可以,我该怎么办?
  • 我想这是因为我的数据集中存在一个分裂,即使用这些数据训练的模型可以产生更接近的预测,对吗?
  • 有没有办法减少相对较高的标准偏差?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

  

有没有办法将它拆分并达到最高的准确度(例如0.79166667),如果是这样我怎么能做到?

可能,但这只意味着通过拟合理想分割的训练部分得到的模型,在理想分割的验证部分具有很高的准确性。这称为过度拟合,即。您获得的模型仅针对特定数据进行了优化,但未能很好地概括为新数据。

  

我想这是因为我的数据集中有一个分裂   使用这些数据训练的模型可以产生更接近的预测

是的,对该特定拆分的验证部分进行更接近的预测

  

有没有办法减少相对较高的标准偏差?

是,通过选择方差较小的模型(例如,参数很少的线性模型)。但请注意,在这种情况下,您可能会失去预测准确性,这就是所谓的偏差 - 方差权衡。

通常,您只想查找具有良好平均交叉验证分数(mCVS)的模型。但是如果你的模型都具有相同的mCVS,那么你会选择标准偏差最小的模型。例如,在金融中,波动性和不确定性是根据锐利率选择不需要的模型,这可能类似于均值/标准。但是在胜利标准是mCVS的Kaggle比赛中,你显然想要最大化并忽略标准。

如果您担心数据集中的变化不允许您有意义地比较模型,那么您可以考虑使用不同数量的拆分并在拆分之前对数据进行混洗。