sklearn 的 cross_val_score 函数需要澄清

Clarification needed for the cross_val_score function of sklearn

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

我对 cross_val_score 如何在留一法交叉验证 (LOOCV) 中计算每个估计的结果感到困惑。

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

那么主要问题是: 它是否在 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)

我不太明白你想了解什么。

Does it fit a new model at each instance (namely 60 different fits) inside cross_val_score?`

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

CV 的理念是对您选择的模型构建过程 进行性能评估。最终模型可以(并且应该从数据中获益最多)建立在完整的数据集上。然后你可以用它来预测测试数据,你可以用你的 cross_val_score 结果来估计这个模型的性能。在 my earlier answer 中查看更详尽的答案以及非常有用的链接。

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