决策树与随机森林

一、决策树

决策树包括3个步骤:

  • 特征选择
  • 决策树的生成(决策树局部最优)
  • 决策树的剪枝(决策树全局最优)

1.特征选择

        特征选择的准则是信息增益或者信息增益比、Gini指数。选取具有分类能力的特征可以提高学习效率。决策树中的信息增益等价于训练数据集中类与特征的互信息。

2.生成(步骤和公式的话,《统计学习方法》讲的很清楚)

        决策树学习采用自顶向下的递归方法,以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处的熵值为0,每个叶子节点中的实例都属于同一类。也就是说最上面的节点我们越不确定,随着条件越多,确定性越大。决策树是在无法进一步降低熵的情况下停止创建分支。决策树的生成方法有以下三种:

  • ID3算法(在决策树各个节点应用信息增益选择特征,递归构建决策树),使用极大似然法进行概率模型的选择。采用划分后样本集的不确定性作为衡量划分好坏的标准,用信息增益度量不确定性:信息增益越大,不确定性越小。因此,在每个非叶子节点选择信息增益最大的属性作为测试属性,可以得到当前情况下最纯的划分,从而得到较小的决策树。树的平均深度较小。

       ID3决策树会偏向于选择取值较多的,即高度分支属性,但是这类属性不一定是最优属性。而且ID3决策树只能处理离散属性,对于连续的属性,在分类前需要进行离散化

为了解决高度分支属性的问题,采用信息增益作为选择测试属性的标准,得到C4.5决策树

  • C4.5算法(在ID3算法的基础上做了一点改进,利用信息增益率来选择节点属性,克服了ID3的缺点)。
  • CART算法(构建树使用gini指数计算增益,进行构建树的特征选取),是一种十分有效的非参数分类和回归方法,通过构建树、修剪树、评估树来构建一个二叉树,当终结点是连续变量时,是回归树,是分类变量时,是分类树。CART算法是一种二分递归分割技术,把当前样本划分为两个子样本,使得生成的每个非叶子节点都有两个分支,是结构简洁的二叉树

3.剪枝(从已生成的决策树上裁掉一些子树或者叶节点,并将其根节点或者父节点作为新的叶节点,从而简化分类树模型,通过极小化决策树整体的损失,或代价函数来实现。)

       剪枝的原因:如果不剪枝,决策树是过拟合的,需要去掉不必要的节点使模型具有泛化能力。生成的决策树非常详细并且庞大,每个属性都被详细的考虑,决策树的叶子节点所覆盖的训练样本是纯的,对训练样本进行分类,效果会很好,误差率极低,训练样本中的错误数据也会被决策树学习,成为决策树的部分,但是对于测试数据集效果不好,即过拟合。

剪枝方法:预剪枝和后剪枝。

预剪枝:为了避免过拟合,设定一个阈值,熵值减小的数量小于这个阈值,就停止继续分支。但是效果不好

后剪枝:删除一些子树,用其叶子节点代替。这个叶子节点所标识的类别用这棵树中大多数训练样本所属的类别来表示。

剪枝的过程是对拥有同样父节点的一组节点进行检查,判断如果将其合并,熵的增加量是否小于某一个阈值,如果,小,说明这一组节点可以合并一个节点,包含了所有可能的结果。是目前最普遍的做法。

4.CART决策树详解

CART算法组成:

  • 决策树生成:基于训练数据生成决策树,生成的决策树要尽量大
  • 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,用损失函数最小作为剪枝的标准

决策树生成:递归构建二叉决策树的过程。

① 回归树的生成(用平方误差最小化原则),最小二乘回归树生成。

②分类树的生成(用基尼指数最小化原则),进行特征选择,生成二叉树

决策树与随机森林_第1张图片

决策树与随机森林_第2张图片

CART生成算法:

输入:训练数据集D,停止计算的条件

输出:CATR决策树

根据训练数据集,从根结点开始,递归地对每一个节点进行一下操作,构建二叉决策树:

(1)设结点的训练数据集为D,计算现有特征对数据集的Gini指数,此时,对每一个特征A,对其可能取得每个值α,根据样本点对A=α的测试为是或否将D分割成D1和D2两部分,然后计算A=α时的Gini指数。

(2)在所有可能的特征A以及他们所有的切分点α中,选择Gini指数最小的特征及其对应的切分点作为最优特征与最优切分点,依最优特征与最优切分点,从现节点生成两个子结点,将训练数据集依特征分配到两个子结点中去。

(3)对两个子结点递归地调用(1),(2),直至满足停止条件

(4)生成CART决策树

算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的Gini指数小于预定阈值(样本基本属于同一类),没有更多特征。

CART剪枝:先从决策树T0底端开始不断剪枝,直到T0的根结点,形成一个子树序列(T0,T1,,,Tn),通过交叉验证的方法在独立验证数据集上对子树序列进行测试,从中选择最优子树。

决策树的超参数

  • 最大深度,当深度为k时,可以拥有最多2**k片叶子节点
  • 每片叶子的最小样本数,整数表示这片叶子上的最小样本数,浮点数表示叶子上的样本数量占节点中样本数量的比例。
  • 每次分裂的最小样本数(应用在节点分裂中)
  • 最大特征数(限制每个分裂中查找的特征数,如果比较大,很可能找到良好的特征,比较小时,将加快计算速度)

二、随机森林

谈到随机森林就会接触到两个概念:bagging和boosting。

Bootstraping:有放回的是抽样方法(可能抽到重复的样本)

Bagging算法:

  • 从原始样本集中抽取训练集,每轮从原始样本集中使用Bootstraping方法抽取n个训练样本,共进行k轮,得到k个训练集。(k个训练集之间相互独立)
  • 每次使用一个训练集得到一个模型
  • 对分类问题:对k个模型投票的方式得到分类结果(每个分类器权值相同);对回归问题,计算k个模型的均值作为结果

Boosting算法(将弱分类器组装成一个强分类器):通过提高在前一轮中被弱分类器分错样本的权值,减小前一轮中分对的样本的权值。通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误列表大的分类器的权值。提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。

区别:

1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

算法组合:

1)Bagging+决策树=随机森林

2)AdaBoost(既可做分类又可做回归)+决策树=提升树

3)Gradient Boosting +决策树=GBDT(GBDT中的树是回归树,不是分类树,用来做回归预测,调整后可用于分类)

随机森林的主要三个超参数:

(1)结点规模:随机森林不像决策树,每一棵树叶节点所包含的观察样本数量可能十分少,该超参数的目标是生成树的时候尽可能保持小偏差。

(2)树的数量

(3)预测器采样的数量:一般有D个预测器,那么可以在回归任务中使用D/3个预测器作为采样数,在分类任务中使用D^(1/2)个预测器作为抽样。

优点:

  • 随机性的引入使得随机森林不容易过拟合,并且具有很好的抗噪能力
  • 能处理很高维的数据,并且不用做特征选择
  • 既能处理离散型数据也能处理连续型数据,数据集无需规范化
  • 容易实现并行化
  • 训练速度快,可以得到变量重要性排序

局限性:如果区分的类别十分多时,随机森林的表现不好,并且在需要推断超出范围的独立变量或非独立变量,随机森林做的不好。当决策树个数很多时,训练的时间和空间会比较大。因此一般模型都会用梯度提升树算法或者其他的提升方法。

三、GBDT算法

GBDT算法可以处理分类和回归的问题。

对于Adaboost,我们是利用前一轮迭代弱学习器的误差率来更新训练集的权重,而GBDT是前向分步算法,但是弱分类器限定为只能使用CART回归树模型,也是迭代算法,迭代思路与AdaBoost思路不一样。

在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是ft−1(x), 损失函数是L(y,ft−1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器ht(x),让本轮的损失函数L(y,ft(x)=L(y,ft−1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。

GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小

损失函数拟合的问题:用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。

GBDT的分类问题:GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。为了解决这个问题,主要有两种方法:

  • 用指数损失函数,此时GBDT退化为AdaBoost算法
  • 用类似于逻辑回归对数似然损失函数的方法,用类别的预测概率和真实概率值的差来拟合损失,对于对数似然损失函数,有二元分类和多元分类的区别。

GBDT的优点:

(1)可以灵活处理各种类型的数据,包括连续值和离散值

(2)在相对少的调参时间情况下,预测的准确率也可以较高,是相对于SVM来说的

(3)使用一些健壮的损失函数,对异常值的鲁棒性非常强,比如Huber损失函数和Quantile损失函数

GBDT的缺点:

   弱学习器之间存在依赖关系,难以并行训练数据,不过关可以通过自采样的SGBT来达到部分并行,而且容易过拟合(没有正则,没有自采样,只有剪枝)

四、总结

1.决策树是一种分类和回归的基本模型:

  • 是一棵树
  • if-then规则的集合,是所有从根节点到叶节点的路径的集合
  • 定义在特征空间与类空间上的条件概率分布,决策树实际上将特征空间划分了互不相交的单元,每个从根到叶的路径对应着一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。实际中,哪个类别有较高的条件概率,就把该单元中的实例强行划分为该类别。

2.决策树的优点:

  • 模型具有可解释性,容易描述
  • 分类速度快
  • 可以同时处理类别数据和数值数据,在运用分类决策树分类时,我们的数据一般会进行离散化

3.如何学习一颗决策树:

  • 决策树的学习本质上就是从训练集中归纳出一组分类规则,使它与训练数据矛盾较小的同时具有较强的泛化English。学习也是基于训练数据集估计条件概率模型。
  • 决策树的损失函数通常是正则化的极大似然函数,学习的策略是以损失函数为目标函数的最小化。
  • 最小化问题是一个NP完全问题,现实中采用启发式算法(比如SMO启发式算法)来近似求解这一最优化问题,得到的决策树是次最优的。

4.启发式算法:

分为三步:特征选择、模型生成、决策树的剪枝。

这三个步骤就是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程,这个过程就是划分特征空间,构建决策树的过程。

5.如何选择最优特征:

        根据特征的分类能力去选择最优特征,特征分类能力的衡量通常采用信息增益或信息增益比。

        要理解信息增益,首先要理解熵这个概念。从概率统计的角度看,熵是对随机变量不确定性的度量,也可以说是对随机变量的概率分布的一个衡量。熵越大,随机变量的不确定性越大。对同一个随机变量,当它的概率分布为均匀分布时,不确定性最大,熵也最大。对有相同概率分布的不同的随机变量,取值越多的随机变量熵越大。

       其次,要理解条件熵的概念。正如熵是对随机变量不确定性的度量一样,条件熵是指,有相关的两个随机变量X和Y,在已知随机变量X的条件下随机变量Y的不确定性。定义为X给定条件下Y的条件概率分布的熵对X的数学期望。

       当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别为经验熵与经验条件熵。

       所谓信息增益,也叫互信息,就是指集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差。

        用信息增益去选择特征有一个问题,即偏向于选择取值较多的特征。解决思路就是对取值较多的特征进行适当的惩罚(这里如果面试官感兴趣,可以说说惩罚思想,如L1,L2都是一种惩罚的做法),这就是信息增益比所干的事。

6.递归的中止条件:

        通常有两个终止条件,一是所有训练数据子集被基本正确分类。二是没有合适的特征可选,即可用特征为0,或者可用特征的信息增益或信息增益比都很小了

7.什么是决策树剪枝,怎么剪枝;

        由于根据训练数据生成的决策树往往过于复杂,导致泛华能力比较弱,所以,实际的决策树学习中,会将已生成的决策树进行简化,以提高其泛华能力,这一过程叫做剪枝。具体说就是在已生成的决策树上裁掉一些子树或叶节点,并将其根节点或父节点作为新的叶节点。

       一般剪枝算法都基于同一个思想,即减小决策树模型的整体损失函数,即正则化的极大似然函数。

      一般剪枝算法给定α后,通过不断剪枝来减小决策树模型的整体损失。具体实现这个算法时可以采用动态规划。

     CART剪枝算法优势在于不同提前确定α值,在剪枝的同时找到最优的α值

8.在CART剪枝算法中,当α确定时,存在唯一的最小子树使得损失函数最小。

https://www.zhihu.com/question/65502113

9.随机森林的应用场景:

随机森林是一种集成算法,首先选取不同的特征和训练样本,生成大量的决策树,然后综合这些决策树的结果来进行最终的分类。相对于决策树,在准确性上有很多的提升,同时一定程度上改善了决策树容易被攻击的特点。

适用场景:

  • 数据维度相对较低(几十维),同时对准确性有较高要求时
  • 因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候可以先试一下随机森林。

10.决策树的应用场景:

  • 能够生成清晰的基于特征选择不同预测结果的树状结构,数据分析师希望更好的理解数据时可以使用决策树
  • 容易被攻击的分类器,攻击指的是认为的改变一些特征,使得分类器判断错误,常见的垃圾邮件躲避检测中,因为决策树最终在底层的判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过检测。
  • 决策树比较简单,作为一些更有用的算法的基石。

11.随机森林在Bagging的基础上,在训练的过程中引入了随机特征选择:随机选择样本(放回抽样)、随机选择特征、构建决策树、随机森林投票(平均)

随机选择特征:在树的构建中,从样本集的特征集合中随机选择部分特征,然后从这个子集中选择最优的属性用于划分。这种随机性导致随机森林的偏差会有稍微的增加,但是由于随机森林的平均特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大。随机森林在噪声较大的分类或者回归问题上会过拟合。

12.GBDT与随机森林的不同点:

  • 组成RF的树可以是分类树或者回归树,但是GBDT只能是CART回归树
  • 组成RF的树可以并行生成,而GBDT是串行生成
  • RF采用多数投票等,GBDT将所有的结果累加起来,或者加权累加
  • RF对异常值不敏感,GBDT对异常值非常敏感
  • RF对训练集一视同仁,GBDT是基于权值的弱分类器的集成
  • RF通过减少模型的方差提高性能,GBDT通过减少模型的偏差提高性能。

你可能感兴趣的:(机器学习,随机森林,决策树,小结)