【问题标题】:Clarification needed for the cross_val_score function of sklearnsklearn 的 cross_val_score 函数需要澄清
【发布时间】:2018-11-21 02:31:56
【问题描述】:

我正在使用带有 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-learning scikit-learn cross-validation


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我需要获得总体上效果最好的模型。我看到使用 LOOCV,我可以在我的数据上获得 60 种不同模型的平均性能。现在,我需要一个通用的最佳模型。如果我使用所有的数据,那么 DTC 模型完美地拟合数据并且性能是 100%,即过拟合。我是否应该将这个在整个数据集上训练的 DTC 模型用于一般用途,并说它的平均性能是我从 LOOCV 得到的?然而,在那种情况下,我意识到这个过拟合模型没有考虑其中一个特征,这似乎对 CV 性能很重要
    • 是的,这就是你必须依赖的。您要么做出一个假设,即模型及其性能可以泛化,因此使用 LOO 的 CV 的性能估计具有代表性,或者您不能做出正确的假设,然后整个 CV 毫无意义,并且您根本无法泛化而陷入困境.我鼓励您阅读我之前回复中添加的链接中的讨论——这有助于进入正确的心态。一个小的澄清do not consider one of the features-我想你的意思是example而不是feature。或者你有 60 个特征?
    • 不,我有 60 个样本和 5 个特征。如果我绘制 DTC 图表(在拟合全部 60 个样本之后),我看不到规则中使用的 5 个特征之一(在特征重要性图中也为 0)。但是,我知道这有助于提高 LOOCV 分析的平均准确度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2012-07-18
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多