You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中predict()函数预测时data和newdata参数的差异是什么

predict()传入data和newdata的差异说明

底层运行逻辑差异

你遇到的差异本质是rpart包的预测方法参数匹配规则导致的:

  • predict.rpart()(rpart提供的predict泛型实现)的参数列表里不存在data这个入参,你传入的data=Boston_test会被判定为无效的多余参数,直接被函数忽略。此时函数没有收到指定的新数据集,就会走默认逻辑:返回模型训练集(也就是你拟合树时用的Boston_train)的预测结果。
  • 传入newdata=Boston_test时,是匹配到了predict.rpart()的正式参数,函数会基于训练好的决策树,对传入的Boston_test样本逐一计算预测值,返回的才是测试集对应的预测结果。

为什么没有报错且RMSE结果异常

你示例中刚好把数据集拆成了等长的训练集和测试集(Boston共506条数据,各取253条),所以训练集预测结果的长度和测试集标签长度完全一致,R计算RMSE时不会触发长度不匹配的警告,只会默默计算,最终得到错误的RMSE结果。
如果你的训练集和测试集长度不一样,传入data=的写法就会立刻出现向量长度不匹配的警告,更容易定位问题。

验证方法

你可以运行以下代码确认逻辑:

# 验证data参数被忽略,返回的就是训练集预测结果
identical(tree.pred, predict(Boston_tree))
# 查看两个预测结果的对应数据集来源
length(tree.pred) == nrow(Boston_train)
length(tree.pred2) == nrow(Boston_test)

运行后可以看到第一个判断返回TRUE,直接证明data参数没有生效。

内容的提问来源于stack exchange,提问作者Ghassany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:45:03