首页 文章

如何正确交叉验证

提问于
浏览
4

我一直在尝试使用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 回答

  • 1

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

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

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

    是的,更接近预测 on the validation part of that particular split.

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

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

    一般来说,你只是想找一个好的 mean cross validation score (mCVS)的模型 . 但是如果你的模型都具有相同的mCVS,那么你会选择标准偏差最小的模型 . 例如,在金融中,波动性和不确定性是根据锐利率选择不需要的模型,这可能类似于均值/标准差 . 但是在一个Kaggle比赛中,获胜标准是mCVS,那么你显然想要最大化并忽略标准 .

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

相关问题