Scikit learn SKL分类器与AUC方法ROC-AUC得分的差异

Scikit learn SKL分类器与AUC方法ROC-AUC得分的差异,scikit-learn,random-forest,roc,auc,Scikit Learn,Random Forest,Roc,Auc,我分别从sklearn的RandomForestClassifier和ROC_曲线AUC方法中获得不同的ROC-AUC分数 以下代码使我的ROC-AUC(即gs.best_score_)为0.878: def train_model(mod = None, params = None, features = None, outcome = ...outcomes array..., metric = 'roc_auc'): gs = GridSearchCV(mod,

我分别从sklearn的RandomForestClassifier和ROC_曲线AUC方法中获得不同的ROC-AUC分数

以下代码使我的ROC-AUC(即gs.best_score_)为0.878:

def train_model(mod = None, params = None, features = None, 
        outcome = ...outcomes array..., metric = 'roc_auc'):
    gs = GridSearchCV(mod, params, scoring=metric, loss_func=None, score_func=None, 
        fit_params=None, n_jobs=-1, iid=True, refit=True, cv=10, verbose=0, 
        pre_dispatch='2*n_jobs', error_score='raise')
    gs.fit(...feature set df..., outcome)

    print gs.best_score_
    print gs.best_params_

    return gs

model = RandomForestClassifier(random_state=2000, n_jobs=-1)
features_to_include = [...list of column names...]

parameters = {
            'n_estimators': [...list...], 'max_depth':[...list...],
            'min_samples_split':[...list...], 'min_samples_leaf':[...list...]
            }

gs = train_model(mod = model, params = parameters, features = features_to_include)
鉴于,以下代码使我的ROC-AUC为0.97:

fpr = dict()
tpr = dict()
roc_auc = dict()
fpr['micro'], tpr['micro'], _ = roc_curve(...outcomes array..., 
                                    gs.predict_proba(...feature set df...)[:, 1])
roc_auc['micro'] = auc(fpr['micro'], tpr['micro'])
为什么会有这样的差异?我的代码有问题吗

谢谢!
Chris

它们将返回不同的值,原因有两个:

  • 由于
    GridSearchCV
    方法将数据分成10组(您在代码中进行了10倍交叉验证),因此使用9进行训练,并报告最后一组的AUC。你得到的最佳分数只是最高的AUC报告(更多信息阅读)。您的
    roc_曲线
    计算报告了整个集合的AUC

  • 默认的交叉验证
    roc_auc
    是宏版本(请参阅),但您稍后的计算将计算微观版本


  • 伟大的所以如果我要正式报告这个模型的AUC,我会使用第二个(0.97)?我猜在这种情况下,“微”版本可能比“宏”更好,因为它考虑了标签不平衡。也就是说,你知道“微观”与“宏观”(如果与AUC计算相关,则为奖金)之间的合理解释吗?我的数据集有一堆真假和预测假,它们不会出现在假阳性率或真阳性率中。这会影响我使用微与宏的决定吗?谢谢不完全是这样——要“正式”报告合理的AUC,你需要一些没有经过培训的测试集。使用培训数据报告测试/性能指标是一种欺骗,而且总是超过报告。我会使用较低(第一)分作为您报告的AUC。对于宏与微,我发布的链接应该对此进行解释。