Почему roc_au c дает странные результаты в sklearn? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть проблема двоичной классификации, где я использую следующий код, чтобы получить мои weighted avarege precision, weighted avarege recall, weighted avarege f-measure и roc_auc.

df = pd.read_csv(input_path+input_file)

X = df[features]
y = df[["gold_standard"]]

clf = RandomForestClassifier(random_state = 42, class_weight="balanced")
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
scores = cross_validate(clf, X, y, cv=k_fold, scoring = ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'))

print("accuracy")
print(np.mean(scores['test_accuracy'].tolist()))
print("precision_weighted")
print(np.mean(scores['test_precision_weighted'].tolist()))
print("recall_weighted")
print(np.mean(scores['test_recall_weighted'].tolist()))
print("f1_weighted")
print(np.mean(scores['test_f1_weighted'].tolist()))
print("roc_auc")
print(np.mean(scores['test_roc_auc'].tolist()))

Я получил следующие результаты для один и тот же набор данных с 2 различными настройками объекта.

Feature setting 1 ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'):  
0.6920, 0.6888, 0.6920, 0.6752, 0.7120

Feature setting 2 ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'):
0.6806  0.6754  0.6806  0.6643  0.7233

Итак, мы видим, что в feature setting 1 мы получаем хорошие результаты для «точности», «точности_взвешенного», «отзыва_взвешенного», «f1_weighted» по сравнению с feature setting 2.

Однако, когда дело доходит до 'roc_au c', feature setting 2 лучше, чем feature setting 1. Я нашел это странным, потому что все остальные метри c были лучше с feature setting 1.

С одной стороны, я подозреваю, что это происходит, поскольку я использую weighted баллов для precision, recall and f-measure, а не для roc_auc. Можно ли сделать weighted roc_auc для двоичной классификации в sklearn?

В чем реальная проблема для этих странных результатов roc_au c?

Я с радостью предоставлю более подробную информацию, если это необходимо.

1 Ответ

1 голос
/ 30 марта 2020

Это не странно, потому что сравнивать все эти другие показатели с AU C все равно, что сравнивать яблоки с апельсинами.

Вот общее описание всего процесса:

  • Вероятностные c классификаторы (например, RF здесь) дают вероятностные выходы p в [0, 1].
  • Чтобы получить жесткие предсказания класса (0/1), мы применяем порог с этими вероятностями; если не установлено явно (как здесь), этот порог неявно принимается равным 0,5, т. е. если p>0.5, то class=1, иначе class=0.
  • Метрики, такие как точность, точность, возврат и f1- баллы рассчитываются по прогнозам жесткого класса 0/1, т.е. после применения порогового значения.
  • Напротив, AU C измеряет производительность двоичного классификатора, усредненную по диапазон всех возможных порогов , а не для определенного порога.

Итак, это, безусловно, может произойти, и это действительно может привести к путанице среди новых практикующих.

Вторая часть моего ответа в этот похожий вопрос может быть полезен для более подробной информации. Цитата:

По моему опыту, по крайней мере, большинство практиков ОД считают, что оценка AU C измеряет нечто отличное от того, что на самом деле делает: общее (и неудачное) использование точно так же, как и любой другой показатель «выше-лучше-лучше» c, похоже на точность, что, естественно, может привести к головоломкам, подобным той, которую вы сами express.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...