随机森林回归中的响应分布依赖偏差

机器算法验证 r 回归 随机森林
2022-03-22 17:54:40

我正在使用 R 中的 randomForest 包(R 版本 2.13.1,randomForest 版本 4.6-2)进行回归,并注意到我的结果存在显着偏差:预测误差取决于响应变量的值。高值被低估,低值被高估。起初我怀疑这是我的数据的结果,但以下简单示例表明这是随机森林算法固有的:

n = 1000; 
x1 = rnorm(n, mean = 0, sd = 1)
response = x1
predictors = data.frame(x1=x1) 
rf = randomForest(x=predictors, y=response)
error = response-predict(rf, predictors)
plot(x1, error)

我怀疑偏差取决于响应的分布,例如,如果x1是均匀分布的,则没有偏差;如果x1呈指数分布,则偏差是单边的。本质上,正态分布尾部的响应值是异常值。模型难以预测异常值也就不足为奇了。在 randomForest 的情况下,来自分布尾部的极端幅度的响应值不太可能最终出现在终端叶中,并且它的影响将在整体平均值中被冲掉。

请注意,我试图在前面的示例“R 线性回归尾部 mtry 中的 RandomForest”中捕捉到这种效果。这是一个不好的例子。如果上述示例中的偏差确实是算法固有的,那么可以根据尝试预测的响应分布来制定偏差校正,从而得到更准确的预测。

基于树的方法(例如随机森林)是否会受到响应分布偏差的影响?如果是这样,这是统计界以前知道的吗?通常如何纠正它(例如,使用有偏模型的残差作为输入的第二个模型)?

校正依赖于响应的偏差是困难的,因为本质上,响应是未知的。不幸的是,估计/预测响应通常与偏差没有相同的关系。

3个回答

正如您所怀疑的那样 - 叶节点包含某些对象集的均值这一事实使任何回归树模型都收紧响应分布并使任何外推成为不可能。Ensemble 当然对此无济于事,实际上会使情况变得更糟。

天真的解决方案(并且由于过度拟合而危险)是将模型包装在某种经典回归中,这会将响应重新调整为所需的分布。

更好的解决方案是叶模型树模型之一,例如派对包中的MOB这里的想法是,当问题不是简化为简单的值(如在常规树中)而是简化为响应和一些预测变量之间的简单关系(例如线性)时,特征空间的划分应该结束。这种关系现在可以通过拟合一些不会干扰分布或修剪极值并且能够推断的简单模型来解决。

对于通过摇铃包访问的条件射频,我遇到了完全相同的问题。我通过电子邮件向 Graham Williams(rattle 的作者)发送了电子邮件,他将我的查询转发给 cforest 作者,他们回复并建议使用两个参数,这两个参数实际上似乎在 CRF 文档的任何地方都没有被引用,但似乎解决了问题,即 minplit = 2 和 minbucket = 1。

您应该通过在不同 mtry、sampsize 参数的网格上最小化样本外“交叉验证误差”来估计 mtry 和 sampsize 的最佳值,对于一组固定特征的任何相应响应变量,然后得出任何结论 -在结果方面。您可以使用 expand.grid 创建网格参数的组合。