【问题标题】:Confusion while validating dataset using cross-validation in scikit learn在 scikit learn 中使用交叉验证验证数据集时的困惑
【发布时间】:2022-01-19 20:08:03
【问题描述】:

我的困惑源于这张图片

可在 Scikit-learn 文档 here 上找到。据我从这张图片中了解到,整个数据集被分成两个训练集和测试集,交叉验证只发生在训练部分。但是我们如何进行如图中橙色框所示的最终评估呢?文档仅显示此示例

from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1, random_state=42)
scores = cross_val_score(clf, X, y, cv=5)
scores

然后它将像array([0.96..., 1. ..., 0.96..., 0.96..., 1. ])一样输出每个折叠的分数数组。如图中橙色框所示,如何对保留用于最终验证的原始数据进行最终评估?我没有从文档中对此有任何清楚的了解

【问题讨论】:

  • 图片和代码在这里断章取义;还有另一个代码 sn-p 使用 train_test_split 生成训练集和测试集,在训练集上应用 CV,并评估测试数据 X_test 的性能。但无论如何,这不是一个编程的问题。
  • 我投票结束这个问题,因为它与 [help[] 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅stackoverflow.com/tags/machine-learning/info 中的介绍和注意事项(这里也适用)。

标签: python scikit-learn cross-validation


【解决方案1】:

cross validation schema explanation 如果我们留在表格中,折叠 [0.85, 0.89, .9, 0.82, ...] 的评估结果是无用的 然后,我们计算所有折叠的评估平均值(即表格的平均值),然后,我们决定是否通过测试阶段

交叉验证非常重要(尽管它是一项繁重的操作,尤其是对于大型数据集),它用于在任何可能的数据分区上训练有问题的模型(对于测试也是如此), 如果我们在交叉验证中获得了好成绩,这意味着我们的模型在我们的数据集上得到了很好的训练,这将给出一个表现良好的模型(一般而言)

【讨论】:

  • 这是否意味着我们需要再次对测试数据执行 cv?还是我们只是根据测试数据进行拟合和预测。当我尝试仅预测测试数据时,scikit learn 会告诉我再次适应...这对我来说没有意义
  • 不,我们不对测试数据进行调整和CV 为什么要对训练数据进行CV?这样做是为了在获得经过训练的模型(在训练数据上带有 CV)后,在我们构建模型的同时对每个训练分数进行小测试,我们直接对测试数据进行预测,测试数据是对生产环境中使用的数据
  • 为了清楚起见,请编辑您的答案; OP有理由感到困惑。尝试回答问题,避免陈述简历的重要性或难度等。
猜你喜欢
  • 2017-04-28
  • 2016-04-25
  • 2017-06-23
  • 2017-09-02
  • 1970-01-01
  • 2016-05-09
  • 2018-04-02
  • 2020-12-09
  • 2012-01-07
相关资源
最近更新 更多