Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中回归的随机森林_R_Regression_Random Forest - Fatal编程技术网

R中回归的随机森林

R中回归的随机森林,r,regression,random-forest,R,Regression,Random Forest,我正在试验R和randomForest软件包,我对SVM和神经网络有一些经验。 我的第一个测试是尝试回归:sin(x)+高斯噪声。 使用神经网络和支持向量机,我获得了sin(x)的“相对”良好近似值,因此噪声被过滤掉,学习算法不会过拟合。(用于适当的参数) 在randomForest上执行相同操作时,我有一个完全过拟合的解决方案。 我只是简单地使用(R2.14.0,也在2.14.1上试用过,以防万一): 库(“随机林”) x您可以使用maxnodes来限制树的大小, 如手册中的示例所示 r &l

我正在试验R和randomForest软件包,我对SVM和神经网络有一些经验。 我的第一个测试是尝试回归:sin(x)+高斯噪声。 使用神经网络和支持向量机,我获得了sin(x)的“相对”良好近似值,因此噪声被过滤掉,学习算法不会过拟合。(用于适当的参数) 在randomForest上执行相同操作时,我有一个完全过拟合的解决方案。 我只是简单地使用(R2.14.0,也在2.14.1上试用过,以防万一):

库(“随机林”)

x您可以使用
maxnodes
来限制树的大小, 如手册中的示例所示

r <- randomForest(Y~.,data=mat, maxnodes=10)
plot(x,predict(r,mat),col="green")
points(x,y)
r通过在小样本或Breiman所称的样本上训练单个树,您可以做得更好(rmse~0.04,$r^2$>0.99)

由于训练数据中存在大量噪声,因此这个问题实际上是关于平滑而不是泛化的。在一般的机器学习术语中,这需要增加正则化。对于整体学习者来说,这意味着以实力换取多样性

随机森林的多样性可以通过减少每个分割的候选特征数量(
mtry
在R中)或每个树的训练集(
sampsize
在R中)来增加。由于只有1个输入维度,
mtry
没有帮助,只剩下
sampsize
。这导致RMSE比默认设置提高3.5倍,比噪声训练数据本身提高>6倍。由于divresity的增加意味着个体学习者预测的方差增加,因此我们还需要增加树的数量来稳定集合预测

小袋多树::rmse=0.04

>sd(predict(randomForest(Y~.,data=mat, sampsize=60, nodesize=2,
                         replace=FALSE, ntree=5000),
            mat)
    - sin(x))
[1] 0.03912643
> sd(predict(randomForest(Y~.,data=mat),mat) - sin(x))
[1] 0.1413018
默认设置::rmse=0.14

>sd(predict(randomForest(Y~.,data=mat, sampsize=60, nodesize=2,
                         replace=FALSE, ntree=5000),
            mat)
    - sin(x))
[1] 0.03912643
> sd(predict(randomForest(Y~.,data=mat),mat) - sin(x))
[1] 0.1413018
由于训练集中存在噪音而导致的错误::rmse=0.25

> sd(y - sin(x))
[1] 0.2548882
噪声引起的误差当然可以从中看出

noise<-rnorm(1001)
y<-sin(x)+noise/4
我的直觉是:

  • 如果你有一个简单的决策树来拟合一维曲线f(x),那就相当于拟合一个阶梯函数(不一定是等距跳跃)
  • 对于随机森林,您将创建楼梯函数的线性组合
要使阶梯函数成为f(x)的良好近似值,您需要在x轴上有足够的步长,但每个步长应包含足够的点,以便其平均值是f(x)的良好近似值,且受噪声的影响较小

因此,我建议您调整nodesize参数。如果您有1个决策树和N个点,并且nodesize=N,那么您的阶梯函数将有N/N个步骤。n太小会导致过度装配。我用n~30得到了很好的结果(RMSE~0.07):


r这是我尝试的选项之一,它给出了一个稍微好一点的结果,但与svm和nn相比,它似乎仍然非常糟糕……一定有一组更好的选项……关于机器学习的一个有趣的事情是,没有一种一刀切的方法。某些类型的ALGO更适合不同类型的数据。不幸的是,我还没有找到一个资料来概括哪种方法最适合哪种数据集,因此几乎完全依赖于试错法。
r <- randomForest(Y~.,data=mat, nodesize=30)
plot(x,predict(r,mat),col="green")
points(x,y)