全部,
考虑以下示例:
Y <- iris[, 1]
X <- iris[, 2:5]
X[seq(10, 150, 10), 4] <- NA
X[, 4] <- addNA(X[, 4])
fit <- randomForest(X, Y)
predict(fit) #..Works fine
predict(fit, newdata = X) #..Throws an error
Error in predict.randomForest(fit, newdata = X) :
Type of predictors in new data do not match that of the training data.
即使将NA明确定义为因子级别,它仍然不能与predict.randomForest一起使用。除了手动重新编码NA之外,我还有其他选择,因为addNA
似乎没有像我预期的那样工作吗?
干杯,
亚伦
答案 0 :(得分:1)
嗯,通常,如果您希望获得用于生成模型的数据的预测,则只需调用不带newdata=
参数的预测。在这种情况下,这有用吗?
但我认为这不是你真正想做的事情,事实上你确实想要预测新数据。它真的无助于给出一个有效的例子,我们需要一个可重复的例子来说明什么是行不通的。但是在看了这个问题(https://stats.stackexchange.com/questions/62015/prediction-with-randomforest-r-and-missing-values)后,似乎可能会像你预测的那样对NA值做。
答案 1 :(得分:0)
我无法找到一种方法来使用包含addNA
添加的NA因子水平的新数据。如果您想将缺失视为新预测数据的因子级别,那么对我有用的是在将字符向量定义为因子之前手动将NA
重新编码为"na"
。在模型训练和测试阶段执行此步骤可以让我得到我正在寻找的结果。
Y <- iris[, 1]
X <- iris[, 2:5]
X[seq(10, 150, 10), 4] <- NA
X[, 4] <- as.character(X[, 4])
X[is.na(X[, 4]), 4] <- 'na'
X[, 4] <- factor(X[, 4])
fit <- randomForest(X, Y)
predict(fit, newdata = X)