我正在使用 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”中捕捉到这种效果。这是一个不好的例子。如果上述示例中的偏差确实是算法固有的,那么可以根据尝试预测的响应分布来制定偏差校正,从而得到更准确的预测。
基于树的方法(例如随机森林)是否会受到响应分布偏差的影响?如果是这样,这是统计界以前知道的吗?通常如何纠正它(例如,使用有偏模型的残差作为输入的第二个模型)?
校正依赖于响应的偏差是困难的,因为本质上,响应是未知的。不幸的是,估计/预测响应通常与偏差没有相同的关系。