5.1决策树
决策树是利用归纳法学习的。
一、思维模式
这是根据情人节当天所做的一个决策树。(决策树是一个多叉树)
有关贷款申请的决策树。
二、模型结构
圆圈表示特征或属性;方框表示 类别。 我们就是根据特征来进行分类。
if--Then规则
从根节点到叶子节点的一条路径,就对应着一条规则。
每个叶节点都对应着一条规则,且每个叶节点所对应的规则还不一样。
一个叶节点/一个类:可能对应着多条路径(即从不同的路径可能获得相同类别,例如上面贷款的决策树,“可以偿还”这个类别就有多条路径)
每个实例:对应着一条路径
if---Then规则是 互斥的,完备的。互斥:通过属性特征进行分叉,互相之间没有交集;且分完的两个叉合在一起 是完整完备的。
构造决策树
能将训练数据集的大部分数据正确分类就可以了。为什么是大部分,而不是全部?----- 第一章所讲,选择模型时,不仅考虑它对已知数据的拟合能力,还要考虑模型对未知数据的泛化能力(预测)
拟合和泛化得到平衡,才是最优模型。
5.2.1决策树:条件概率分布
第一章关于统计学习方法的分类时,按模型分类,可分为概率模型和非概率模型。
概率模型:条件概率模型。如:朴素贝叶斯法,决策树
非概率模型:感知机,k近邻树
黄色的那两块的概率都是>0.5的,所以认为这两块单元的分类时正类。
有多少个叶子节点,就有几个单元,但是类别的个数<=单元个数。
决策树可以看作是 由 if--Then规则所构成的集合,那么,多个if--then规则能组成一条又一条的路径,每条路径对应着特征空间中的一个又一个的小单元,所以,决策树还可以看成 是由给定条件下类的条件概率分布组成的。
5.2.2决策树:决策树学习
与训练数据矛盾较小,即拟合能力好,泛化能力好即预测能力好。
5.3特征选择
5.3.1决策树:信息增益
对这个数据样本,根据选择特征的先后不同,构造的决策树不一样。
就是因为这样,所以我们要进行特征选择。
信息增益:熵
信息增益是由熵构建而成。
随机变量有n个取值,每个取值对应的概率是Pi,那个该随机变量所对应的熵:
该随机变量的概率是什么分布时,熵最大, 什么时候熵最小?
对于一件确定的事(百分比发生),或是你能肯定的事,那么这件事对你而言,熵就是0,因为这一定会发生,没有给你带来更多的信息(信息增益)
H(D)中的D就是对应训练数据集。
H(D)是不知道任何特征信息的条件下,所得到的熵,
H(D|A)是知道了特征A后,所得到的条件熵,
H(D)- H(D|A) 就是我们对于一件模糊的事情,在知道了关于该事情的特征A后,在信息上有多少帮助。
熵---混乱程度麻,好像是这样。从一无所知的混乱程度,到知道其中一个特征后的混乱程度,
所减少的混乱完全是归功于这个特征。
5.3.2决策树:信息增益例题解说
15个样本数据,D=15,最终所分类别是两个:允许申请贷款,不允许。我们认为“允许”的属于同一种变量,“不允许”的属于另一种随机变量。所以K=2,也就是上面的n=2。
知道年龄特征A1后,可把原来的数据集D分为三个子集(三种随机变量),
再看第二个特征A2:有工作;可把原训练集分为两个子集(两随机变量),有工作,没工作
H(D1)=0*log0 - 5/5*log(5/5) = 0+0=0
理解:对于D1这个子集,它不包含 不同意贷款 这种样本的,所以,对他而言,我们认为 不同意贷款 是一个不可能事件,则它所携带的信息量就是0.。类似的,由于它所有样本都是归属于同一类(同意贷款),那么对于后面这部分,是完全确定的事件,也不携带信息。
再看第三个特征:是否有房。
最后一个特征:信贷情况
最后,计算信息增益,发现 “有房子”这个特征的信息增益最大,所以它是最优特征, 决策树的根节点就应该以该特征作为根节点。
5.3.3决策树:信息增益比
在有了信息增益 来选择最优特征后,还可以用信息增益比来选择最优特征。
为什么还要信息增益比呢?
因为 信息增益 有时候更倾向于选择具有更多取值的那个特征。
信贷情况有三个取值,有工作 有两个取值。
由于信贷情况取值个数 > 有工作 取值个数, 有可能因为这个原因,造成 信贷情况的信息增益> 有工作的信息增益。
看上一节的最后的图就知道。
如何能降低 取值个数 对信息增益的影响呢??------利用信息增益比
用该特征的信息增益/该特征的熵
其实就是在数据集的混乱程度下,知道该特征的单位信息,能获得多少信息增益。
对于特征:有工作、信贷情况。
比较信息增益和信息增益比的话,选择出来的特征不同。
那么,究竟应该用谁来选择特征好呢? ------没法一概而论。
信息增益倾向于选择取值较少的特征。
5.4决策树的生成
5.4.1决策树的生成:ID3算法
上面第三个步骤其实可作为第二个步骤的说明。
若D1,D2,,,,Dn中某一个子集 Di 不能认为是单节点的子集的话,还得将该子集接着从剩下的特征中选择信息增益最大的特征,继续决策树的开枝散叶。
什么时候生成完毕?当所有的剩余特征的信息增益都< 时。
5.4.2决策树的生成:C4.5算法
算法思路跟ID3相差不大,就是选择特征的方式改为用信息增益比。
且C4.5不仅可以处理离散型的描述特征,而且可以处理连续型的。
缺点是:信息增益比计算比较麻烦, 尤其是在处理连续型变量的时候。且需要对数据进行多次的顺序排序,导致它的低效性。即当数据量非常大时,很难运行。
5.4.3决策树的生成:例题讲解
首先,数据的类别不仅有一个,而且,特征集A中不是空集。计算得到的信息增益也都不小于阈值
故选择信息增益最大的特征来作为根节点。
信息增益最大的特征:有自己的房子(其分为两个子集:有自己的房;没自己的房)
画一下当前的决策树:
对于子集D2的9个数据,既有同意贷款的,又有不同意贷款的。
故根据特征选择,确定圆圈应该选定的内部特征。
以D2作为一个新的数据集,{ A1,A2,A4 }作为新的特征集,(刚刚的“有自己的房子”为A3)
计算各个特征的信息增益。
在D2中,知道A1后,所能获得的信息增益:仅D2下的经验熵H(D2) 减去 知道A1后,D2的条件熵
得到信息增益最大的特征:有工作
5.5决策树------剪枝
对已知数据的预测能力:拟合;
对未知数据的预测能力:泛化
根节点处的深度:0
决策树是通过训练数据集一步一步生成的,所以,我们往往生成过程中,过于强调对于训练数据集的预测能力,就容易出现过拟合现象,因此,剪枝的目的:防止过拟合,处理决策树的过拟合问题
生成决策树过程中,对于一个节点后的分叉是否要剪枝:若生成这个节点后,它的泛化能力能提高,则让其生成;否则剪掉。
5.5.1决策树:预剪枝(1)
预剪枝的方法:
通过一个例子来了解:
拿到数据后,首先看是否有Y, 有Y那就是监督学习。 没有Y那就是无监督学习。若数据集中,部分数据包含输出,部分不包含输出,那就是半监督学习。
再看输出变量是连续的还是离散的,连续即回归问题,离散则为分类问题。
预剪枝:限制深度
如果我们限定决策树的深度为2的话,就得把3,4层给剪掉。那么色泽应该怎么替代。
按照原决策树,把数据中:纹理为清晰,根蒂为稍卷缩的数据拿出来,发现:好瓜两个,坏瓜1个。则 预测认为对于纹理为清晰,根蒂为稍卷缩的西瓜 为 好瓜。
预剪枝:阈值
算法中跟阈值相关的。
阈值设为0.4,阈值过高,使得所有特征的信息增益都小于阈值,进而变成单节点的决策树。
5.5.1决策树:预剪枝(2)
利用误差率
首先,利用训练数据集得到一个单节点的决策树,可以得到什么呢:
训练集中5个是好瓜,5个是坏瓜。 那么,单节点既可以是好瓜,也可以是坏瓜。
测试集中是3个好瓜,4个坏瓜.
若该决策树是单节点:好瓜。如下图
此时该决策树会把测试集中的所有实例都预测为好瓜,从而导致误差率:4/7
若把这个好瓜的叶节点变为内部节点。 即细化决策树:
计算训练集中10个数据的各特征的信息增益。
计算完发现,脐部的信息增益最大。
用该决策树去预测测试集:
发现此时的误差率是:2/7.
比之前那颗单节点(好瓜)的决策树 的误差率4/7更低。
说明,把原来的决策树从单节点 变为 1层的决策树后,误差率更低,即泛化能力更强。
================================================================
若把初始的决策树 视为 单节点(坏瓜)的决策树
此时的误差率为3/7. 也很明显,比细化为1层的决策树的误差率(2/7) 更高。
说明细化为1层的决策树 的泛化能力更好。
===========================================================
故无论是单节点的好瓜决策树,还是单节点的坏瓜决策树,都应该把它细化。
都应该从这颗决策树出发,判断是否应该再继续把叶子节点继续划分。
对于第一个叶节点,关于 凹陷的, 其训练集中 脐部为凹陷的实例中,并非全部为好瓜。
故尝试接着划分,计算剩余特征的信息增益,发现 特征 色泽。
得到薪的决策树:
划分后,此时对测试集的误差率为3/7.
而没细化之前,误差率为2/7.
说明在脐部为凹陷的这个叶节点处,再次划分使得决策树泛化能力变差,故不应该在这继续划分
接着,看第二个叶子节点,脐部稍凹 处 尝试继续划分,根据训练集计算,
再看测试集中的误差率:
误差率为2/7,跟没划分前的决策树模型一样的误差率。
出于 奥卡姆剃刀原理,模型在相同的效果下,模型越简单越好,故不应继续划分。
再看第三个叶子节点:脐部为平坦的叶节点
训练集中 脐部为平坦的实例都是 坏瓜,没有错误,就没必要再划分。
所以,最后得到的决策树:(根据测试集误差率来预剪枝得到的)
5.5.2后剪枝
5.5..2--1后剪枝:降低错误剪枝
根据剪枝前后的泛化能力来决定是否剪枝,故需要使用测试集 。
注意:若剪枝后的误判个数跟剪枝前的一样的话,根据奥卡姆剃刀原理,也要剪枝(泛化能力相同,选择模型更简单的。)
实例
由训练集得到的决策树如上,是否需要剪枝? 自下而上看,首先看最后那层的叶子是否需要剪掉,即纹理这个特征的子树是否要剪掉。
如果剪掉的话,纹理这里需要用什么叶子节点来替代?(好瓜还是坏瓜)
看训练集,脐部稍凹,根蒂稍蜷缩,色泽乌黑的几个实例中,占多数的是好瓜还是坏瓜。
观察训练集,发现就两个实例,我们认为剪掉后用好瓜代替。
接着,求解该子树剪枝前后的误判个数。
发现剪枝前的误判个数为2。
而剪枝后,发现误判个数为1,故纹理那个子树应该剪掉。
从而,决策树就从深度为4变为深度为3.
接着,是否应该再继续剪枝呢?(自下向上)
是否应该把深度为3变为深度为2? 即色泽这个子树是否应该剪掉。
观察训练集,脐部稍凹,根蒂稍蜷缩的实例中,两个好瓜,1个坏瓜。那么,如果剪掉色泽的话,用叶节点好瓜代替。
剪枝前的误判个数为1.
剪枝后的误判个数也为1, 根据奥卡姆剃刀原理,泛化能力相同,选择模型复杂度更低的。
剪枝!
于是,深度就从3变为2了, 再看,深度是否能从2变为1呢
同样的方法步骤,发现还应该剪枝。
变成深度为1的决策树,如下:
这时候,再看是否应该把深度为1变为深度为0(即决策树只有一个根节点)
尝试后发现。不应该减为单节点树。
故,最后结果是:
5.5.2--2后剪枝:悲观错误剪枝(PEP)
error(Leaf i):叶子节点上的误判个数
N(T):样本总数
目标子树上单个叶子节点的误差:
得到是一种离散的情况,它是离散的二项分布,该如何修正?
从离散的二项分布,到连续的正态分布修正:加个0.5
L是该子树上的叶子节点个数
悲观错误剪枝 实例演示:
圆圈:内部节点 方框:叶子节点
T5指节点编号 绿色:正类 红色:负类
节点内部左边数字:正类 的实例个数
误判个数就看不是该叶子节点类别的个数
上图子树的误判个数:3+2+1=6
子树的样本总数:17+13=30
第二个例子:
悲观错误剪枝方法的特点:
5.5.2--3后剪枝:最小误差剪枝
最小分类错误概率怎么计算?
先假设决策树对样本的分类有K个类。(类1,类2,,,,类k)
:T表示节点T,k表示节点T属于第k类,P是概率。
N(T): 表示在节点T中的样本个数; :表示在节点T中,属于类别k的样本个数
使用贝叶斯思维,考虑先验概率::在节点T处,属于类别k的先验概率
m:表示先验概率对后验概率的影响。
一个节点只属于一类,节点T属于类别k的概率:;节点T不属于类别k的概率:1 —
Error(T)是关于m的一个函数。 m是需要选出来的,不是指定的。
为方便讲解例子,现在指定先验概率,即样本属于每一类别的概率是相同的,
m= K;
接着,用这个Error(T)来演示:
计算步骤:
现考虑T5是否可以剪掉?
决策树对样本实例就分为两类:正 、负。 故K=2
5.5.2--4后剪枝:基于错误剪枝(EBP:error base)
误判个数怎么算? 其实这里的误判个数是取的误判上界,且是给定一定的置信水平下求出来的。
假设对于一个节点T:样本个数是N(T), 误判个数是e(T);
误判率:从二项分布到正态分布连续性修正:
一般会通过表格给我们几个 固定的上分位数,若你要使用的不是表格那几个,就用线性插值求。
在给定α,和 下,误判上界就很容易求了。就差观察决策树得到e(T) , N(T)
CF:置信水平,默认是25%
L是目标子树的叶子节点个数。
5.5.2--5后剪枝:代价-复杂度剪枝(CCP: COST COMPLEXITY)
C(T): 代价,T这棵树在训练集中的预测误差(体现T的拟合程度)
|T| ; T这棵树的叶子节点个数 (一棵树的叶子节点越多代表这模型越复杂,表示T的复杂度,体现T的泛化能力)
α:惩罚项系数,α>=0,调节预测误差和模型复杂度的平衡,平衡模型的拟合能力和泛化能力
t=1,,,|T|。 每一个t,都是T这颗子树的叶子节点。
:每个叶子节点的经验熵
每个叶子节点的权重:Wi
对于一个训练集而言,N是固定的,所以权重Wi=Nt/N 中的N可略去。
具体步骤: