下标越界错误,随机森林模型

时间:2017-05-19 19:57:49

标签: r random-forest

我尝试使用随机森林模型根据身高,体重和兄弟姐妹的数量来预测性别。我从一个包含大量变量的大得多的数据集中获取了数据,但我已经将其清理成了#34; clean" data.frame,省略了NA值,只有我关心的4个变量,最后一列是性别。

我试图摆弄代码并在任何地方搜索,但我无法找到具体的解决方法。

以下是代码:

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()

1 个答案:

答案 0 :(得分:0)

问题可能是您的测试数据中存在某种变量级别,而这些级别未反映在您的训练数据中。因此,当它分配结果时,它没有依据这样做。

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

将冲突的数据框与未冲突的数据框进行比较,以查看缺少的内容。

编辑:

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

如果任何列是缺少级别的因素(意味着它有10个级别,但在测试中只有8个表示为9或10),则可能是一个问题。如果你试图为所有可能的结果创建一个预测因子,那么它们应该是平衡的。

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