【问题标题】:Difference in ROC-AUC scores in sklearn RandomForestClassifier vs. auc methodssklearn RandomForestClassifier 与 auc 方法中 ROC-AUC 分数的差异
【发布时间】:2016-06-19 11:56:57
【问题描述】:

我分别从 sklearn 的 RandomForestClassifier 和 roc_curve、auc 方法收到不同的 ROC-AUC 分数。

以下代码让我获得了 0.878 的 ROC-AUC(即 gs.best_score_):

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'])

为什么会有这样的差异?我的代码做错了吗?

谢谢! 克里斯

【问题讨论】:

    标签: scikit-learn random-forest roc auc


    【解决方案1】:

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

    1. 因为 GridSearchCV 方法将您的数据分成 10 组(您在代码中进行 10 倍交叉验证),使用 9 进行训练,并报告最后一组的 AUC。你得到的 best_score_ 只是报告的最高 AUC(更多信息请阅读here)。您的 roc_curve 计算报告了整个集合的 AUC。

    2. 默认的交叉验证roc_auc 是宏版本(参见here),但您以后的计算会计算微版本。

    【讨论】:

    • 太棒了。因此,如果我要“正式”报告此模型的 AUC,我会使用第二个(0.97)吗?我猜在这种情况下,“微”版本可能比“宏”更好,因为它考虑了标签不平衡。也就是说,您是否知道“微观”与“宏观”的一个很好的解释(如果它与 AUC 计算有关)?我的数据集有一堆真假和预测假,它们不会出现在假阳性率或真阳性率中。这会影响我使用微观还是宏观的决定?谢谢!!
    • 不完全正确 - 要“正式”报告合理的 AUC,您需要某种未经训练的保留测试集。使用训练数据报告测试/性能指标是作弊,而且总是夸大其词。我会使用较低(第一)分数作为您报告的 AUC。对于宏观与微观,我发布的链接应该解释它。
    猜你喜欢
    • 2020-11-27
    • 2017-12-17
    • 1970-01-01
    • 2017-10-25
    • 2020-02-23
    • 1970-01-01
    • 2020-03-12
    • 2020-10-01
    • 2019-06-09
    相关资源
    最近更新 更多