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


9

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

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”中捕获此效果。这是一个不好的例子。如果以上示例中的偏差确实是该算法固有的,则可以得出这样的偏差校正值:给定一个正试图预测的响应分布,从而可以进行更准确的预测。

基于树的方法(例如随机森林)是否受到响应分布偏差的影响?如果是这样,这是统计界先前所知的,通常如何进行校正(例如,使用偏倚模型的残差作为输入的第二个模型)?

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


近12个月来我一直在思考这个问题。参见 stats.stackexchange.com/questions/21530/…kaggle.com/forums/t/1106/random-forests-newbie-question。我同意,问题似乎在于,在每个节点上用作预测的平均值不能很好地代表离群值。预测调整或节点模型似乎是合理的方法,但不确定标准方法是什么。
redcalx 2012年

Answers:


4

就像您怀疑的那样,这是完美的-叶子节点包含在一组对象上的均值的事实使任何回归树模型都收紧了响应分布,并且无法进行任何推断。合奏当然无助于此,实际上会使情况变得更糟。

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

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


为什么缩放响应分布会导致过度拟合?在通过多项式拟合对它进行重新缩放后,任何两个林输出之间的排序关系都将保持相同的顺序,因此,如果您基于输出的分位数进行决策,则不会影响模型的决策。
2014年

你是对的; 我在考虑一个场景,当RF产生完全无意义的答案,然后回归将其转换为更好的东西。[R2

3

我通过摇铃包访问条件RF时遇到了完全相同的问题。我通过电子邮件将其发送给Graham Williams(吵闹声的作者),后者将我的查询转发给了cforest的作者,后者回答并建议使用两个参数,这些参数在CRF文档中似乎没有被引用,但是似乎可以解决。问题是minplit = 2和minbucket = 1。


minsplit,我想您的意思是
smci

2

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


2
这对于构建模型是一个很好的建议,通常优化的参数将产生更准确的预测。但是,据我所知,在这种情况下,无论调整如何,都存在偏差。只有一个预测变量,因此必须为1。任何小于n的样本大小都只会放大偏差,而节点大小的影响很小。
rumbleB 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.