交叉验证在学习曲线中如何工作? Python sklearn

时间:2020-05-31 00:16:16

标签: python machine-learning scikit-learn

说我的学习曲线是sklearn learning curve SVM。而且我还在进行5倍交叉验证,据我了解,这意味着将您的 training 数据分成5个部分,对其中的4个进行训练,然后对最后一个进行测试。

所以我的问题是,由于对于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 个答案:

答案 0 :(得分:0)

否,它将训练数据再次分为5折。取而代之的是,对于训练折叠的特定组合(例如,将1,2,3和4折叠作为训练),它将仅从这4个训练折叠中选择k个数据点(x滴答)作为训练。测试折叠将被用作测试数据。

如果您查看代码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分配任意数量的折叠。它只是来自所有训练阶段的数据点的子集。