R карета и НС


26

Я очень предпочитаю каретку из-за ее способности к настройке параметров и унифицированного интерфейса, но я заметил, что для этого всегда требуются полные наборы данных (то есть без NA), даже если применяемая «голая» модель допускает NA. Это очень утомительно, так как нужно применять трудоемкие методы вменения, которые не нужны в первую очередь. Как можно избежать вменения и при этом использовать преимущества кареты?


3
Вы всегда должны что- то делать с пропущенными значениями. Должен сказать, что я не совсем понимаю ваш вопрос - вы ищете какой-то универсальный подход? Если вы не хотите вменять АН, что вы хотите с ними делать? Удалять?
Тим

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

3
Но то, что делает «модель», это либо игнорирует (удаляет) эти данные, оставляя вас с меньшей выборкой; оценивает (придает) эти значения; или он предсказывает категорию «NA» (например, в некоторых моделях на основе дерева). Что еще вы хотели бы, чтобы ваша «модель» сделала? Некоторое программное обеспечение выполняет эти функции автоматически, но представьте, что ваша кофемашина дала вам кофе «по умолчанию» ... Некоторое программное обеспечение делает «кофе по умолчанию» из NA, но это не лучшее, что вы можете получить.
Тим

3
Вы уверены, что карета не позволяет НС? Я попытался представить NA с примером по умолчанию на странице справки train и с методом C5.0 train работало просто отлично. Это не удалось со случайным лесом.
mpiktas

Ответы:


32

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

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

В этом случае C5.0 будет обрабатывать пропущенные значения самостоятельно.


1
Это интересная дискуссия. Что может быть ловушкой добавления NA как еще одного уровня к категориальному предиктору? Если НС не могут быть смоделированы или вменены, то есть наличие отсутствия действительно информативно, может показаться, что просто сделать НС дополнительным уровнем имеет смысл?
Seanosapien

Если использовать спецификацию x, y при trainналичии установленного na.action = na.passпараметра, появится следующая ошибка:Something is wrong; all the RMSE metric values are missing
user29609

3

Вы пробовали перекодировать АН? Нечто> 3 стандартных отклонения вне ваших данных (например, -12345) должно побудить C5.0 прогнозировать их отдельно, как это происходит с NA.


2

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

Смотрите ?predict.trainдля более подробной информации.

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

    ## 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.