R caret та NAs


26

Я дуже люблю піклуватися про його здатність до налаштування параметрів та рівномірний інтерфейс, але я помітив, що він завжди потребує повних наборів даних (тобто без NA), навіть якщо застосована "гола" модель дозволяє НС. Це дуже турбує, що стосовно цього слід застосовувати трудові методи імпутації, які в першу чергу не потрібні. Як можна ухилятися від імпутації та все-таки використовувати переваги карети?


3
Завжди потрібно щось робити із відсутніми значеннями. Треба сказати, що я не дуже розумію ваше запитання - ви шукаєте якийсь підхід одного розміру. Якщо ви не хочете вводити NA, то що ви хочете робити з ними? Видалити?
Тім

1
Я хочу залишити НС там і залишити його для моделі, щоб впоратися з НС. Наприклад, якщо я це роблю з функцією C5.0 в C50, він може сам впоратися з NA, але в цьому випадку я не можу використовувати карету, оскільки функція поїзда карети не дозволяє мати NA в наборах даних, навіть коли я хочу використовувати C5. 0 функція C50, згадана вище.
Фредрік

3
Але те, що робить "модель", це чи ігнорує (видаляє) ці дані, залишаючи менший вибірки; він оцінює (вводить) ці значення; або він передбачає категорію "NA" (наприклад, у деяких моделях на основі дерев). Що ще ви хотіли б зробити вашою «моделлю»? Деяке програмне забезпечення робить це для вас автоматично, але уявіть, що ваша кавоварка видала вам каву "за замовчуванням" ... Деякі програми виводять "каву за замовчуванням" з NA, але це не найкраще, що ви можете отримати.
Тім

3
Ви впевнені, що карета не дозволяє НС? Я намагався представити NA з прикладом за замовчуванням на сторінці довідки поїздів і з методом C5.0 поїзд працював чудово. Не вдалось із випадковим лісом.
mpiktas

Відповіді:


32

До функції поїзда в caret можна передати параметр na.action = na.pass, а також попередню обробку (не вказуйте preProcess, залиште його як значення за замовчуванням NULL). Це передасть значення NA, немодифіковані безпосередньо функції передбачення (це призведе до відмови функції прогнозування, які не підтримують відсутні значення, для тих, кому вам потрібно буде вказати preProcess для імпультування пропущених значень перед викликом функції прогнозування). Наприклад:

train(formula,
      dataset,
      method = "C5.0",
      na.action = na.pass)

У цьому випадку C5.0 буде обробляти пропущені значення самостійно.


1
Це цікава дискусія. Яка була б помилка додавання НС як іншого рівня до категоричного прогноктора? Якщо НС неможливо моделювати чи вмикати, тобто наявність відсутності насправді інформативна, може здатися, що просто переведення NA додаткового рівня має сенс?
Seanosapien

Якщо використовувати х, у специфікації в trainмають na.action = na.passбезліч опцій викличе наступну помилку:Something is wrong; all the RMSE metric values are missing
user29609

3

Ви спробували перекодувати NA? Щось> 3 стандартних відхилення поза вашими даними (наприклад, -12345) повинно спонукати C5.0 прогнозувати їх окремо, як це робиться з NA.


2

Я думаю, що вашим рішенням було б перерахувати значення при використанні функції predict () .

Докладніше ?predict.trainдив.

Ви можете використовувати, na.omitщоб дозволити caret вводити значення. Наприклад:

    ## S3 method for class 'train':
    predict((object, newdata = NULL, type = "raw", na.action = na.omit, ...)

з http://www.inside-r.org/packages/cran/caret/docs/predict.train

Іншим рішенням буде імпультування під час попередньої обробки даних:

    ## S3 method for class 'default':
    preProcess(x, 
       method = "knnImpute",   # or *bagImpute* / *medianImpute*
       pcaComp = 10,
       na.remove = TRUE,
       k = 5,
       knnSummary = mean,
       outcome = NULL,
       fudge = .2,
       numUnique = 3,
       verbose = TRUE,
       )

від http://www.inside-r.org/node/86978

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