sklearn RandomForestClassifier 与 auc 方法中 ROC-AUC 分数的差异

2024-03-20

我分别从 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'])

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

谢谢! 克里斯


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

  1. 自从GridSearchCV方法将您的数据分为 10 组(您在代码中进行 10 倍交叉验证),使用 9 进行训练,并报告最后一组的 AUC。您获得的 best_score_ 只是报告的最高 AUC(更多信息请阅读here http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html#sklearn.grid_search.GridSearchCV). Your roc_curve计算报告整个集合的 AUC。

  2. 默认交叉验证roc_auc是宏版本(参见here http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score),但您稍后的计算会计算微型版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn RandomForestClassifier 与 auc 方法中 ROC-AUC 分数的差异 的相关文章

随机推荐