我正在进行数据项目分配,要求我使用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%的测试数据?
答案 0 :(得分:0)
你应该实施你的第二个建议。
应使用交叉验证来调整方法的参数。其中,您的示例中的此类参数是C
参数的值和Logistic回归的class_weight='balanced'
。所以你应该:
请注意,您应该使用仅的测试数据来报告最终得分而不是用于调整模型,否则您就是在作弊。想象一下,实际上你可能无法访问它们直到最后一刻,所以你不能使用它们。