通常情况下, 随机森林不需要后剪枝。
剪枝的意义是:防止决策树生成过于庞大的子叶,避免实验预测结果过拟合,在实际生产中效果很差
剪枝通常有两种:
PrePrune:预剪枝,及早的停止树增长,在每个父节点分支的时候计算是否达到了限制值
PostPrune:后剪枝,基于完全生长(过拟合)的树上进行剪枝,砍掉一些对衡量函数影响不大的枝叶
剪枝的依据:
常见的有错误率校验(判断枝剪是降低了模型预测的正确率),统计学检验,熵值,代价复杂度等等
总结看来,枝剪的目的是担心全量数据在某棵树上的拟合过程中,过度判断了每个点及其对应类别的关系,有如以下这张图(以rule1&rule2代替了rule3):
-----------------------------------------------------------------------------------------------------------------------------
随机森林:
定义:它是一种模型组合(常见的Boosting,Bagging等,衍生的有gbdt),这些算法最终的结果是生成N(可能会有几百棵以上)棵树,组合判断最终结果。
如何组合判断?
1.通常我们会规定随机森林里面的每棵树的选参个数,常见的有log,sqrt等等,这样的选取是随机选则的,这样有一个好处,让每一棵树上都有了尽可能多的变量组合,降低过拟合程度
2.树的个数及树的节点的变量个数,通常的来说,最快捷的方式是先确定节点的变量个数为sqrt(变量的个数),然后在根据oob的准确率反过来看多个棵树时最优,确定了树的个数的时候再反过来确定mtry的个数,虽然有局限,但是也并不存在盲目性
3.我个人理解,随机森林中的每一棵树我们需要它在某一片的数据中有非常好的拟合性,它并不是一个全数据拟合,只需要在它负责那块上有最佳的拟合效果。每次遇到这些数据(特征)的时候,我们在最后汇总N棵树的结果的时候,给这些数据对应的那块模型以最高权重即可
最后总结一下,就是随机森林里面的每棵树的产生通过选特征参数选数据结构,都已经考虑了避免共线性避免过拟合,剩下的每棵树需要做的就是尽可能的在自己所对应的数据(特征)集情况下尽可能的做到最好的预测结果;如同,公司已经拆分好部门,你不需要考虑这样拆分是不是公司运营最好的一个组合方式,你需要做的就是当公司需要你的时候,尽可能的做好自己的事情,就酱。