【问题标题】:random forest tuning - tree depth and number of trees随机森林调整 - 树的深度和树的数量
【发布时间】:2016-05-02 00:43:11
【问题描述】:

我有一个关于调整随机森林分类器的基本问题。树的数量和树的深度之间有什么关系吗?树的深度是否必须小于树的数量?

【问题讨论】:

  • @B.ClayShannon 随机森林是一种机器学习方法。他的问题完全属于这里。
  • 我从来没有听说过树的数量和树的深度之间的经验法则。通常,您需要尽可能多的树来改进您的模型。树的深度应该足以将每个节点拆分为所需的观察次数。
  • @TimBiegeleisen 这是我的经验法则 :)
  • 有一些工作说最好的深度是 5-8 分割。当然,这取决于问题和数据。将响应视为具有多变量输入的表面,并且每片叶子都希望在具有最高坡度的区域上进行分割。如果你有足够的分数来计算数学,那么将进行更多的分割来表示表面,直到你碰到“最大深度”的墙。如果您的数据足够稀疏或足够嘈杂,那么它就无法干净地检测斜率,也不会分裂。如果存在关系,它还与 mtry - 通知拆分的列数有关。

标签: random-forest


【解决方案1】:

这一切都取决于您的数据集。

我有一个示例,我在成人收入数据集上构建随机森林分类器并减少树的深度(从 42 到 6)提高了模型的性能。减少树深度的副作用是How can I reduce the long feature vector which is a list of double values? 模型大小(保存后在 RAM 和磁盘空间中)

关于树的数量,我在 OpenML-CC18 基准测试中的 72 个分类任务上执行 experiment,我发现:

  • 数据中的行越多,需要的树就越多,
  • 最好的性能是通过以 1 树精度调整树的数量来获得的。训练大型随机森林(例如 1000 棵树),然后使用验证数据找到最佳的树数。

【讨论】:

    【解决方案2】:

    我同意蒂姆的观点,即树的数量和树的深度之间没有拇指比。通常,您需要尽可能多的树来改进您的模型。更多的树也意味着更多的计算成本,并且在一定数量的树之后,改进可以忽略不计。如下图所示,经过一段时间后,即使我们增加树的数量,错误率也没有显着改善。

    树的深度意味着你想要的树的长度。较大的树可以帮助您传达更多信息,而较小的树提供的信息不太精确。因此深度应该足够大,以将每个节点拆分为您想要的观察数量。

    以下是鸢尾花数据集的短树(叶节点=3)和长树(叶节点=6)的示例:与长树(叶节点=6)相比,短树(叶节点=3)提供的信息不太精确.

    短树(叶节点=3):

    长树(叶节点=6):

    【讨论】:

      【解决方案3】:

      确实,通常更多的树会导致更好的准确性。然而,更多的树也意味着更多的计算成本,并且在一定数量的树之后,改进可以忽略不计。 Oshiro 等人的一篇文章。 (2012) 指出,根据他们对 29 个数据集的测试,在 128 棵树之后没有显着改善(这与 Soren 的图表一致)。

      关于树的深度,标准的随机森林算法在没有修剪的情况下生长完整的决策树。单个决策树确实需要修剪以克服过度拟合问题。然而,在随机森林中,这个问题通过随机选择变量和 OOB 动作来消除。

      参考: Oshiro,T.M.,佩雷斯,P.S.和 Baranauskas,J.A.,2012 年 7 月。随机森林中有多少棵树?在 MLDM 中(第 154-168 页)。

      【讨论】:

        【解决方案4】:

        对于大多数实际问题,我同意 Tim。

        然而,其他参数确实会影响集成误差何时作为添加树的函数收敛。我猜想限制树的深度通常会使整体收敛得更早一点。我很少会摆弄树的深度,好像计算时间降低了,但它并没有带来任何其他好处。降低 bootstrap 样本量既可以降低运行时间,也可以降低树相关性,因此通常在可比较的运行时间下模型性能更好。 一个未提及的技巧:当 RF 模型解释的方差低于 40%(看似嘈杂的数据)时,可以将样本大小降低到 ~10-50%,并将树增加到例如5000(通常不需要很多)。集成误差稍后将作为树的函数收敛。但是,由于较低的树相关性,模型变得更加稳健,并且将达到较低的 OOB 错误水平收敛平台。

        您在下面看到 samplesize 给出了最好的长期收敛,而 maxnodes 从较低的点开始但收敛较少。对于这种嘈杂的数据,限制 maxnodes 仍然比默认 RF 更好。对于低噪声数据,通过降低 maxnodes 或样本大小来减少方差不会因为失拟而导致偏差增加。

        对于许多实际情况,如果您只能解释 10% 的方差,您会直接放弃。因此,默认射频通常很好。如果您是 Quant,可以下注成百上千个职位,那么 5-10% 的解释方差非常棒。

        绿色曲线是 maxnodes,它有点像树的深度,但不完全是。

        library(randomForest)
        
        X = data.frame(replicate(6,(runif(1000)-.5)*3))
        ySignal = with(X, X1^2 + sin(X2) + X3 + X4)
        yNoise = rnorm(1000,sd=sd(ySignal)*2)
        y = ySignal + yNoise
        plot(y,ySignal,main=paste("cor="),cor(ySignal,y))
        
        #std RF
        rf1 = randomForest(X,y,ntree=5000) 
        print(rf1)
        plot(rf1,log="x",main="black default, red samplesize, green tree depth")
        
        #reduced sample size
        rf2 = randomForest(X,y,sampsize=.1*length(y),ntree=5000) 
        print(rf2)
        points(1:5000,rf2$mse,col="red",type="l")
        
        #limiting tree depth (not exact )
        rf3 = randomForest(X,y,maxnodes=24,ntree=5000)
        print(rf2)
        points(1:5000,rf3$mse,col="darkgreen",type="l")
        

        【讨论】:

        • 非常感谢您的解释。我可以在一定程度上理解您的意思,但是,由于我仍然习惯于开发随机森林模型的整个概念,因此根据您的回答,我还有一些问题。树的相关性到底是什么,你如何衡量它? OOB 估计和集成误差是一回事吗?由于这些可能是非常基本的,如果我可以阅读以更好地理解这些术语,您可以告诉我是否有文章。非常感谢!
        • 树相关性意味着两棵树在预测变量方面是相关的,在该预测变量上进行了拆分。在 bagging 中,OOB(out of bag)意味着平均而言,我们只能使用 2/3 的数据集来构建我们的树,其余的 1/3 没有被使用。所以我们试图从OOB 1/3rd数据集进行预测。
        • 谢谢,这看起来很棒,不错的提示!但对我来说,它不起作用,将 sampsize 设置为 .1、.2、.3 等并不会导致更低的 mse 或更高的 rsq,甚至对于 5000 棵树也不会。对于 0.5(3.371 而不是默认的 3.377 :-)),它仅低得可以忽略不计。
        猜你喜欢
        • 2019-10-23
        • 2019-09-15
        • 2016-10-08
        • 2020-08-16
        • 2019-12-20
        • 2017-03-26
        • 2016-07-05
        • 2013-08-30
        • 2021-02-20
        相关资源
        最近更新 更多