Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как использовать пакет PRROC, чтобы получить auc ROC & PR для случайного леса в R

Автор вопроса: kyle chanОтветов: 1

Мой ресурс данных: https://www.kaggle.com/mlg-ulb/creditcardfraud Набор данных сильно несбалансирован, на положительный класс (мошенничество) приходится 0,172% всех транзакций,введите здесь описание изображения

Я использовал пакет PRROC, чтобы получить кривую AUC ROC, вот мой случайный код леса:

rf.model <- randomForest(Class ~ ., data = training, ntree = 2000, nodesize = 20)
rf_pred <- predict(rf.model, test,type="prob"

поэтому, как и ожидалось, rf_pred должен возвращать вероятность каждого класса: Затем я использовал следующий код:

fg_rf <- rf_pred[test$Class==1]
bg_rf <- rf_pred[test$Class==0]
roc_rf <- roc.curve(scores.class0 = fg_rf,scores.class1 = bg_rf,curve = T)

Однако КРИВАЯ ROC оказалась не такой, как я ожидал Та же проблема возникла с кривой PR. Это из-за высокого дисбаланса в классе? И если предположить, что rf_pred возвращает вероятность 0/1, как я могу сделать так, чтобы fg_rf равнялась вероятности calss = 1, мой код: fg_rf <- rf_pred[test$Class==1] правильный?

  • Мы могли бы проверить это, если бы вы сделали воспроизводимый пример :-) Что такое данные? stackoverflow.com/ вопросы/5963269/ RobertMyles 20.02.2018
  • Привет, мои данные имеют высокий дисбаланс в классе, 0:199021; 1:345. Должен ли я сбалансировать класс в данных обучения, прежде чем использовать эти данные обучения для правильного обучения модели? kyle chan 21.02.2018

rmachine-learningrandom-forestrocauc

Ответы

Ответ 1 · рейтинг 1 · desertnaut

Глядя на ваши результаты head(rf_pred), становится очевидным, что ваша функция predict возвращает (жесткие) классы (т.е. 0/1), а не оценки вероятности, вероятно, из-за вашей опечатки type="pro" (должно быть type="prob").

Аргументы scores.class0 и scores.class1 метода roc.curve должны быть оценками вероятности, а не предсказаниями жесткого класса.

Исправьте опечатку в predict, и все будет в порядке, но, скорее всего, вам нужно также поменять местами оценки - теперь вы присваиваете баллы класса 1 scores.class0:

rf_pred <- predict(rf.model, test,type="prob")
fg_rf <- rf_pred[test$Class==1]
bg_rf <- rf_pred[test$Class==0]
roc_rf <- roc.curve(scores.class0 = bg_rf, scores.class1 = fg_rf, curve = T)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы