学习笔记35-决策树(Decision Tree)

来源:互联网 发布:linux 7 路由跟踪 编辑:程序博客网 时间:2024/06/10 14:47

决策树

下面以一个简单的二分类任务为例,决定一个西瓜是好瓜还是坏瓜。
首先西瓜有三个属性:色泽,根蒂,敲声
决策树是基于树结构来进行决策的,也就是通过一系列的判断,最终得到结果。如下图,对一个瓜,先看色泽,如果不是青绿色,说明不是好瓜,判断结束。否则,继续看它的根蒂,如果根蒂不是蜷缩的,说明不是好瓜,判断结束。否则,接着看它的敲声,如果敲声不是浊响,说明不是好瓜,判断结束。否则,是好瓜,判断结束。
决策树
其实可以看成是一些条件判断语句的集合(if-then规则集合)。
由根结点到叶结点的每一条路径都是一条规则,路径上的内部结点的特征就是规则的条件,叶结点的类对应着规则的结论。
if-then规则有一个重要的性质:互斥且完备。
也就是说,每一个实例都有且只有一条路径或者是一个条件覆盖。

条件概率分布

决策树上的规则还可以是条件概率分布,也就是每次把实例分到条件概率大的那一类去。
比如一个二分类任务,输出变量Y只有两个取值+1和-1,输入变量为X。
如果P(Y=+1|X=c)>0.5就认为这个实例c属于正类,否则属于反类。

特征空间划分

其实决策树可以看成是对特征空间的划分,比如下图的二分类任务,数据有两个维度,x(1)和x(2),要把X分到两个类别,正类+1和反类-1.
特征空间划分
接下来就是决策树的基本步骤:
1. 特征选择
2. 决策树的生成
3. 决策树的修剪

特征选择

特征选择的目的就是选取对训练数据具有分类能力的特征。
特征选择的准则是信息增益(information gain)或者信息增益比。
这里需要先讲一个熵(entropy)的概念。
1. 熵
熵表示随机变量不确定性的度量。
假设X是一个取有限个值的离散随机变量,其概率分布为:

P(X=xi)=pi, i=1,2,3,…,n

则随机变量X的熵定义为:
熵定义
如果pi=0,定义0log0=0。
如果log以2为底,熵的单位是比特(bit);
如果log以e为底,熵的单位是纳特(nat)。
从公式可以看出,熵只跟X的分布有空,跟X的取值无关,所以也可以把X的熵定义为H(p):
熵定义
熵越大,随机变量的不确定性就越大。
2. 条件熵
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。定义为:
条件熵
这里,pi=P(X=xi) i=1,2,3,…,n
如果上面的概率p是由数据估计(特别是极大似然估计)得到的,那么对应的熵称为经验熵经验条件熵
3. 信息增益(information gain)
给定训练数据集D和特征A,经验熵H(D)表示对数据集D进行分类的不确定性,而经验条件熵H(D|A)表示在特征A已经给定的条件下,对数据集D进行分类的不确定性。
信息增益定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即:
信息增益
可以理解为,由于特征A而使得对D分类的不确定性减少的程度。
显然信息增益大的特征具有更强的分类能力。
4. 信息增益比(information gain ratio)
信息增益比
信息增益比

决策树的生成

1. ID3算法
ID3算法的核心是对决策树上每个结点采用信息增益准则选择特征,递归地构建决策树。
从根结点开始:
1. 对结点计算所有可能的特征的信息增益
2. 选择信息增益最大的特征
3. 由该特征的不同取值建立子结点
4. 对子结点递归地调用上述方法
具体如下:
ID3算法
输入:训练数据集D,特征集A,阈值e;
输出:决策树T
(1)若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T
(2)若A=空集,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
(3)按照以下方法计算A中各特征对D的信息增益,选择信息增益最大的特征Ag;
1. 这里写图片描述
2. 这里写图片描述
3. 这里写图片描述
(4)如果Ag的信息增益小于阈值e,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T
(5)否则对Ag的每一可能值ai,依Ag=ai将D分割成若干非空子集Di,将Di中实例数最大的类Ck作为该结点的类标记,返回T
(6)对第i个子结点,以Di为训练集,以A-{Ag}为特征集,递归地调用(1)到(5)步,得到子树Ti,返回子树Ti。
2. C4.5算法
C4.5算法与ID3算法类似,只是在生成决策树的过程中,用信息增益比来选择特征。

决策树的修剪

剪枝的目的是防止过拟合,对决策树进行简化。
剪枝从已生成的树上裁剪掉一些子树或者叶结点,并将其父结点作为新的叶结点,从而简化模型。

CART算法

分类与回归树(classification and regression tree,CART)是一种经典的决策树算法。
它主要分两步:
1. 决策树生成
2. 决策树剪枝