如何正确交叉验证

Swa*_*n87 5 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
Run Code Online (Sandbox Code Playgroud)

然后,我使用交叉验证,以便使用以下方法更详细地了解模型的准确性: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),如果可以的话,我该怎么做?
  • 我想发生这种情况是因为我的数据集中存在一个分裂,即使用这些数据训练模型可以产生更精确的预测,对吗?
  • 有没有办法降低相对较高的标准偏差?

感谢您的时间。

ely*_*ase 1

有没有办法分割它并达到尽可能高的精度(例如0.79166667),如果是的话我该怎么做?

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

我想发生这种情况是因为我的数据集中存在分裂,使用这些数据训练的模型可以产生更接近的预测

是的,对特定分割的验证部分进行更仔细的预测。

有没有办法降低相对较高的标准偏差?

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

一般来说,您只想寻找具有良好平均交叉验证分数(mCVS) 的模型。但如果您的模型都具有相同的 mCVS,那么您会选择标准偏差最小的模型。例如,在金融领域,波动性和不确定性是不需要的模型,根据夏普比率(类似于均值/标准差)选择模型。但在 Kaggle 竞赛中,获胜标准是 mCVS,那么您显然会希望最大化它并忽略 std。

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