《统计学习方法》笔记05:决策树模型

来源:互联网 发布:新概念2和3的区别 知乎 编辑:程序博客网 时间:2024/06/03 12:31

《统计学习方法》笔记05:决策树模型

决策树模型:由训练数据集估计条件概率模型。

学习算法:ID3,L4.5,CART三种。

5.1 预备知识

1. 熵

熵可用来衡量一个随机变量的概率分布的不确定性情况。当随机变量在各取值上概率相同时,熵最大。熵反映了分布的不确定性程度。当分布中各取值概率相同时,不确定性最大,则熵最大。

举例:巴西,德国,中国三国足球联赛,巴西和德国取胜概率远大于中国,不确定性小,可以看做“熵”小;而巴西,德国,阿根廷联赛,三者取胜概率相近,不确定性大,可以看做“熵” 大。计算公式如:

H(X)=i=0npilog(pi)

随机变量X共有n种取值,每种取值上的概率与对数乘积的总和。
当各取值上概率相同时,熵最大:
0H(X)log(n)

推导如下:
H(X)i=0n1nlog1n=(log1logn)=logn

当随机变量只取2个值时,当取值概率为0/1时,熵为0,此时完全没有不确定性。

2.条件熵

如上,熵可反映随机变量X的概率分布的不确定性。有时候,我们还获得了一些和X有关其他信息,将有助于确定X在某些取值上的概率变化,这时X概率分布的不确定性可能会降低。已知其他信息的情况下,X的熵就成了条件熵。

举例:巴西,德国,阿根廷联赛,三者取胜概率相近,不确定性大,“熵” 大;但我们得知巴西全体队员拉肚子,那其获胜可能性变小。球赛整体熵会变小。在这种情况下,就是条件熵。

已知随机变量(X,Y)的联合概率分布为:

P(X=xi,Y=yj)=pij

条件熵H(Y|X)表示已知X情况下,Y的分布的不确定性。计算如下:
H(Y|X)=i=0np(X=xi)H(Y|X=xi)

X的取值有n种。

2. 信息增益

信息增益:得知了X信息,使得类Y的信息不确定性减小的程度。也叫作互信息(mutual information),决策树中的信息增益等价于训练集中的类与特征的互信息。

在监督学习中,特征A对训练集D的信息增益:

g(D,A)=H(D)H(D|A)

很明显,信息增益越大,说明不确定性减小的程度越大,该特征越强。该特征的条件熵很小。

算法:求特征A的信息增益

特征A,有n个取值,每个取值下的样本个数为Dn,其和为样本总数。

输出:g(D,A)

(1)计算经验熵H(D)。当从数据估计中得到概率时,称为经验熵。

H(D)=k=1K|Lk||D|log2|Lk||D|

(2)计算经验条件熵H(D|A):
H(D|A)=i=1n|Di||D|H(Di)

H(Di)=k=1K|Dik|Dilog2|Dik|Di

(3)计算特征A的信息增益gain:
g(D,A)=H(D)H(D|A)

信息增益越大,说明不确定性减小的程度越大,该特征越强。该特征的条件熵很小。举例:银行给某个用户是否发放贷款,特征有用户性别,用户收入等。一般的,发放结果主要看用户的偿还能力,和性别关系不大。

这里写图片描述

在性别的不同取值(男1、女2)上,发与不发的情况都是各占一半,此时性别的条件熵很大,信息增益就很小;

这里写图片描述

而在用户收入特征上,在收入不同取值(低1,高2)上,收入高时发放比例很高,收入低时发放比例很低,此时收入的条件熵就很小,信息增益会很大。

则由信息增益知道,收入就是个强特征。

5.2 决策树的生成

1. ID3算法

决策树可看做是if-then-else的集合,以树的形式来看,每个节点是一个判断的特征,根据取值去左子树或者右子树,达到分类的目的。

ID3算法在各个节点上,根据信息增益进行特征选择,递归地构建出决策树。相当于用极大似然法进行概率模型的选择。

对数据集D,在特征集A中选择一个由最大信息增益的特征,可将D分为若干自己Di,以Di中有实例数最大的类为标记,构建子节点。对第i个节点,以Di为训练集,AAg为特征集,迭代调用上述过程,直至完成。

终止条件:特征集为空;或某个节点上同属一类,不用再分;或信息增益值小于Epsilon,不值得去分。

2. L4.5算法

L4.5算法和ID3算法不同之处在于:运用信息增益比来选择特征。其余相同。

gR(D,A)=g(D,A)HA(D)=H(D)H(D|A)HA(D)

HA(D)=i=1n|Di|Dlog2|Di|D

3.为什么采用信息增益比?

答:以信息增益划分时,存在偏向于选择取值较多的特征的问题。信息增益比可以对这个问题进行校正。《统计学习方法》P63页。

这个答案没有一定内功,初次悟不到。

举例:上面发贷款的样本中,假设每条样本还有一个用户的身份证号。如果将其作为特征,那么每一个身份证号都可以将样本完全分开,形成了一颗叶子数量很多的,深度只有两层的数。这样计算的身份证号特征的条件熵非常小几乎为0,信息增益值特别大,接近H(D)。但显然这个特征没什么意义。

导致这个偏差的原因就是:该特征可以选择的值过多,每个样本基本一个值,则就是一个类。解决办法:对树分支过多的情况进行惩罚。因此我们将特征A的内部信息计算出来:

HA(D)=i=1n|Di|Dlog2|Di|D

然后放在分母位置,该特征上的取值越分散(最极端就是每个样本都有一个值),值越大,最大是log(n),则分母越大,则整体信息增益比越小。起到一定校正作用。

有一个实际计算出的例子,非常直观:
http://blog.csdn.net/olenet/article/details/46433297

5.3 决策树的剪枝

1.剪枝策略

ID3与L4.5生成的树容易过拟合。

原因:学习时总考虑如何提高训练集的准确性。导致树生成后较复杂。

解决:过拟合用结构风险最小化来解决,可加上正则项。考虑树的复杂度,对生成的树简化。该操作称为剪枝(pruning)。

设树T的叶节点个数为|T|,每个叶节点即为沿从root的某条路径条件下的一类。t是树T的叶节点,该节点有Nt个样本点,其中属于各个分类的点为Ntk个。

该叶节点的经验熵为:

Ht(T)=k=1KNtkNtlog2NtkNt

该节点中分类越纯净,则条件熵越小。说明该节点越强。

我们可定义损失函数,通过极小化损失函数来选择最优树。

Lα(T)=t=1|T|NtHt(T)+α|T|

Lα(T)=L(T)+α|T|

第一项反映对训练集的拟合程度,第二项反映模型复杂度。等价于正则化的极大似然估计。

L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。

L2范数是指向量各元素的平方和然后求平方根。老忘这俩的计算方式。

2.剪枝算法

算法:树的剪枝

  1. 输入:生成的树T,参数α

  2. 输出:子树Tα

  3. 过程:

(1)计算每个节点的经验熵。注意是所有节点,虽然我们考虑叶节点比较,但因为不断剪枝时,每个节点都可能变为叶节点。所以计算全部存起来。

(2)递归地从叶节点向上收缩。设有一组叶节点回缩前后的整体树分别为TB,TA,对应的损失函数如果是:

Lα(TA)Lα(TB)

剪枝后损失函数更小,则说明应该剪枝,将父结点变为新的叶节点。

(3)返回(2)直至不能继续为止。得到损失函数最小的子树Tα

注意:每次考虑两个树的损失函数的查,计算可以在局部进行,所以剪枝算法可以由一种动态规划的算法实现。

5.4 CART算法

全称:classification and regression tree(1984年诞生)

即可用于分类,也可用于回归。由三步组成:特征选择,生成树,剪枝。

CART树内部假设为二叉树,每个结点为2分支,是与否。

对回归树:平方误差最小化
对分类树:基尼指数-Gini index

1. 回归树的生成

回归问题,意味着输出是连续值。Y为连续变量。

一个回归树对应特征空间的一个划分,每个划分单元上输出一个值。设现生成了M个空间R1,R2...,Rm,对应输出值为L1,L2...,Lm

回归树模型表示为:

f(x)=m=1MLmI(xRm)

我们用平方误差表示回归树对训练集D的预测误差:
L=xiRm(yif(xi))2

每个区域上的均值为:
Lm^=ave(yi|xiRm)

如何对空间进行划分?答:采用启发式办法。

选择切分变量和切分值:特征的第j个变量,以及其取值s

可以将空间划分为两个子空间:

R1(j,s)={x|x(j)s}

R2(j,s)={x|x(j)>s}

求解在这个划分下的最小值:
minj,s[minc1xiR1(yic1)2+xiR2(yic2)2

我们知道,[ ]括号内的公式,在L1L2取各自区域输出值的平均值时达到最小。也就是说一旦j和s给定,括号内最小值可以确定。

这样,我们可以遍历j和s,对每一组情况下,算出[ ]最小值。在所有j,s组合情况下找出一个最小值。此时的j和s就是我们需要的。第一次划分后,对两个子区域迭代这样做,就可以将空间不断细化。

算法:最小二乘回归树生成算法
过程:
在训练集的输入空间中,递归的将每个区域划分为两个子区域,并决定每个子区域的输出值,构建二叉决策树。对每个区域逐个进行:
(1)选择最优切分变量j和切分点s。求解:

minj,s[minc1xiR1(yic1)2+xiR2(yic2)2

遍历js,对某个j扫描s,使得上式最小的对即为所求。

(2)用选好的(j, s)分区,并决定各分区的值。

R1(j,s)={x|x(j)s}

R2(j,s)={x|x(j)>s}
每个区域上的均值为:
Lm^=ave(yi|xiRm)
m=2,二分类。

(4)将空间划分为m个区域,生成最小二乘回归决策树:

f(x)=m=1MLmI(xRm)

2. 分类树的生成

对分类问题,随机变量在每个类上都有概率。以数据集中各类个数比上总数,极大似然估计,得到离散的概率分布。

基尼系数:

Gini(p)=k=1Kpk(1pk)=1k=1Kpk2

和熵在大小定性上有点像。单增*单减,值在p=0.5最大。

对于样本集合D,基尼指数为

Gini(p)=1k=1K|Lk||D|2

Lk是D中第k类的个数,K是类别总数。

若样本集合D根据特征A是否取a被划分为D1,D2,则在特征A的条件下,集合D的基尼指数为

Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

算法:CART生成算法
过程:
(1)对D,计算现有特征对D的基尼系数。对每个特征A,对其可能取值将数据集分为D1,D2,利用上式计算A=a的基尼系数。

(2)对所有A,及其取值a中,选择基尼系数最小的对应的特征及取值,生成两个子节点。

(3)对两个子节点递归调用(1)(2),直至停止条件(节点中样本个数小于预定个数阈值;或者样本集的基尼系数小于预定系数阈值)

3. 剪枝算法

这里写图片描述

对内部结点t和其子树Tt分析:

α=0时,Lα(Tt)Lα(t)

α增大至某值时,Lα(Tt)=Lα(t)

α继续增大,Lα(Tt)>Lα(t)

α增大至某值时,Lα(Tt)=Lα(t)。但此时t节点少,则可以剪枝掉Tt。此时有:

L(Tt)+α=L(t)+α

α=L(t)L(Tt)|Tt|1

也就是说,当α达到此值时,正则项较大,此时子树的损失函数将开始大于其父结点处的损失函数了,那就没有分成子树的必要了,可以剪枝。

(1)为此,我们需要对生成的初始树T0中,对每个内部结点,计算:

g(t)=L(t)L(Tt)|Tt|1

我们将α从0开始慢慢增加,则T0g(t)最小的Tt,将首先达到可剪枝的标准,剪枝后将得到T1。将α继续增加,则原T0g(t)第二小的Tt,也将达到可剪枝的标准,剪枝后将得到T2,…,当α不断增大,不断有分枝达到可剪枝的标准,当其大到一定程度,分枝将全部被剪掉,最终只剩下根节点。

即我们可得到两个序列:

[0,α1,...,αn]

[T0,T1,...,Tn]

(2)剪枝得到的子树嵌套序列中,我们需要选出最优子树。

从前往后,子树逐渐“凋零”直至根节点,后期将越来越欠拟合;

从后往前,子树逐渐“叶茂”直至原始生成树,越来越过拟合。

选取独立验证集,测试各子树的误差或者基尼系数,值最小的决策树Tk,αk将是最优子树。

算法:CART剪枝算法
输入:生成树T0;输出:最优子树
过程:
(1)令k=0,T=T0,α=;

(2)自下而上的对内部结点计算

g(t)=L(t)L(Tt)|Tt|1

Lα(T)=t=1|T|NtHt(T)+α|T|

(3)对g(t)=α的内部结点,剪枝,并对新的叶节点t以多数表决法决定其类别,得到子树。

(4)设k=k+1αk=α,Tk=T;

(6)采用交叉验证法在子树序列中选择最优子树即可。

总结

(1)分类决策树模型,是表示基于特征对实例进行分类的树的结构。决策树可换成一个if-then规则的集合。也可看做是定义在特征空间划分上的类的条件概率分布。

(2)决策树学习的目的是构建一个与训练集拟合很好,并且复杂度小的决策树。从可能的决策树中直接选取最优决策树是NP完全问题,实际中采用启发式方法学习次优的决策树。

(3)学习算法有ID3,C4.5,CART。学习过程包括:特征选择,生成树,剪枝。特征选择目的在于选择对训练集能够分类的特征。特征选取的准则三种算法分别是信息增益最大,信息增益比最大,基尼系数最小。从根节点开始,递归产生决策树,分别对子树调用过程,不断选取局部最优特征。

(4)由于生成的决策树存在过拟合问题,需要剪枝。从生成的树上剪掉一些叶节点或者叶节点以上的子树,将其父节点或者根节点作为新的叶节点,简化生成的决策树。


参考文献

[1]李航,统计学习方法。

2017-7-28第一版。

原创粉丝点击