我使用caret
来训练下面的rpart
模型。
trainIndex <- createDataPartition(d$Happiness, p=.8, list=FALSE)
dtrain <- d[trainIndex, ]
dtest <- d[-trainIndex, ]
fitControl <- trainControl(## 10-fold CV
method = "repeatedcv", number=10, repeats=10)
fitRpart <- train(Happiness ~ ., data=dtrain, method="rpart",
trControl = fitControl)
testRpart <- predict(fitRpart, newdata=dtest)
dtest
包含1296个观察值,因此我希望testRpart
生成一个长度为1296的向量。相反,它长1077,即219短。
当我对dtest
的前220行进行预测时,我的预测结果为1,所以它一直是219短。
对于为什么会这样做的任何解释,以及我可以做些什么来获得输入的一致输出?
修改: d
可以从here加载以重现上述内容。
答案 0 :(得分:11)
我下载了您的数据并找到了解释差异的原因。
如果只是从数据集中删除缺失值,则输出的长度匹配:
testRpart <- predict(fitRpart, newdata = na.omit(dtest))
注意nrow(na.omit(dtest))
是1103,length(testRpart)
是1103.所以你需要一个策略来解决缺失的值。请参阅?predict.rpart
以及na.action参数的选项以选择所需内容。
答案 1 :(得分:1)
类似于Josh所说的,如果您需要使用插入符号中的predict.train
生成预测,只需传递na.action
的{{1}}:
na.pass
注意:将其移至一个单独的答案,这是基于Ricky对上述Josh答案的评论,以提高知名度。
答案 2 :(得分:0)
我在预测函数中使用“ newx”而不是“ newdata”遇到了类似的问题。使用“ newdata”(或什么都不做)可以解决我的问题,希望它将对使用newx并遇到相同问题的其他人有所帮助。