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

R语言ranger包构建随机森林预测MNIST如何输出0-9整数结果

问题描述

在R语言中使用ranger包构建随机森林模型,基于MNIST像素数据训练模型预测0-9手写数字类别时,运行以下代码后得到的预测结果存在大量连续型小数,不符合分类任务输出整数类别的预期:

set.seed(1031)
forestranger <- ranger(Y ~ ., data = mnisttrain, num.trees = 1000)
predictions <- predict(forestranger, data = mnisttest, num.trees = 1000)
问题原因

ranger默认会根据响应变量的数据类型自动判定建模任务类型:如果训练集中的标签列Y是数值型(numeric),ranger会默认执行回归任务,输出连续型预测值;只有当Y为因子型(factor),或显式指定分类任务参数时,才会执行分类任务输出离散类别。

解决方法

选择以下任意一种方式调整,即可得到0-9区间的整数预测结果:

  • 方法1:训练前将标签列转换为因子类型,让ranger自动识别为分类任务
    set.seed(1031)
    # 将训练集标签转为因子型
    mnisttrain$Y <- as.factor(mnisttrain$Y)
    forestranger <- ranger(Y ~ ., data = mnisttrain, num.trees = 1000)
    predictions <- predict(forestranger, data = mnisttest, num.trees = 1000)
    # 提取预测类别,如需整数格式可做类型转换
    pred_result <- as.numeric(as.character(predictions$predictions))
    
  • 方法2:调用ranger时显式声明分类任务,无需提前转换标签类型
    set.seed(1031)
    # 添加classification = TRUE参数,强制执行分类任务
    forestranger <- ranger(Y ~ ., data = mnisttrain, num.trees = 1000, classification = TRUE)
    predictions <- predict(forestranger, data = mnisttest, num.trees = 1000)
    pred_result <- as.numeric(as.character(predictions$predictions))
    
注意事项
  • 不要直接对回归输出的连续值做四舍五入取整当分类结果用,这种操作本质是错用回归模型解决分类问题,会大幅降低预测准确率,不符合随机森林分类的建模逻辑。
  • 如果需要输出每个类别的预测概率而非硬分类结果,可以在训练ranger模型时设置probability = TRUE,此时预测结果会返回每个样本对应0-9共10个类别的概率值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:24:19