使用 sci-kit 中的训练/测试数据而不是交叉验证的学习曲线

Posted

技术标签:

【中文标题】使用 sci-kit 中的训练/测试数据而不是交叉验证的学习曲线【英文标题】:Learning curves with train/test data in sci-kit instead of cross validation 【发布时间】:2015-12-16 18:44:40 【问题描述】:

我有一个单独的训练和测试数据(从加载到不同 pandas 数据框中的不同 CSV),我想用这个训练和测试数据绘制学习曲线,而不是使用交叉验证从训练集本身生成的训练和测试数据(这似乎是 learning_curve 的常用方式)。

scikit 似乎希望您的测试和训练数据出现在同一个 Dataframe 中,但这样分类器也会学习测试数据,这不是我想要的。

我该如何解决这个问题?我是 sci-kit 的新手。

【问题讨论】:

不确定“从训练集本身生成”是什么意思。不要将测试集传递给函数,它不会这样做。 AFAIK 你不能用内置的 sklearn 函数做你要求的事情,所以你需要自己写。您对“自己编写”解决方案感兴趣吗? 【参考方案1】:

您需要将训练数据和测试数据分开(至少在代码中的不同变量中)。然后可以将learning curve 应用于训练集。这样您就可以在不使用测试集的情况下优化您的实验(以避免过度拟合)。

为了验证您在测试集上的表现如何,scikit-learn 提供了validation curve,它根据测试集进行评估。

【讨论】:

【参考方案2】:

Scikit-Learn 更棘手。它允许您定义训练集和测试集的 train_sizes,然后对它们进行交叉验证(参数 cv,默认为 3 折交叉验证)。

【讨论】:

以上是关于使用 sci-kit 中的训练/测试数据而不是交叉验证的学习曲线的主要内容,如果未能解决你的问题,请参考以下文章

交叉验证

交叉验证(Cross Validation)原理小结

使用训练阶段使用的完全相同的数据集进行交叉验证是不是很好?

交叉验证

交叉验证与训练集验证集测试集

交叉验证(Cross Validation)原理小结