交叉验证如何在学习曲线中发挥作用?蟒蛇学习
Posted
技术标签:
【中文标题】交叉验证如何在学习曲线中发挥作用?蟒蛇学习【英文标题】:how does the cross-validation work in learning curve? Python sklearn 【发布时间】:2020-09-18 10:51:00 【问题描述】:假设我的学习曲线是sklearn learning curve SVM。而且我还在进行 5 折交叉验证,据我了解,这意味着将您的 训练 数据分成 5 份,对其中的四个进行训练并在最后一个上进行测试。
所以我的问题是,由于LearningCurve
中的每个数据点,训练集的大小都是不同的(因为我们想看看模型随着数据量的增加会如何表现),那么交叉-在这种情况下验证工作?它仍然将整个训练集分成 5 个相等的部分吗?还是将当前点训练集分成五个不同的小块,然后计算测试分数?是否可以获得每个数据点的混淆矩阵? (即真阳性、真阴性等)。我还没有看到基于 sklearn 学习曲线代码的方法。
交叉验证的折叠次数与我们在train_sizes = np.linspace(0.1, 1.0, 5)
中拆分多少训练集有关吗?
train_sizes, train_scores, test_scores, fit_times, _ = learning_curve(estimator,
X, y, cv,
n_jobs, scoring,
train_sizes)
谢谢!
【问题讨论】:
【参考方案1】:不,它再次将训练数据分成 5 折。相反,对于训练折叠的特定组合(例如 - 折叠 1、2、3 和 4 作为训练),它将仅从这 4 个训练折叠中选择 k 个数据点(x-tick)作为训练。测试折叠将用作测试数据。
如果您查看代码here,您会更清楚。
for train, test in cv_iter:
for n_train_samples in train_sizes_abs:
train_test_proportions.append((train[:n_train_samples], test))
n_train_samples
将类似于 [200,400,...1400]
对于您提到的情节。
交叉验证的折叠次数与我们在 train_sizes = np.linspace(0.1, 1.0, 5) 中拆分的训练集的数量有关吗?
我们不能为某个train_sizes
分配任意数量的折叠。它只是来自所有训练折叠的数据点的一个子集。
【讨论】:
滴答声是什么意思?我还看到学习曲线页面上写着“train_scores array of shape (n_ticks, n_cv_folds)”。你也介意解释一下吗? ticks 是绘图 x 轴上唯一值的数量。在我的回答中,这不过是n_train_samples
。 train_scores
是二维数组,行代表n_train_samples
,列代表 CV 折叠的每个组合。如果您使用 5 折交叉验证,那么您将获得 5 种不同的训练和测试数据拆分组合。这些将在train_scores
的列中表示。以上是关于交叉验证如何在学习曲线中发挥作用?蟒蛇学习的主要内容,如果未能解决你的问题,请参考以下文章
数据挖掘机器学习[三]---汽车交易价格预测详细版本{特征工程交叉检验绘制学习率曲线与验证曲线}