K-2 交叉验证是否本质上等于 50:50 的训练测试拆分?

Is K-2 cross-validation essentially equal to train-test split of 50:50?

我正在处理一个数据项目任务,要求我使用 50% 的数据进行训练,其余 50% 的数据用于测试。我想使用交叉验证的魔力并且仍然满足上述条件。

目前,我的代码如下:

clf = LogisticRegression(penalty='l2', class_weight='balanced'

tprs = []
aucs = []
mean_fpr = np.linspace(0, 1, 100)

#cross validation
cv = StratifiedKFold(n_splits=2)
i = 0
for train, test in cv.split(X, y):
    probas_ = clf.fit(X[train], y[train]).predict_proba(X[test])
    # Compute ROC curve and area the curve
    fpr, tpr, thresholds = roc_curve(y[test], probas_[:, 1])
    tprs.append(interp(mean_fpr, fpr, tpr))
    tprs[-1][0] = 0.0
    roc_auc = auc(fpr, tpr)
    aucs.append(roc_auc)
    i += 1

print("Average AUC: ", sum(aucs)/len(aucs),"AUC: ", aucs[-1],)

由于我只使用了 2 个拆分,是否认为我正在使用 50:50 的训练测试拆分?或者我应该先将数据拆分为 50:50 然后在训练部分使用交叉验证,最后使用该模型测试剩余的 50% 的测试数据?

你应该实施你的第二个建议。 应该使用交叉验证来调整方法的参数。其中,您示例中的此类参数是 C 参数的值和逻辑回归的 class_weight='balanced' 。所以你应该:

  • 分成 50% 训练,50% 测试
  • 使用训练数据 select 通过交叉验证
  • 模型参数的最优值
  • 用训练数据的最佳参数重新拟合模型
  • 预测测试数据并报告您 selected
  • 的评估指标得分

注意,你应该使用测试数据报告最终分数而不是调整模型,否则你就是作弊。想象一下,实际上您可能要到最后一刻才能访问它们,所以您不能使用它们。