极端随机树回归

所属分类:机器学习-回归

这个方法是做什么的

和随机森林一样,是把 100 棵回归树的预测取平均来预测一个数值型因变量,但有两处关键差别:一是不做有放回重抽样,每棵树都在全部训练样本上生长;二是每次分裂不再逐个候选点搜最优切点,而是先随机抽取切点再择优。随机性从“换一批样本”挪到了“换一个切点”,因此训练更快,也更不容易被少数噪声特征牵着走;代价是单棵树拟合得更粗,要靠树的数量把方差压回来。它同样不需要你指定函数形式,定类自变量拖进去会在管线内独热编码,同样不产出回归系数。

报告共五张卡,与这一族其它算法结构一致,但有一列在本模块可以直接跳过:表4 的“训练折均值”在默认设置下恒等于 1.0000、RMSE 与 MAE 恒为 0.0000(见下),八个模块里只有它这样。主结果口径是 5 折 KFold 交叉验证:表4 给验证折 R²、RMSE、MAE 的均值、折间标准差与 95%CI,并列出“训练折均值”与一次留出测试集作对照;表5 是逐折明细。卡① 给 n∶p 比、定量特征尺度差异、VIF、因变量分布形态、疑似数据泄漏、重复观测等诊断;卡③ 给逐折 R² 柱状图、拟合散点与残差图;卡④ 给测试集上 20 次随机重排的置换重要性(ΔR²、95%CI、相对贡献占比)与 Cohen f²、相对均值基线的 RMSE 降幅;卡⑤ 给论文用的规范表述。

需要准备什么数据

  • 放入因变量Y:不限
  • 放入自变量X:至少 1 个

数据要求

  • 数据表至少 30 行。
  • 单列缺失率不超过 30%。
  • 不接受取值全都一样的列(零方差列没有可分析的变异)。

以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。

什么时候用它

  • 自变量个数偏多,其中不少是噪声列或与因变量只有微弱关系
  • 关系非线性且带交互,同时希望比逐点搜最优切点的随机森林更快跑完
  • 想在同一批数据上跑几种树集成互相对照,看结论换个算法还稳不稳
  • 只需要预测精度与变量重要性排序,不需要系数与显著性

前提:因变量必须是连续数值且有真实波动。有效样本量建议 ≥30,且“样本量 / 独热编码后特征维度”比值 ≥10;卡① 表3 会给出实测 n∶p 与判定,比值过低时不仅模型方差大,置换重要性也会不稳。本模块的数据要求里另有一条:切点上的额外随机性要靠足够的样本量与足够多的树才压得住——本次 240 条下折间标准差 0.1105,已高于同规则数据上的「随机森林回归」(0.0711)。所选变量上有任一缺失的整行会被剔除。

什么时候不要用它

  • 因变量是类别:用「极端随机树分类」。
  • 要系数、标准误与 p 值:本模块一个都不给。要可解释的系数表用「线性回归 (最小二乘法)」;自变量之间高度相关、想让系数稳下来用「岭回归(Ridge)」。
  • 关系本来就接近直线、样本量又小:随机切点会把一段干净的线性关系切成阶梯,白白损失精度。这种数据用「线性回归 (最小二乘法)」;确实弯曲但想保留可解释形状的,用「限制性立方样条(RCS)」。
  • 存在一个主导性的单调效应,你想把精度榨到最高:逐轮拟合残差的「GBDT梯度提升回归」通常比随机切点更贴合,代价是要调学习率与轮数。
  • 要预测训练范围之外的取值:树集成不能外推(见下),改用「线性回归 (最小二乘法)」。
  • 观测之间不独立(重复测量、分层嵌套):交叉验证会把同一个体拆到两边,用「混合模型」。

容易误读的地方

  • 表4 的“训练折均值”那一列在本模块下恒等于完美,看它等于没看。 本次训练折 R²=1.0000、RMSE=0.0000、MAE=0.0000——这不是巧合:默认“最大深度”留空(不限)、“最小叶节点样本数”=1,每棵树都能把训练集切到一叶一样本;又因为极端随机树不做有放回重抽样,每棵树都见过全部训练样本,平均之后仍然分毫不差。「随机森林回归」的演示输出里训练折 R² 是 0.9199 而不是 1,差别正来自它做了 bootstrap、每棵树有约三分之一样本没见过。所以本模块显示的“过拟合幅度 0.5608”里有一大截是这个设置的必然产物,不是数据出了问题。
  • “重要性摊得比别的算法均匀”是算法机制,不是数据结论。 本次卡④ 三个自变量的相对贡献占比是 72.34%、14.90%、12.76%(ΔR² 依次 0.6266、0.1291、0.1106);而「XGBoost回归」在同一套规则生成、变量含义完全相同的示例数据上,第一名占到 86.41%、末位只剩 2.93%。原因是随机切点逼着每棵树把弱变量也用上。但摊得均匀不等于每个都站得住:本模块同样只有“广告投入”的 95%CI 下限大于 0,另两个的区间都跨 0。置换重要性衡量的是“打乱这一列,这个模型会掉多少 R²”,是对模型的诊断,不是变量的因果效应,也不等价于回归系数的显著性。跨算法比排序之前先想清楚这一点。
  • 随机切点改变不了“不能外推”。 叶子里存的仍然是训练样本因变量的平均值,森林的预测恒在训练集因变量的最小值与最大值之间;自变量走到训练范围之外,样本会稳定落进同一批边界叶子。本模块示例数据里“广告投入”的范围是 2.08~11.30 万元——只要其它自变量不变,模型给 20 万元投入的预测值,和给 11.30 万元的预测值是同一个数,而不是继续往上走。
  • 主结果只能读“交叉验证均值”那一列,还得连着它的波动一起读。 本次 CV R²=0.4392(95%CI[0.3020, 0.5764]),单次留出测试集给的却是 0.5074,逐折明细里又从 0.3132 跳到 0.5368。挑哪个数字讲故事,结论差得很远。规范做法是报交叉验证均值、折间标准差与折数。留出那一列现在用的是与交叉验证错开的种子、是另一次划分,但它仍不是互相独立的第二次验证:交叉验证跑在全部 240 条上,留出的那 48 条照样进了各折的训练折。
  • 整份报告不含任何针对自变量的 p 值。 卡④ 的说明逐字写着这一族“没有经典 p 值,其效应量由预测增益承担”——模型层面看 R²/f² 与相对基线的降幅,变量层面看置换重要性及其区间。所以“某变量显著影响因变量”这句话在本模块的输出里找不到依据。需要系数与显著性检验请用「线性回归 (最小二乘法)」,需要在给系数的同时做变量筛选用「Lasso回归」。

报告里有什么

  1. 输出结果一:数据概览与前提检验
  2. 输出结果二:主结果表(交叉验证性能)
  3. 输出结果三:可视化(逐折性能 / 拟合散点 / 残差)
  4. 输出结果四:效应量与事后分析
  5. 输出结果五:结论与学术表述
逐折验证 R²(5 折)
图1 逐折验证 R²(5 折)
真实值 vs 预测值(留出测试集)
图2 真实值 vs 预测值(留出测试集)
残差 vs 预测值(留出测试集)
图3 残差 vs 预测值(留出测试集)
三张图分别回答:模型在不同数据划分下稳不稳(逐折 R²)、预测值贴不贴近真实值(散点)、误差是否随预测水平系统性变化(残差图)。

在线统计分析平台 · 233 种分析方法 · AI 智能解读

在线使用
使用教程