R 中的 randomForest() 机器学习

标签 r machine-learning random-forest

我正在探索 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)

有人可以帮我调试更简单的命令,这样我就不必一一列出每个预测变量了吗?

最佳答案

错误消息为您提供了两个问题的线索:

  1. 首先,您需要删除任意位置具有 NA 的任何行。删除 NA 应该很容易,我将把它留给您作为练习。
  2. 看起来您需要进行分类(预测只有几个离散级别之一的响应),而不是回归(预测连续响应)。如果响应是连续的,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/

相关文章:

r - 在使用公式用插入符号的 train() 训练的 randomForest 对象上使用 predict() 时出错

r - 当我的随机森林混淆矩阵显示该模型不擅长预测疾病时,为什么我的 ROC 图和 AUC 值看起来不错?

r - 将值分配给从 R 中的函数返回的 data.frame 列的切片

r - 使用 R 按组对数据进行标准化/白化/重新缩放

python - sklearn 管道在应用于测试集时不记得其状态

machine-learning - xgboost 的多输出回归

python - 随机森林准确率太低

r - 在函数内将参数传递给 R 中的 lm

r - 如何生成L长度的二进制码置换矩阵

python - 用于逻辑回归的 Shapley?