我使用R(R版本2.13.1,randomForest版本4.6-2)中的randomForest包进行回归,并注意到我的结果存在显着偏差:预测误差取决于响应变量的值。高值低于预测值,低值超出预测值。起初我怀疑这是我的数据的结果,但下面的简单示例表明这是随机森林算法所固有的:
n = 50;
x1 = seq(1,n)
x2 = matrix(1, n, 1)
predictors = data.frame(x1=x1, x2=x2)
response = x2 + x1
rf = randomForest(x=predictors, y=response)
plot(x1, response)
lines(x1, predict(rf, predictors), col="red")
毫无疑问树方法在线性方面有其局限性,但即使是最简单的回归树,例如R中的树()没有表现出这种偏见。我无法想象社区会不会意识到这一点,但没有找到任何提及,它一般如何纠正?感谢您的任何评论
编辑:这个问题的例子是有缺陷的,请参阅堆栈交换中的“RandomRorest for R in R in response distribution dependent bias”以改进处理https://stats.stackexchange.com/questions/28732/randomforest-for-regression-in-r-response-distribution-dependent-bias答案 0 :(得分:5)
您发现的并不是随机森林中的固有偏差,而只是无法正确调整模型上的调整参数。
使用您的示例数据:
rf = randomForest(x=predictors, y=response,mtry = 2,nodesize = 1)
plot(x1, response)
lines(x1, predict(rf, predictors), col="red")
对于您的真实数据,当然,改进不太可能那么明显,而且我敢打赌,nodesize
比mtry
获得更多里程({1}} { {1}}完成了大部分工作。)
普通树木没有表现出这种偏见"是因为默认情况下,它们搜索所有变量以获得最佳分割。