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

如何解决rpart对象预测时的Invalid prediction错误?

解决rpart分类树预测报错的问题

咱们来拆解下你的问题,一步步搞定它:

1. 核心问题:训练的是回归树而非分类树

你只把test$rating转成了因子,但训练集train$rating还是数值型——这会让rpart默认构建回归树(用于预测连续值),而非分类树。当你用type="class"要求分类预测时,回归树不支持这个参数,直接触发报错。

解决:先把训练集的目标变量转成因子:

train$rating <- as.factor(train$rating)

2. Predict函数参数名错误

你的预测代码里用了data=mode,但predict.rpart的正确参数名是newdata,不是data!这个参数名错误也是导致报错的直接原因之一。

3. 确保预测数据集的变量名与训练集完全匹配

你手动创建的mode数据集,变量名必须和train的特征变量完全一致(包括大小写、特殊字符、点的数量,甚至拼写细节)。比如你写的re.balanced..paid.back..a.recently.overdrawn.current.acount,可能训练集里的变量名是re.balanced.paid.back.a.recently.overdrawn.current.account(注意最后是account而非acount,或者点的数量不同)。

可以用以下代码快速检查变量名差异:

# 提取训练集的特征变量名(排除目标列rating)
train_features <- setdiff(colnames(train), "rating")
# 对比找出训练集有但mode没有的变量
setdiff(train_features, colnames(mode))
# 对比找出mode有但训练集没有的变量
setdiff(colnames(mode), train_features)

根据输出修正mode的变量名,确保完全匹配训练集的特征列。

最终修正后的完整代码

# 1. 统一处理训练集和测试集的目标变量类型
train$rating <- as.factor(train$rating)
test$rating <- as.factor(test$rating)

# 2. 重新训练分类树
fitTree <- rpart(rating ~ ., data = train)

# 3. 确认mode变量名匹配后,执行分类预测
predict(fitTree, newdata = mode, type = "class")

这样就能得到你预期的分类预测结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:28:56