背景
直观上理解,随机森林通过在构建决策树的过程中将一些行为随机化(比如特征选取,样本选取),产生许多决策树,然后以这些决策树的结果作为投票,将投票最多的预测作为最终结果。随机化的作用是为了减小单个决策树偏倚。
基本思路
两个参数:随机树个数n和每次选取的特征数m。
在构建每一个决策树时,首先有放回的进行N次抽样,N为训练集大小。可以证明,三分之二的样本会选取出来,剩下的三分之一留下来做训练数据。在每次选取数节点分裂时,随机在M个特征中去m个特征(m远小于M),在这些子特征中选取一个最好的切分点。这里值得指出的是,由于只在m个特征中选取切分点,(相比于在M个特种选取切分点,)计算量大大减少。每个决策树都计算到最后,不裁剪。
就这样,按照上面的方法,构建n个决策树,组成最后的随机森林。
算法评估
随机森林在构建过程中,自带评估。平均而言,每个样例用于构建了三分之二的决策树,剩下的三分之一的决策树构建没有用到,所以可以用剩下的三分之一的决策树对这个样例预测,使用错误率进行评估。这也被称之为out of bag(OOB)测试。决策树还有一个附带产物——计算出每个特征的重要性,这样可以为后续采用其他算法的特征选择提供参考。最近用决策树模型计算了kaggle上面的titanic和digit_recognizer的数据,发现效果都相当不错。
参考
- Wiki决策树(中文)
- 随机森林算法简介
- Leo Breiman(随机森林发明者) 2001年的paper
- Random Forest in Python: