randomForest ** иногда ** предикат () с NA для обучающего набора данных - PullRequest
0 голосов
/ 08 ноября 2019

Я получил странное поведение от randomForest: мне иногда предсказывают NA на моем тренировочном наборе данных !! Это абсолютно случайно, потому что два прогона дают разные результаты!

> rf <- randomForest(formula(rfFormula), data = df2, ntree = 20, keep.forest = TRUE) 
> pr <- predict(rf, type = "response")
> any(is.na(pr))
[1] TRUE
> which(is.na(pr))
1283 
1001 
> 
> rf <- randomForest(formula(rfFormula), data = df2, ntree = 20, keep.forest = TRUE) 
> pr <- predict(rf, type = "response")
> any(is.na(pr))
[1] FALSE
> which(is.na(pr))
named integer(0)

В моем наборе данных нет NA:

> any(is.na(df2))
[1] FALSE

Так почему же это так? Это ошибка в randomForest? Или какая-то проблема, связанная с предсказаниями OOB?

1) Обратите внимание, что в формуле я использую 119 переменных.

2) Обратите внимание, что вместо predict(rf, df2, type = "response") я использую predict(rf, type = "response"), это было бы ошибкой . Мне нужно использовать первый способ, чтобы получить прогнозы OOB: -)

1 Ответ

0 голосов
/ 15 ноября 2019

Это было именно по причине, указанной @joran. Низкое количество деревьев (20) позволяло иногда случаться случайно, что одно наблюдение использовалось для построения всех 20 деревьев, и, таким образом, не было деревьев, чтобы получить прогноз OOB (вне пакета) для этого наблюдения.

Установка ntree = 100 исправила это.

PS: Ирония в том, что я на самом деле поставил ntree = 20 в целях отладки, чтобы иметь возможность быстро отлаживать все ошибки в моем скрипте, и он фактически генерируетновый, очень непростой, который обычно не появляется

...