Як інтерпретувати OOB та матрицю плутанини для випадкових лісів?


35

Я отримав сценарій R від когось, щоб запустити випадкову лісову модель. Я змінив і запустив його з деякими даними про співробітників. Ми намагаємось передбачити добровільні розлуки.

Ось додаткова інформація: це класифікаційна модель: 0 = перебування працівника, 1 = працівник припинено, зараз ми дивимося лише на десяток змінних прогнозів, дані "незбалансовані", оскільки записи терміна становлять близько 7 % від загальної кількості встановлених рекордів.

Я запускаю модель з різними виборами mtry та ntree, але зупинився на нижньому. OOB становить 6,8%, що, на мою думку, добре, але матриця плутанини, здається, розповідає іншу історію для прогнозування термінів, оскільки рівень помилок досить високий - 92,79%. Я прав, якщо припустити, що я не можу розраховувати і використовувати цю модель, оскільки високий показник помилок для прогнозування термінів? або є щось, що я також можу зробити, щоб використовувати RF та отримати менший показник помилок для прогнозування термінів?

 FOREST_model <- randomForest(theFormula, data=trainset, mtry=3, ntree=500, importance=TRUE, do.trace=100)
ntree      OOB      1      2
  100:   6.97%  0.47% 92.79%
  200:   6.87%  0.36% 92.79%
  300:   6.82%  0.33% 92.55%
  400:   6.80%  0.29% 92.79%
  500:   6.80%  0.29% 92.79%
> print(FOREST_model)

Call:
 randomForest(formula = theFormula, data = trainset, mtry = 3,      ntree = 500, importance = TRUE, do.trace = 100) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 3

        OOB estimate of  error rate: 6.8%
Confusion matrix:
     0  1 class.error
0 5476 16 0.002913328
1  386 30 0.927884615
> nrow(trainset)
[1] 5908

Відповіді:


20

Матриця плутанини обчислюється в певній точці, що визначається відсіченням голосів. Залежно від ваших потреб, тобто для кращої точності (зменшення помилкових позитивних результатів) або кращої чутливості (зменшення помилкових негативів) ви можете віддати перевагу різному відсіч.

Для цього я рекомендую побудувати (i) криву ROC , (ii) точність відкликання та (iii) криву калібрування, щоб вибрати обріз, який найкраще відповідає вашим цілям. Все це можна легко побудувати за допомогою двох наступних функцій з бібліотеки ROCR R (доступних також у CRAN ):

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

Наприклад:

rf <- randomForest (x,y,...);
OOB.votes <- predict (rf,x,type="prob");
OOB.pred <- OOB.votes[,2];

pred.obj <- prediction (OOB.pred,y);

RP.perf <- performance(pred.obj, "rec","prec");
plot (RP.perf);

ROC.perf <- performance(pred.obj, "fpr","tpr");
plot (ROC.perf);

plot  (RP.perf@alpha.values[[1]],RP.perf@x.values[[1]]);
lines (RP.perf@alpha.values[[1]],RP.perf@y.values[[1]]);
lines (ROC.perf@alpha.values[[1]],ROC.perf@x.values[[1]]);

Мене зацікавила ваша відповідь, я склав план із кодом, яким ви поділилися. підкажіть, будь ласка, трохи ресурсів, щоб знайти трохи деталей про запропонований вами сюжет. або напишу кілька речень про те, як його інтерпретувати. заздалегідь дякую.
MKS

Я пропоную почати із запису для кривої ROC, що посилається на вище та інші записи, згадані там.
Ітамар

Відповідь не стосується безпосередньо обмеження дерева рішень у сильно перекошеному наборі даних.
SmallChess

19

Ваш набір різко незбалансований - RF зазвичай не відповідає цьому сценарію (тобто добре прогнозує лише більш високий клас).

Спробуйте врівноважити свій набір або шляхом вибірки класу "0", щоб мати приблизно такий же розмір, як клас "1", або граючи з classwtпараметром.


1
Незважаючи на те, що є classwtпараметр, я не думаю, що він ще реалізований у randomForest()функції randomForestпакету в R. Per Link . Ви використовували його раніше? Я спробував це з різними значеннями, але отримав однакові результати за замовчуванням classwt=NULL.
Жубарб

9

Виходячи з вашої матриці плутанини, ви отримали 5 908 точок даних, і переважна більшість з них мають тип 0 ("працівник залишився"). Таким чином, класифікатор може піти від того, щоб бути "ледачим" та вибирати мажоритарний клас, якщо абсолютно не впевнений, що приклад належить до іншого класу. Зауважте, що загальний показник помилок становить ~ 7%, що досить близько до відсотка прикладів Class1!

У вас є кілька варіантів:

  • Відмовтеся від прикладів Class0, поки у вас не будуть приблизно збалансовані класи. Я не знаю, чи є література про те, як вибрати оптимально репрезентативну підмножину (можливо, хтось інший може зважити?), Але ви можете почати, відкидаючи приклади навмання. Ви можете передати subsetаргумент до randomForest, який повинен зробити це банальним для тестування.

  • Відрегулюйте свою функцію втрат / вагу класу, щоб компенсувати непропорційне число Class0. По суті, ви хочете зробити його набагато дорожчим класифікатору неправильно класифікувати приклад Class1, ніж Class0 один. Можливо, має сенс спробувати Class0 = 1 / 0,07 ~ = 14x Class1 для початку, але ви, можливо, захочете скорегувати це виходячи з вимог вашого бізнесу (наскільки гірше один вид помилок). Я думаю, що classwtпараметр - це те, що ви шукаєте тут.

  • Використовуйте стратифіковану вибірку, щоб переконатися, що ви отримали приклади обох класів у навчальних даних про дерева. Цілком можливо, що деякі ваші дерева були навчені лише за даними Class0, що, очевидно, буде нічого поганим для їх узагальнення. Перевірте strataаргумент.


Випадковий вибір з домінуючого класу звучить розумно. Їм не потрібно бути рівними: навіть співвідношення 1: 5 повинно бути покращенням.
Ітамар

@ Itmar, це точно те, що я спробував би спочатку. Однак, схоже, має бути певний спосіб переконатися, що приклади, які ви зберігаєте, є репрезентативними для більшого набору даних.
Метт Крауз

1
Одним із варіантів може бути запуск PCA (принцип компонентного аналізу) на більшій множині, кластеризація точок відповідно до першого компонентного принципу та вибір одного зразка з кожного кластеру.
Ітамар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.