【问题标题】:subscript out of bounds Error, Random Forest Model下标越界错误,随机森林模型
【发布时间】:2017-10-20 01:27:36
【问题描述】:

我正在尝试使用随机森林模型根据身高、体重和兄弟姐妹数量来预测性别。我从一个包含数十个变量的更大数据集中获取数据,但我已经将其清理到这个“干净”的 data.frame 中,省略了 NA 值,只有我关心的 4 个变量,最后一列是 Gender .

我尝试过修改代码并到处搜索,但找不到具体的修复方法。

代码如下:

ind <- sample(nrow(clean),0.8*nrow(clean))
train <- clean[ind,]
test <- clean[-ind,]


rf <- randomForest(Gender ~ ., data = train[,1:4], ntree = 20)

pred <- predict(rf, newdata = test[,-c(length(test))])
cm <- table(test$Gender, pred)
cm

这是输出:

Error in `[.default`(table(observed = y, predicted = out.class), levels(y), : subscript out of bounds
Traceback:

1. randomForest(Gender ~ ., data = train[, 1:4], ntree = 20)
2. randomForest.formula(Gender ~ ., data = train[, 1:4], ntree = 20)
3. randomForest.default(m, y, ...)
4. table(observed = y, predicted = out.class)[levels(y), levels(y)]
5. `[.table`(table(observed = y, predicted = out.class), levels(y), 
 .     levels(y))
6. NextMethod()

【问题讨论】:

  • 你能告诉我们clean里有什么吗?
  • clean 有 4 列,每列大约 1000 行:身高(以厘米为单位)、体重(以千克为单位)、兄弟姐妹的数量(整数)和性别(“男性”或“女性”)。

标签: r random-forest


【解决方案1】:

问题可能在于您的测试数据中存在某种未反映在训练数据中的可变级别。所以当它去分配结果时,它没有这样做的依据。

没有样本数据就无法确定,但这是最有可能的情况。尝试设置种子set.seed=3,然后更改种子编号set.seed=28,依此类推,看看你是否最终找到了一个不会出现错误的组合。

将有冲突的数据框与未冲突的数据框进行比较,看看缺少什么。

编辑:

另外,请尝试运行 str(train) 和 str(test) 以确保字段保持不变。如果您愿意,可以通过编辑帖子来分享。

如果任何一列是缺少水平的因子(意味着它有 10 个水平,但在测试中只有 8 个水平代表 9 个或 10 个水平),这可能是一个问题。如果您尝试为所有可能的结果创建预测器,则它们应该是平衡的。

如果没有其他方法,您可以设置一个种子并一次删除一个预测变量,直到它正确运行,然后查看已删除列中的训练集和测试集有何不同。

【讨论】:

  • 如何查看冲突的数据框?您是指 train 和 clean 之间的差异,以检查是否缺少某些值?我尝试了几种不同的种子值,但到目前为止都没有成功。你认为这与有几种不同的身高和体重有关,有些可能不会出现在训练集和测试集中吗?
  • 为每个种子测试和训练集设置一个后缀,train_22,test_22,告诉你种子。这样,您就可以将集合保存在内存中。然后,如果您使用的是 R studio,在右侧的环境面板上,单击数据框的名称,它将在您的脚本所在的选项卡式窗口中打开。如果您愿意,您可以 write.csv(test_22, "failed.csv") 和 write.csv(test_3, "passed.csv") 然后您可以在 Excel 中打开它们并查看列以查看您是否在训练中丢失了结果,这样您就无法在测试中预测它。
猜你喜欢
  • 1970-01-01
  • 2017-12-20
  • 2016-01-24
  • 2013-09-05
  • 2019-07-10
  • 2017-08-11
  • 2016-10-26
  • 2013-12-03
  • 2016-04-09
相关资源
最近更新 更多