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

R语言randomForest提取单棵树预测结果计算置信度方法

提取随机森林单树投票结果与分类占比的实现方法

randomForest包原生支持你需要的投票占比、单树预测结果提取,不需要额外安装第三方包,直接调整predict()参数即可实现。

快速获取分类投票占比(匹配你需要的输出格式)

你之前调用predict()时设置type = "response"仅返回最终集成的分类结果,只要将参数改为type = "prob",就能直接得到每个测试样本在三个类别上的投票占比(即投给该类的决策树数量/总决策树数量,范围0-1,三个类别占比和为1),再拼接最终预测列即可得到你要的predictions_info表,代码如下:

library(randomForest)

# 提取三个类别的投票占比
pred_prob <- predict(iris_class, test_data[, -5], type = "prob")
# 提取最终集成预测结果
pred_label <- predict(iris_class, test_data[, -5], type = "response")

# 合并为目标格式
predictions_info <- as.data.frame(pred_prob)
predictions_info$pred <- pred_label

# 查看前10行结果
head(predictions_info, 10)

运行后输出的表结构和你给出的示例完全一致:前三列依次为setosa、versicolor、virginica的投票占比,最后一列pred为模型最终输出的分类结果,你可以直接通过对应类别的占比判断预测置信度,例如某样本setosa列值为0.9,就代表500棵树里有450棵投票给setosa。

提取所有单棵决策树的逐样本预测结果

如果你需要拿到500棵树对每个样本的单独分类结果(而非汇总后的占比),给predict()加上predict.all = TRUE参数即可,返回结果会包含所有单树的预测明细:

# 同时返回聚合结果和所有单树预测结果
pred_detail <- predict(iris_class, test_data[, -5], type = "response", predict.all = TRUE)

# pred_detail$aggregate:和type="response"返回的最终预测结果完全一致
# pred_detail$individual:矩阵格式,行对应测试样本,列对应500棵决策树,存储每棵树的单独分类结果
# 查看前5个样本在前10棵树上的预测结果
pred_detail$individual[1:5, 1:10]

如果需要基于单树明细手动计算投票占比,可以用如下代码,结果和直接用type="prob"得到的完全一致:

class_level <- levels(iris$Species)
# 逐样本统计每个类别的投票占比
vote_ratio <- t(apply(pred_detail$individual, 1, function(single_sample_vote){
  table(factor(single_sample_vote, levels = class_level)) / ncol(pred_detail$individual)
}))

# 合并为目标格式
predictions_info_calc <- as.data.frame(vote_ratio)
predictions_info_calc$pred <- pred_detail$aggregate

注:直接用type="prob"的方法是包内部经过优化的实现,计算速度比手动统计单树结果更快,日常评估置信度优先用该方法即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:03:35