r caret predict returns 输出比输入少

r caret predict returns fewer output than input

我使用 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 加载以重现上述内容。

我下载了您的数据并找到了导致差异的原因。

如果您只是从数据集中删除缺失值,则输出的长度匹配:

testRpart <- predict(fitRpart, newdata = na.omit(dtest))

注意nrow(na.omit(dtest))是1103,length(testRpart)是1103。所以你需要一个解决缺失值的策略。请参阅 ?predict.rpart 和 na.action 参数的选项以选择您想要的内容。

我在预测函数中使用 "newx" 而不是 "newdata" 时遇到了类似的问题。使用 "newdata"(或什么都不用)解决我的问题,希望它能帮助其他使用 newx 并遇到同样问题的人。

与 Josh 提到的类似,如果您需要使用来自插入符号的 predict.train 生成预测,只需传递 na.passna.action:

testRpart <- predict(fitRpart, newdata = dtest, na.action = na.pass)

注意: 根据 Ricky 对上述 Josh 回答的评论将其移至单独的回答以提高可见性。