首页 > 解决方案 > sklearn 的 cross_val_score 函数需要澄清

问题描述

我正在使用带有 LeaveOneOut 函数的 cross_val_score 函数,因为我的数据有 60 个样本。

我对 cross_val_score 如何计算 Leave One Out 交叉验证 (LOOCV) 中每个估计的结果感到困惑。

例如,在 LOOCV 中,它适合使用 59 个样本进行训练的模型,比如说决策树分类器 (DTC),并预测剩下的单个样本。

那么主要的问题是:它是否在 cross_val_score 中的每个实例(即 60 种不同的拟合)都适合一个新模型?

如果是这样,事情就会变得混乱。

然后我可以有一个平均准确度(满分 60)分数来进行性能评估。但我需要提出一个最好的 DTC 模型,而不仅仅是针对我自己的数据,尽管它基于我的数据。

如果我使用整个数据,它非常适合,但该模型只是过拟合。

我想要一个基于我的数据通常效果最好的单一 DTC 模型。

如果有意义的话,这是我的代码:

    model = DecisionTreeClassifier(random_state=27, criterion='gini', max_depth=4, max_features='auto' )
    loocv = LeaveOneOut()
    results = cross_val_score(model, X, y, cv=loocv)

标签: machine-learningscikit-learncross-validation

解决方案


我不完全明白你想知道什么。

它是否适合 cross_val_score 内的每个实例(即 60 种不同的拟合)的新模型?

是的,在你的情况下确实如此。有什么后续问题可以帮助澄清您在这种情况下的困惑?

CV 的想法是获得您选择的模型构建过程的性能估计。最终模型可以(并且应该从数据中受益最大)建立在完整的数据集上。然后你可以用它来预测测试数据,你可以用你的cross_val_score结果来估计这个模型的性能。在我之前的答案中查看更详细的答案以及非常有用的链接。

我的回答适用于更大的数据集。可能存在与小数据集处理相关的麻烦,我不知道,但我不明白为什么逻辑不能推广到这种情况。


推荐阅读