我正在探索 R 中的函数 randomforest()
,我发现几篇文章都建议使用如下类似的逻辑,其中响应变量是第 30 列,自变量包括除第 30 栏:
dat.rf <- randomForest(dat[,-30],
dat[,30],
proximity=TRUE,
mtry=3,
importance=TRUE,
do.trace=100,
na.action = na.omit)
当我尝试此操作时,我收到以下错误消息:
randomForest.default(dat[, -30], dat[, 30], approximation = TRUE, 中的错误: 预测变量中不允许使用 NA 另外:警告消息: 在 randomForest.default(dat[, -30], dat[, 30], approximation = TRUE, 中: 响应具有五个或更少的唯一值。您确定要进行回归吗?
但是,当我一一列出自变量,同时保持所有其他参数相同时,我能够让它工作。
dat.rf <- randomForest(as.factor(Y) ~X1+ X2+ X3+ X4+ X5+ X6+ X7+ X8+ X9+ X10+......,
data=dat
proximity=TRUE,
mtry=3,
importance=TRUE,
do.trace=100,
na.action = na.omit)
有人可以帮我调试更简单的命令,这样我就不必一一列出每个预测变量了吗?
最佳答案
错误消息为您提供了两个问题的线索:
- 首先,您需要删除任意位置具有
NA
的任何行。删除 NA 应该很容易,我将把它留给您作为练习。 - 看起来您需要进行分类(预测只有几个离散级别之一的响应),而不是回归(预测连续响应)。如果响应是连续的,
randomForest()
将自动应用回归。
那么,如何强制 randomForest()
使用分类?正如您在第一次尝试中注意到的那样,randomForest
允许您提供数据作为预测变量和响应数据,不仅仅是使用公式风格。要强制 randomForest()
应用分类,请确保您尝试预测的值(响应或 dat[,30]
)是一个因子。请记住显式标识 $x$ 和 $y$ 参数。这很容易做到:
randomForest(x = dat[,-30],
y = factor(dat[,30]),
...)
这样你的输出只能采用 y 中给出的级别之一。
这一切都隐藏在参数 $x$ 和 $y$ 的描述中:请参阅 ?help
。
关于R 中的 randomForest() 机器学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021057/