【发布时间】:2017-07-14 10:42:38
【问题描述】:
好的,关于泰坦尼克号比赛的另一个新手问题:
我正在尝试对我的测试数据进行随机森林预测。我所有的工作都是在组合测试和训练数据上完成的。
我现在已将 2 拆分为 testdata 和 trainingdata
我有以下代码:
trainingdata <- droplevels(data.combined[1:891,])
testdata <- droplevels(data.combined[892:1309,])
fitRF <- randomForest(as.factor(Survived) ~ Pclass + Sex + Age + SibSp
+ Parch + Fare + Embarked
+ new.title + family.size + FamilyID2,
data=trainingdata,
importance =T,
ntree=2000)
varImpPlot(fitRF)
#All works up to this point
Prediction <- predict(fitRF, testdata)
#This line above generates error
submit <- data.frame(PassengerID = data.combined$PassengerId, Survived
= Prediction)
write.csv(submit, file="14072017_1_RF", row.names = F)
当我运行预测行时,我收到以下错误:
> Prediction <- predict(fitRF, testdata)
Error in predict.randomForest(fitRF, testdata) :
New factor levels not present in the training data
当我跑步时 str(testdata) 和 str(trainingdata) 我可以看到 2 个不再匹配的因素
Trainingdata
$ Parch : Factor w/ 7 levels
Testdata
$ Parch : Factor w/ 8
Trainingdata
$ FamilyID2 : Factor w/ 22
Testdata
$ FamilyID2 : Factor w/ 18
是这些差异导致我的错误发生吗?如果是这样,我该如何解决这个问题?
非常感谢
其他信息: 我已经从 RandomForest 创建行中删除了 Parch 和 FamilyID2,代码现在可以工作了,所以肯定是这 2 个变量导致了级别不匹配的问题。
【问题讨论】:
-
我确实看过那个帖子,并尝试实施解决方案,但错误是一样的。
-
在
predict()函数之前运行testdata <- factor(testdata, levels=levels(trainingdata))应该没有任何问题。 -
我运行了该命令,但它破坏了 testdata 数据集,我现在有 1 列由之前行中的所有标题组成
标签: r random-forest predict levels