ROC AUC值与cross_val_score和cross_val_predict的差异

时间:2017-07-13 07:42:38

标签: python scikit-learn cross-validation roc auc

我使用python sklearn使用10倍交叉验证计算梯度增强分类器的ROC AUC值。我已经通过两种方式完成了这项工作,我认为这会给出相同的结果,但它们不会:(1)使用cross_val_predictmethod = 'predict_proba'通过交叉验证获得预测的概率,然后计算AUC每个折叠使用roc_auc_score,而(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])

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

我阅读了文档并找到了this条文章。之后,我开始使用方法make_scorer代替文字字符串roc_auc_score

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

我希望有用。