首页 文章

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

提问于
浏览
0

我正在尝试使用随机森林模型来根据身高,体重和兄弟姐妹的数量来预测性别 . 我从一个包含大量变量的更大的数据集中获取了数据,但我已将其清理为这个“干净”的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

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

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

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

    EDIT:

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

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

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

相关问题