ROC AUC 值随cross_val_score和cross_val_predict的差异



我正在使用python sklearn的10倍交叉验证来计算梯度增强分类器的ROC AUC值。我以两种方式完成了此操作,我认为这些方法会给出相同的结果,但它们没有:(1( 将cross_val_predictmethod = 'predict_proba'一起使用,通过交叉验证获得预测概率,然后使用roc_auc_score计算每个折叠的 AUC,而不是 (2( 将cross_val_scorescoring = 'roc_auc'一起使用。结果并没有太大的不同,但令我困扰的是它们完全不同(请参阅下面的代码和输出(。谁能解释这种差异?

gbm = GradientBoostingClassifier(loss='deviance', n_estimators=initNumTrees, learning_rate=0.001, subsample=0.5, max_depth=1, random_state=12345, warm_start=True)
foldgen = StratifiedKFold(n_splits=10, shuffle=True, random_state=12345)
cv_probs = cross_val_predict(gbm, X_train, y_train, method='predict_proba', cv=foldgen, n_jobs=n_cores)[:,1]
auc = []
for train_index, test_index in foldgen.split(X_train, y_train):
auc.append(roc_auc_score(y_train[test_index], cv_probs[test_index]))
np.round(auc,4)
array([ 0.6713,  0.5878,  0.6315,  0.6538,  0.6709,  0.6724,  0.666 ,
0.6857,  0.6426,  0.6581])

对:

cv_values = cross_val_score(gbm, X_train, y_train, scoring='roc_auc', cv=foldgen, n_jobs=n_cores)
np.round(cv_values,4)
array([ 0.6391,  0.6159,  0.6673,  0.6613,  0.6748,  0.6754,  0.6869,
0.7107,  0.6552,  0.6602])

我遇到了同样的问题。

我阅读了文档并找到了这篇文章。之后,我开始使用方法make_scorer而不是文字字符串roc_auc_score

所以,这对我有用,现在当我使用cross_val_scoreStratifiedKFold时,我可以得到相同的结果。

我希望有用。

最新更新