Як використовувати випадкові ліси в R з відсутніми значеннями?


74
library(randomForest)
rf.model <- randomForest(WIN ~ ., data = learn)

Я хотів би підібрати випадкову модель лісу, але я отримую таку помилку:

Error in na.fail.default(list(WIN = c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L,  : 
missing values in object

У мене є вивчення кадру даних з 16 числовими атрибутами, і WIN є фактором з рівнями 0 1.


У поточному стані на це питання буде дуже важко відповісти. Чи можете ви оновити своє запитання деякими зразками даних?
Чейз

1
@ MattO'Brien Також кумедно, що якість питання обговорюється виходячи з кількості переглядів, а не суті самого питання. І відповідь, оскільки @ Joran не мав жодної проблеми з’ясувати, про що просять, і надав те, що, як видається, є гарним рішенням проблеми запитувача.
user7610

Відповіді:


118

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

(Хоча PDF-файл Бреймана, на який посилається в документації, прямо говорить, що відсутні значення просто не обробляються взагалі.)

Єдиний очевидний підказка в офіційній документації, яку я міг бачити, - це значення за замовчуванням для na.actionпараметра na.fail, яке може бути занадто загадковим для нових користувачів.

У будь-якому випадку, якщо у ваших предикторах відсутні значення, у вас є (в основному) два варіанти:

  1. Використовуйте інший інструмент ( rpartчудово обробляє відсутні значення).
  2. Введіть відсутні значення

Не дивно, що randomForestпакет має функцію робити саме це rfImpute,. Документація at ?rfImputeпроходить через базовий приклад її використання.

Якщо лише у невеликій кількості випадків відсутні значення, ви також можете спробувати встановити, na.action = na.omitщоб просто відкинути ці випадки.

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


Ви випадково знаєте, що WIN ~ . означає перший аргумент щодо ОП? Це, звичайно, не найкраще місце для того, щоб задати питання, але цікаво, чи знаєте ви. Дякую.
Амеліо Васкес-Рейна

1
Питання полягає в відсутніх значеннях у змінній відповіді, а не в предикторах.
Brigitte

23

Випадковий ліс Бреймана, на якому базується пакет randomForest , насправді обробляє відсутні значення в предикторах. У пакеті randomForest ви можете встановити

   na.action = na.roughfix

Почнеться з використання медіани / режиму для відсутніх значень, але потім він вирощує ліс і обчислює близькість, потім ітераціює та конструює ліс, використовуючи ці нещодавно заповнені значення тощо. Це не добре пояснено в документації randomForest (p10) . Це лише стверджує

.... НС замінюються медіанами стовпців .... Це використовується як відправна точка для введення відсутніх значень випадковим лісом

На домашній сторінці Бреймана ви знайдете трохи більше інформації

missfill = 1,2 робить швидку заміну відсутніх значень для навчального набору (якщо дорівнює 1) та більш ретельну заміну (якщо дорівнює 2).

mfixrep = k з missfill = 2 робить повільнішу, але, як правило, більш ефективну, заміну з використанням близькості на ітерації k лише на навчальному наборі. (Потрібно nprox> 0).


7
Ця відповідь набагато інформативніша (і ввічливіша), ніж прийнята. -_-
Містер

3

Якщо існує можливість того, що відсутні значення є інформативними, тоді ви можете ввести відсутні значення та додати додаткові двійкові змінні (with new.vars<-is.na(your_dataset)) і перевірити, чи зменшує вона помилку, якщо new.varзанадто великий набір, щоб додати його, your_datasetтоді ви могли б використовувати його самостійно, виберіть значущі змінні за допомогою varImpPlotі додати їх your_dataset, ви можете також спробувати додати одну змінну в your_datasetякій підраховує число NA«зnew.var <- rowSums(new.vars)

Це не є невідповідною відповіддю, якщо відсутні змінні є інформативним обліком, то це може виправити збільшення кількості помилок моделі лише завдяки недосконалій процедурі імпутації.

Відсутні цінності є інформативними, тоді вони виникають через невипадкові причини, що особливо часто зустрічається в умовах соціальних експериментів.

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