我尝试使用随机森林模型根据身高,体重和兄弟姐妹的数量来预测性别。我从一个包含大量变量的大得多的数据集中获取了数据,但我已经将其清理成了#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()
答案 0 :(得分:0)
问题可能是您的测试数据中存在某种变量级别,而这些级别未反映在您的训练数据中。因此,当它分配结果时,它没有依据这样做。
没有样本数据是不可能肯定的,但这是最可能的情况。尝试设置种子set.seed=3
,然后更改种子编号set.seed=28
,依此类推几次,看看是否最终找到了一个没有收到错误的组合。
将冲突的数据框与未冲突的数据框进行比较,以查看缺少的内容。
编辑:
此外,尝试运行str(train)
和str(test)
以确保字段保持不变。如果您愿意,可以通过编辑帖子分享。
如果任何列是缺少级别的因素(意味着它有10个级别,但在测试中只有8个表示为9或10),则可能是一个问题。如果你试图为所有可能的结果创建一个预测因子,那么它们应该是平衡的。
如果没有其他工作,您可以设置一个种子并一次删除一个预测变量,直到它正确运行,然后查看该删除列中的训练集和测试集是如何不同的。