Decision Tree

May 20, 2016


1. Intuition

决策树是一种分类算法,其模型为树结构

每个非叶节点代表一个测试,而每个叶节点都与一个类别相关

其对单个样本的分类过程从最上的根节点开始,根据测试结果往下走,直到走到叶节点

这样这个样本就被决策树预测了类别,一个例子如下

2. 构建流程

大部分决策树构建算法都是自顶向下构建的

根节点处理全部的数据,并将其划分为多个子集,传给其子节点

子节点处理其接收到的数据,再次划分,这样递归下去完成决策树的构建

其单个节点的构建详细流程如下

  • 接收本节点的数据D
  • if D中所有的数据都是一个类别
    • 将本节点设定为叶节点,并将其类别标注为D的类别
    • 结束
  • 使用某种分裂规则将D划分为若干个子集
  • 对所有的子集
    • 创建子树

某种分裂规则是指选择某个特征,并以该特征的值作为划分数据子集的依据

通常这种准则,应使得各个子集尽可能只有一个类别

3. 分裂规则

这里介绍三个比较常见的分裂依据,分别为信息增益、增益率、基尼指数

设数据D中的类别有m个,第i个类别以Ci表示

Ci,DDCi类数据的集合

3.1 信息增益

ID3使用信息增益作为分裂依据

数据D的熵为

Entropy(D)=mi=1pilog2(pi)

pi表示类别i在数据D中的概率,可以设定为

pi=|Ci,D||D|

假定选择特征A对数据D进行划分

先假定A是离散特征,在数据DA的所有可能取值有v个,第i个取值为av

于是很自然地划分出v个子集,第i个子集称为Di

划分后的熵可以定义为

EntropyA(D)=vj=1|Dj||D|Entropy(Dj)

信息增益定义为

Gain(A)=Entropy(D)EntropyA(D)

显然,Gain(A)表示通过划分,不确定性减少的程度

于是我们要选择使得信息增益最大的特征进行划分

上面考虑的是A是离散值的情况下

实际上,在A是连续值的情况下,在分裂时是选择一个阈值

特征的值小于等于阈值的划分为一个子集,大于阈值的划分为另一个子集

3.2 增益率

ID3有一个缺点,倾向于划分出更多的子集。

极端情况下,将数据D划分为一条数据一个子集,但是这种划分对于分类并没有用

C4.5是ID3的后继者,引入一个参数用于改善这种缺点

引入一个称为split information的值

对特征A做划分的split information为

SplitInfoA(D)=vj=1|Dj||D|log2(|Dj||D|)

容易发现,这其实是个熵,划分出的子集个数越多,这个split information越大

而增益率定义为

GrainRate(A)=Gain(A)SplitInfoA(D)

选择最大增益率的特征进行分裂,这种方法就是C4.5

3.3 基尼指数

CART使用基尼指数作为划分依据

基尼指数度量数据D的不纯度(数据纯意味这所有数据都是一个类别)

Gini(D)=1mi=1p2i

CART对于离散值和连续值特征都是划分为两个子集

设划分为两个子集D1D2

划分后的基尼指数设定为

GiniA(D)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

选择GiniA(D)最小的特征进行分裂,这种方法就是CART