如何让随机森林输出连续型的预测值?
解决方案:将随机森林从分类改为回归以输出连续预测值
核心问题分析
你当前的模型属于分类任务,因为把Linear_weight转成了因子(as.factor()),所以只能输出离散的类别值。要输出连续预测值,需要切换为回归型随机森林,同时修正数据类型(你的示例数据里所有变量都是字符型,无法开展数值计算)。
具体步骤与修正代码
1. 修正数据类型
先把所有数值型变量从字符格式转换为数值格式,这是回归模型运行的基础:
library(randomForest) # 创建数据集时直接转换为数值,或后续批量处理 Pitches <- data.frame( Linear_weight = as.numeric(c("1.39", "1.01", "-0.04", "-0.21", "-0.11", "-0.33")), Vel = as.numeric(c("93.5", "95.0", "97.1", "90.0", "80.1", "100.3")), HorzBrk = as.numeric(c("5.0", "8.1", "10.0", "9.1", "3.0", "6.0")) )
2. 划分训练/测试集(保留你的逻辑,大数据集可换更稳定的划分方式)
set.seed(1234) sample <- sample(1:nrow(Pitches), 0.5*nrow(Pitches)) training <- Pitches[sample,] testing <- Pitches[-sample,]
3. 训练回归型随机森林
无需将响应变量转成因子,randomForest会自动识别数值型响应变量,默认执行回归任务:
# 回归模型:响应变量Linear_weight为数值型 RFM_reg <- randomForest(Linear_weight ~ Vel + HorzBrk, data = training)
4. 生成连续型预测值
预测时默认输出连续数值,直接赋值即可:
# 训练集预测 training$Weight_pred <- predict(RFM_reg, training) # 测试集预测 testing$Weight_pred <- predict(RFM_reg, testing)
针对大数据集的优化提示
- 调参提升精度:可以调整
ntree(树的数量,默认500)、mtry(每棵树随机选取的特征数,回归任务默认是总特征数的1/3)等参数,示例:RFM_reg_tuned <- randomForest(Linear_weight ~ Vel + HorzBrk, data = training, ntree = 1000, mtry = 2, importance = TRUE) - 查看特征重要性:添加
importance = TRUE参数后,用importance(RFM_reg_tuned)查看特征对预测的贡献度,辅助特征筛选。 - 稳定划分数据集:大数据集可使用
caret包的createDataPartition替代sample,避免随机划分的偏差:library(caret) set.seed(1234) train_idx <- createDataPartition(Pitches$Linear_weight, p = 0.5, list = FALSE) training <- Pitches[train_idx,] testing <- Pitches[-train_idx,]
内容的提问来源于stack exchange,提问作者user19422662
相关产品推荐
相关产品推荐

