AU C за Random Forest - разные методы, разные ответы? - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь найти единственный способ дать мне C AU для модели случайного леса как для обучающего, так и для тестового наборов без использования MLeval.

Вот хороший пример для RO C на данных обучения и вот хороший пример для RO C на данных тестирования . Первый пример для AU C для обучающих данных дает AUC = 0,944.

plot.roc(rfFit$pred$obs[selectedIndices],
         rfFit$pred$M[selectedIndices], print.auc=TRUE)
Поскольку я не знаю, как адаптировать первый пример для данных тестирования, я применил данные сонара ко второму примеру и перепроверил ответ с первым примером

ctrl <- trainControl(method="cv", 
                     summaryFunction=twoClassSummary, 
                     classProbs=T,
                     savePredictions = T)
rfFit <- train(Class ~ ., data=Sonar, 
               method="rf", preProc=c("center", "scale"), 
               trControl=ctrl, metric="ROC")
print(rfFit)
...
  mtry  ROC        Sens       Spec     
   2    0.9459428  0.9280303  0.8044444

result.predicted.prob <- predict(rfFit, Sonar, type="prob") # Prediction

result.roc <- roc(Sonar$Class, result.predicted.prob$M)
plot(result.roc, print.thres="best", print.thres.best.method="closest.topleft", print.auc=TRUE)

 

Но этот AU C для всех обучающих данных (т.е. сонара) равен 1.0, тогда как rfFit показывает 0.946, что тоже отличается! Итак, почему я получаю разные результаты и как правильно рассчитать AU C как для обучения, так и для тестирования?

1 Ответ

2 голосов
/ 07 мая 2020

Это C ЕД из разных моделей.

Первая C ЕД, которую вы видите, это среднее C ЕД от вашего обучения посредством перекрестной проверки. Вы можете увидеть это под:

head(rfFit$resample)
        ROC      Sens      Spec Resample
1 1.0000000 0.9090909 1.0000000   Fold02
2 0.9949495 1.0000000 0.7777778   Fold01
3 0.8045455 0.8181818 0.5000000   Fold03
4 1.0000000 1.0000000 0.8000000   Fold06
5 0.9595960 0.9090909 0.6666667   Fold05
6 0.9909091 0.9090909 0.9000000   Fold04

mean(rfFit$resample$ROC)
[1] 0.9540909

В этом случае это 10-кратная перекрестная проверка, вы обучаете 90% данных и тестируете 10%, следовательно, это немного другая модель с каждым сгибом, и следовательно, разные AU C.

Если вы возьмете прогноз обученной окончательной модели, вы получите AU C, равное 1, и это не будет включено в вывод каретки.

Итак, это зависит от того, что должен отражать ваш AU C. Если это среднее значение AU C во время тренировки CV, используйте значение RO C из каретки. Если вам просто нужно одно значение, чтобы отразить точность окончательной модели, тогда подойдет и второй метод.

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