在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。
随机森林构建
决策树相当于一个大师,通过自己在数据集中学到的知识对于新的数据进行分类。但是俗话说得好,一个诸葛亮,玩不过三个臭皮匠。随机森林就是希望构建多个臭皮匠,希望最终的分类效果能够超过单个大师的一种算法。
那随机森林具体如何构建呢?有两个方面:数据的随机性选取,以及待选特征的随机选取。
1.数据的随机选取:
首先,从原始的数据集中采取有放回的抽样,构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。第二,利用子数据集来构建子决策树,将这个数据放到每个子决策树中,每个子决策树输出一个结果。最后,如果有了新的数据需要通过随机森林得到分类结果,就可以通过对子决策树的判断结果的投票,得到随机森林的输出结果了。如下图,假设随机森林中有3棵子决策树,2棵子树的分类结果是A类,1棵子树的分类结果是B类,那么随机森林的分类结果就是A类。
![](https://i-blog.csdnimg.cn/blog_migrate/2ccc02ae2be90cecf0a4077f5b1d0874.png)
2.待选特征的随机选取
与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。这样能够使得随机森林中的决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。
下图中,蓝色的方块代表所有可以被选择的特征,也就是目前的待选特征。黄色的方块是分裂特征。左边是一棵决策树的特征选取过程,通过在待选特征中选取最优的分裂特征(别忘了前文提到的ID3算法,C4.5算法,CART算法等等),完成分裂。右边是一个随机森林中的子树的特征选取过程。
![](https://i-blog.csdnimg.cn/blog_migrate/7afbc6cc0f7cf18ba9ae8099cbc54d28.png)
2.随机森林的好处:
- 随机森林算法几乎不需要输入的准备。它们不需要测算就能够处理二分特征、分类特征、数值特征的数据。随机森林算法能完成隐含特征的选择,并且提供一个很好的特征重要度的选择指标。
- 随机森林算法训练速度快。性能优化过程刚好又提高了模型的准确性,这种精彩表现并不常有,反之亦然。这种旨在多样化子树的子设定随机特征,同时也是一种突出的性能优化!调低给定任意节点的特征划分,能让你简单的处理带有上千属性的数据集。(如果数据集有很多行的话,这种方法同样的也可以适用于行采样)
- 随机森林算法很难被打败。针对任何给定的数据集,尽管你常能找到一个优于它的模型(比较典型的是神经网络或者一些增益算法 boosting algorithm),但这类算法肯定不多,而且通常建这样的模型并调试好要比随机森林算法模型要耗时的更多。这也是为何随机森林算法作为基准模型表现出色的原因。
- 建立一个差劲的随机森林模型真的很难!因为随机森林算法对指定使用的超参数(hyper-parameters )并不十分敏感。为了要得到一个合适的模型,它们不需要做很多调整。只需使用大量的树,模型就不会产生很多偏差。大多数的随机森林算法的实现方法的参数设置初始值也都是合理的。
- 通用性。随机森林算法可以应用于很多类别的模型任务。它们可以很好的处理回归问题,也能对分类问题应付自如(甚至可以产生合适的标准概率值)。虽然我从没亲自尝试,但它们还可以用于聚类 分析问题。
转载自网络、百科等