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

使用ranger分类森林时低sample.fraction下预测概率恒为0.5的原因

问题原因分析

这个现象是训练集类别绝对平衡+纯噪声协变量+随机森林采样/分裂机制共同作用的结果,具体拆解如下:

1. 分层采样让每棵树的训练集类别完全对等

你的代码里,sample.fraction = c(5/65, 5/65) 搭配 replace=TRUE,会触发ranger的分层有放回采样逻辑:

  • 总样本数为65,每个类别的采样数量为 65 × 样本比例,也就是类别0和类别1各抽取5个样本。
  • 类别0原始只有5个样本,因此是有放回重复抽取这5个样本;类别1从60个样本中有放回抽取5个。
  • 最终每棵树的训练集都是5个类别0 + 5个类别1,两类数量完全相等。

2. 纯噪声协变量无法提供有效分裂信号

你用的noise是和响应变量完全无关的随机噪声,因此:

  • 任何基于noise的分裂都无法降低节点的不纯度(比如Gini系数),只能产生无意义的随机分裂。
  • 结合ranger默认的min.node.size=5(分类问题的最小叶子节点大小),10个样本的训练集最多只能分裂成两个各含5个样本的叶子节点。而随机分裂噪声变量后,两个叶子节点的类别比例会呈现对称分布(比如一组2个0+3个1,另一组3个0+2个1),单棵树对任意样本的预测概率平均仍为0.5。

3. 多棵树的预测平均后保持精确0.5

由于每棵树的训练集结构完全对称,分裂结果的类别比例也对称,150棵树的预测概率会以0.5为中心严格对称分布。最终所有袋外样本的预测概率平均后,精确等于0.5,没有任何波动。


为什么调整后预测值脱离精确0.5?

情况1:数据量翻倍(df2)

  • 总样本数变为130,采样数量为130×(5/65)=10,每棵树的训练集是10个类别0 + 10个类别1。
  • 此时分裂后的叶子节点类别比例不再严格对称(比如一组4个0+6个1,另一组6个0+4个1;或者3个0+7个1,另一组7个0+3个1等),不同树的预测概率会出现非对称的微小差异。
  • 多棵树的预测平均后,结果会在0.5附近波动,而非精确等于0.5。

情况2:调整sample.fraction至6/65

  • 采样数量变为65×(6/65)=6,类别0需要从5个原始样本中有放回抽取6个(会出现重复样本),类别1抽取6个。
  • 此时训练集的类别平衡被打破(虽然数量都是6,但类别0的样本是重复抽取的,噪声分裂后的叶子节点比例不再对称),单棵树的预测概率会偏离0.5,最终森林的平均结果也会波动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:55:59