Как рассчитать AUC для случайной модели леса в склеарне? - PullRequest
2 голосов
/ 27 июня 2019

Метка в моих данных является вектором (N на 1). Значения метки: либо 0 для отрицательных образцов, либо 1 для положительных образцов (так что это проблема двоичной классификации). Я использую функцию .fit sklearn и установил случайный лес в своем наборе поездов. Для расчета AUC для тестового набора я использую metrics.roc_auc_score (test_labels, probabilities). я использую predict_proba(my_test_set) чтобы получить вероятности. Однако predict_proba(my_test_set) возвращает матрицу (N_test, 2). Я видел, как многие люди использовали второй столбец этой возвращенной матрицы (predict_proba(my_test_set)[:,1]) и передавали его в metrics.roc_auc_score для вычисления AUC, но почему второй? Почему не первый столбец (predict_proba(my_test_set)[:,0])?

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

ROC AUC рассчитывается путем сравнения истинного вектора метки с вектором предсказания вероятности класса положительный .

Все scikit-learn классификаторы, включая RandomForestClassifier, установят класс с наивысшей меткой как положительный класс, и соответствующие прогнозируемые вероятности всегда будут во втором столбце матрицы predict_proba. roc_auc_score делает то же самое предположение, а также предполагает, что класс с наивысшей меткой является положительным классом. Следовательно, оба имеют одно и то же определение того, что такое положительный класс, и roc_auc_score ожидает, что классификатор заранее поместит соответствующие вероятности во второй столбец.

Вот почему вы всегда должны делать:

roc_auc_score(y_test, RFC.predict_proba(X_test)[:,1])
1 голос
/ 27 июня 2019

roc_auc_score() предполагает, что y_true будет бинарным показателем для класса, а y_score будет соответствующим счетом.

Как и в вашем случае, y_true - это двоичный индикатор для положительного класса. Чтобы понять, какой столбец представляет оценку вероятности какого класса, используйте clf.classes_. В наших примерах это вернуло бы array([0,1]). Следовательно, нам нужно использовать второй столбец, чтобы получить оценки вероятности для класса 1.

Даже если у вас есть проблема с несколькими классами, преобразуйте ваши метки (y) в двоичный индикатор для требуемого класса и выберите соответствующий столбец из вывода predict_proba(), используя clf.classes_.

Посмотрите на этот пример для получения более подробной информации.

...