Разница в показателях ROC-AUC в методах sklearn RandomForestClassifier и auc

Я получаю разные оценки ROC-AUC из методов Sklearn RandomForestClassifier и roc_curve, 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'])

Почему такая разница? Я что-то не так сделал со своим кодом?

Спасибо! Крис


person Chris    schedule 05.03.2016    source источник


Ответы (1)


Они вернут разные значения по двум причинам:

  1. поскольку метод GridSearchCV разбивает ваши данные на 10 групп (вы выполняете 10-кратную перекрестную проверку в своем коде), использует 9 для обучения и сообщает AUC для последней группы. Best_score_, который вы получаете, - это просто AUC с наибольшим сообщением, сообщенное как таковое (дополнительную информацию читайте в здесь). Ваш roc_curve расчет показывает AUC для всего набора.

  2. По умолчанию перекрестная проверка roc_auc - это версия макроса (см. здесь), но ваши последующие вычисления вычисляют микроверсию.

person mprat    schedule 06.03.2016
comment
Большой. Итак, если бы я сообщал AUC «официально» для этой модели, я бы использовал вторую (0,97)? И я предполагаю, что в этом случае «микро» версия, вероятно, лучше, чем «макро», потому что она учитывает дисбаланс этикеток. Тем не менее, знаете ли вы хорошее объяснение «микро» и «макро» (бонус, если это относится к расчетам AUC)? В моем наборе данных есть несколько истинных ложных и ложных прогнозов, которые не отображаются в ложноположительной ставке или истинно положительной скорости. Повлияет ли это на мое решение использовать микро или макро? Спасибо!! - person Chris; 06.03.2016
comment
Не совсем так - чтобы «официально» сообщить о разумном AUC, вам понадобится какой-то набор тестов, на котором не учились. Использование данных обучения для составления отчетов о тестировании / показателях производительности является обманом и всегда приводит к завышению отчетов. Я бы использовал НИЖНЮЮ (первую) оценку в качестве AUC, о которой вы сообщаете. Для макро и микро, ссылка, которую я опубликовал, должна объяснить это. - person mprat; 07.03.2016