我使用python sklearn使用10倍交叉验证计算梯度增强分类器的ROC AUC值。我已经通过两种方式完成了这项工作,我认为这会给出相同的结果,但它们不会:(1)使用cross_val_predict
和method = 'predict_proba'
通过交叉验证获得预测的概率,然后计算AUC每个折叠使用roc_auc_score
,而(2)使用cross_val_score
和scoring = '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])
答案 0 :(得分:0)
我遇到了同样的问题。
我阅读了文档并找到了this条文章。之后,我开始使用方法make_scorer代替文字字符串roc_auc_score
。
所以,这对我有用,现在当我使用cross_val_score
和StratifiedKFold
时,可以获得相同的结果。
我希望有用。