决策树生成算法个重要的工作就是选择当前信息增益最大的属性对决策树进行分裂,并根据该属性可能的取值建立对应的分支。

信息增益信息论中信息熵的概念相关。信息熵是表示一个事件的不确定性的大小,不确定性越大那么该事件包含的信息熵就越大,如果一个事件完全确定了,那么它所包含的信息熵就是0

信息增益就是分裂前的信息熵分裂后的信息熵,信息增益越大就表示分裂过程中所释放的信息量就越大。

1.决策树创建过程

决策树:选择一个属性进行分枝,因此要注意一下信息增益的计算公式


二、决策树

n代表有n个分类类别(比如假设是2类问题,那么n=2)。分别计算这2类样本在总样本中出现的概率p1p2,这样就可以计算出未选中属性分枝前的信息熵。

现在选中一个属性xi用来进行分枝,此时分枝规则是:如果xi=vx的话,将样本分到树的一个分支;如果不相等则进入另一个分支。很显然,分支中的样本很有可能包括2个类别,分别计算这2分支的熵H1H2,计算出分枝后的总信息熵H’=p1*H1+p2*H2.,则此时的信息增益ΔH=H-H’。以信息增益为原则,把所有的属性都测试一边,选择一个使增益最大的属性作为本次分枝属性(说明信息熵最小,信息熵描述不稳定性,则信息熵最小的稳定性最高)

决策树的优点:

计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征;

缺点:

容易过拟合(后续出现了随机森林,减小了过拟合现象)或者剪枝

2.1决策树构建实例(ID3

ID3算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂。下面我们继续用SNS社区中不真实账号检测的例子说明如何使用ID3算法构造决策树。为了简单起见,我们假设训练集合包含10个元素:


二、决策树

 

其中sml分别表示小、中和大。

LFHR表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益。

二、决策树


二、决策树


 因此日志密度的信息增益是0.276

 用同样方法得到HF的信息增益分别为0.0330.553

 因为F具有最大的信息增益,所以第一次分裂选择F为分裂属性,分裂后的结果如下图表示:


二、决策树

 

在上图的基础上,再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。

 上面为了简便,将特征属性离散化了,其实日志密度和好友密度都是连续的属性。对于特征属性为连续值,可以如此使用ID3算法:

 先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点,从第一个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最小期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。

2.3   C4.5构建决策树

C4.5算法首先定义了分裂信息,其定义可以表示成:

二、决策树


 其中各符号意义与ID3算法相同,然后,增益率被定义为:

二、决策树

 C4.5选择具有最大增益率的属性作为分裂属性,其具体应用与ID3类似,

2.4本质上C4.5算法只能算是ID3算法的改进版本。C4.5ID3的改进如下:

1、 改善ID3算法的归纳偏置问题

C4.5改善ID3的归纳偏置问题的方法是引入了信息增益率:

二、决策树

 

2、 可处理连续数值型属性的离散化问题

C4.5既可以处理离散型描述属性,也可以处理连续性描述属性。在选择某节点上的分枝属性时,对于离散型描述属性,C4.5的处理方法与ID3相同,对于连续数值型属性,处理方式如下:

(1) 将该结点上的所有数据样本按照连续型描述属性的具体数值,由小到大进行排序,得到属性值的取值序列(A1,A2……An)。

(2) 生成属性值的若干个划分点,每个划分点都可以把属性值集合分成两个域。一个比较简单的划分方法就是取n-1个划分点,划分点

二、决策树


(3) 分别计算按照每个划分点划分得到的信息增益或者增益率,把信息增益或者信息增益率最大的那个划分点最为连续数值型属性的离散化划分点。

(4) 对决策树采取后剪枝。

避免树的高度无节制的增长,避免过度拟合数据,该方法使用训练样本集本身来估计剪枝前后的误差,从而决定是否真正剪枝。方法中使用的公式如下:

二、决策树


 

其中N是实例的数量,f=E/N为观察到的误差率(其中EN个实例中分类错误的个数),q为真实的误差率,c为置信度(C4.5算法的一个输入参数,默认值为0.25),z为对应于置信度c的标准差,其值可根据c的设定值通过查正态分布表得到。通过该公式即可计算出真实误差率q的一个置信度上限,用此上限为该节点误差率e做一个悲观的估计:


二、决策树

 

通过判断剪枝前后e的大小,从而决定是否需要剪枝。

(4) 可处理样本的属性值缺失问题

处理缺少属性值的一种策略是赋给它结点n所对应的训练实例中该属性的最常见值;

2.5 防止决策树过拟合的决策树剪枝

在生成树的过程中,如果没有剪枝的操作的话,就会长成每一个叶都是单独的一类的样子。这样对我们的训练集是完全拟合的,但是对测试集则是非常不友好的,泛化能力不行。因此,我们要减掉一些枝叶,使得模型泛化能力更强。
根据剪枝所出现的时间点不同,分为预剪枝和后剪枝。预剪枝是在决策树的生成过程中进行的;后剪枝是在决策树生成之后进行的。

1.预剪枝

通过提前停止树的构建而对树剪枝,一旦停止,节点就是树叶,该树叶持有子集元祖最频繁的类。

停止决策树生长最简单的方法有:

(1.)定义一个高度,当决策树达到该高度时就停止决策树的生长

(2.)达到某个节点的实例具有相同的特征向量,及时这些实例不属于同一类,也可以停止决策树的生长。这个方法对于处理

数据的数据冲突问题比较有效。

(3.)定义一个阈值,当达到某个节点的实例个数小于阈值时就可以停止决策树的生长

(4.)定义一个阈值,通过计算每次扩张对系统性能的增益,并比较增益值与该阈值大小来决定是否停止决策树的生长。

2.后剪枝方法

后剪枝(postpruning):它首先构造完整的决策树,允许树过度拟合训练数据,然后对那些置信度不够的结点子树用叶子结点来代替,该叶子的类标号用该结点子树中最频繁的类标记。相比于先剪枝,这种方法更常用,正是因为在先剪枝方法中精确地估计何时停止树增长很困难。

为了处理由于数据中的噪声和离群点导致的过分拟合问题

先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造。

后剪枝——先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。

2.6.防止决策树过拟合的随机森林

随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。

随机森林可以既可以处理属性为离散值的量,比如ID3算法,也可以处理属性为连续值的量,比如C4.5算法

2.6.1随机森林最重要的是掌握两个随机的意思。

每棵树的按照如下规则生成:

1)如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本(这种采样方式成为bootstrap sample),作为该树的训练集;

从这里我们可以知道:每棵树的训练集都是不同的,而且里面包含重复的训练样本(理解这点很重要)。

2)如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;

3)每棵树都尽最大程度的生长,并且没有剪枝过程。

一开始我们提到的随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。

随机森林分类效果(错误率)与两个因素有关:

·森林中任意两棵树的相关性:相关性越大,错误率越大;

·森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。

减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。

所以随机森林是随机选出的很多颗决策树投票产生的结果。随机选取m个特征+有放回的随机选取n个数据集做预测,这样做的目的就是防止过拟合。

 

2.6.2随机森林优点

· 在数据集上表现良好

·  在当前的很多数据集上,相对其他算法有着很大的优势

·  它能够处理很高维度(feature很多)的数据,并且不用做特征选择

·  在训练完后,它能够给出哪些feature比较重要

·  在创建随机森林的时候,对generlization error使用的是无偏估计

·  训练速度快

·  在训练过程中,能够检测到feature间的互相影响

·  容易做成并行化方法

·  实现比较简单

随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。

2.6.3随机森林构造过程

1. 假如有N个样本,则有放回的随机选择N个样本(每次随机选择一个样本,然后返回继续选择)。这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。

2. 当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m << M。然后从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。

3. 决策树形成过程中每个节点都要按照步骤2来分裂(很容易理解,如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了,这一点保证了树的高度肯定是<=M)。一直到不能够再分裂为止。注意整个决策树形成过程中没有进行剪枝。

4. 按照步骤1~3建立大量的决策树,这样就构成了随机森林了。

从上面的步骤可以看出,随机森林的随机性体现在每颗数的训练样本是随机的,树中每个节点的分类属性也是随机选择的。有了这2个随机的保证,随机森林就不会产生过拟合的现象了。

随机森林有2个参数需要人为控制,一个是森林中树的数量,一般建议取很大。另一个是m的大小,推荐m的值为M的均方根。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
  • 2021-06-04
  • 2021-07-07
  • 2021-04-28
猜你喜欢
  • 2021-10-07
  • 2021-05-02
  • 2021-12-25
相关资源
相似解决方案