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.pass
的 na.action
:
testRpart <- predict(fitRpart, newdata = dtest, na.action = na.pass)
注意: 根据 Ricky 对上述 Josh 回答的评论将其移至单独的回答以提高可见性。
我使用 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.pass
的 na.action
:
testRpart <- predict(fitRpart, newdata = dtest, na.action = na.pass)
注意: 根据 Ricky 对上述 Josh 回答的评论将其移至单独的回答以提高可见性。