本文的主要内容是基于Python机器学习基础教程决策树部分进行整理和总结。
目的
决策树的主要缺点在于,即使做了剪枝处理,也会出现过拟合的情况,泛化能力相对而言并不高,为此,在大多数的应用中,往往使用集成(ensemble)方法来代替单棵决策树。集成是合并多个机器学习模型来构建更强大模型的方法,目前已经证明随机森林(random forest)作为决策树集成方法对大量分类和回归的数据集都是有效的。
思想
随机森林本质上是许多决策树的集合,,其中每棵树都和其他树有所不同,随机森林的思想在于,保证每棵树的预测都是相对较好的,但是可能对部分数据存在过拟合的情况,我们可以通过构造很多树,并且构造的树都是以不同的方式过拟合,那么我们可以对这些树的结果取平均来降低过拟合。
策略
那么要如何才能保证每棵树有很好的预测并且各有不同呢?随机森林的名字来自于将随机性添加到树的构造过程中,以确保每棵树各有不同,随机森林的随机化方法有两种:
-
通过选择构造书的数据点,实现的方法叫做随机采样(booststrap sample),从n_samples个数据点中有放回的重复抽取一个样本,并且抽取n_samples次,也就是说每个数据点是会被多次抽取的,有的数据点可能一次也不会被抽到(通过数学证明这类样本占到1/3),这样就会生成一个数据点数量和原数据集数量相同的样本集合;
-
通过选择每次划分测试的特征:仅使用随机采样的方法生成随机森林的方法是不够的,我们还需要针对决策树在每个节点处随机算则特征集合的一个子集,在sklearn中,算则的特征个数由max_features参数控制,每个节点中特征子集的选择是相互独立的,这样树的节点可以使用特征的不同子集进行决策。
由此可知,随机森林中构造每棵决策树的数据集都是稍有不同的,同时由于每个节点的特征选择,每棵树的每次特征划分都是基于特征的不同子集,这两种方法共同保证随机森林中所有树都不相同。