R - случайное предсказание леса терпит неудачу с NA в предикторах

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

ПРИМЕЧАНИЕ. Если объект наследуется от randomForest.formula, то любые данные с NA автоматически исключаются из прогноза. Возвращаемое значение будет содержать NA соответственно в агрегированных и индивидуальных древовидных предсказаниях (если требуется), но не в матрице близости или узлов.

Однако, если я пытаюсь использовать функцию прогнозирования в наборе данных с некоторыми NA в предикторах [NA в 7 наблюдениях из 2688], я сталкиваюсь со следующей ошибкой, и прогноз не выполняется.

Ошибка в predic.randomForest (model, new.ds): отсутствующие значения в newdata

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

Я что-то делаю / читаю не так? Это связано с предложением "inherits from randomForest.formula"?


person user997943    schedule 04.02.2014    source источник


Ответы (1)


Используя несколько примеров из документации:

set.seed(1)
x <- data.frame(x1=gl(32, 5), x2=runif(160), y=rnorm(160))
rf1 <- randomForest(x[-3], x[[3]], ntree=10)
> inherits(rf1,"randomForest.formula")
[1] FALSE

> iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE,
                         proximity=TRUE)
> inherits(iris.rf,"randomForest.formula")
[1] TRUE

Таким образом, вы, вероятно, вызвали randomForest, не используя интерфейс формулы, соответствующий вашей модели.

person joran    schedule 04.02.2014
comment
Спасибо! Есть идеи, почему это так? В документации говорится, что использование формулы в обучении может быть медленнее для больших наборов данных, поэтому я не использую формулы (плюс у меня уже есть обученные модели, я не хочу переучиваться). Любые другие обходные пути? - person user997943; 04.02.2014
comment
@ user997943 Не знаю почему. Это может быть просто недосмотр, а может быть причина. Однако я не могу придумать причину в своей голове. Это было бы довольно простое изменение, поэтому, возможно, стоит попросить специалиста по электронной почте. По крайней мере, они знали бы, почему, если на самом деле есть причина. - person joran; 04.02.2014
comment
@ user997943 Всегда можно просто вызвать na.omit для ваших данных при передаче их predict. - person joran; 04.02.2014
comment
Да, именно этим я и занимаюсь в данный момент, но из-за структуры кода мне приходится выполнять несколько беспорядочных акробатических трюков, чтобы получить верные прогнозы. Напишет разработчику электронное письмо - person user997943; 05.02.2014