K-2交叉验证是否基本上等于50:50的列车测试分割?

时间:2018-01-22 07:42:49

标签: python machine-learning cross-validation train-test-split

我正在进行数据项目分配,要求我使用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%的测试数据?

1 个答案:

答案 0 :(得分:0)

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

  • 分成50%的培训,50%的测试
  • 使用训练数据通过交叉验证选择模型参数的最佳值
  • 使用训练数据上的最佳参数重新设置模型
  • 预测测试数据并报告您选择的评估指标的得分

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