决策树(decision tree)是一种基本的分类与回归方法。
决策树模型呈树形结构,在分类过程中,表示基于特诊对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。
其主要优点是模型具有可读性,分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型。
预测时,对新的数据,利用决策树模型进行分类。
决策树学习通常包括三个步骤:
- 特征选择
- 决策树的生成
- 决策树的修剪
决策树与if-then规则
可以将决策树看成一个if-then规则的集合,将决策树转换成if-then规则的过程如下:由决策树的根结点到叶节点的每一条路径构建一条规则;路径上内部结点的特征对应着规则的条件,而叶节点的类对应着规则的结论,决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。这就是说,每一个实例都被一条路径或一个规则所覆盖,而且只被一条路径或一条规则所覆盖。这里所谓覆盖指的是实例的特征与路径上的特征一致或实例满足规则的条件。
决策树与条件概率分布
决策树还可以表示给定特征条件下类的条件概率分布。这一条件概率分布定义在特征空间的一个划分上。将特征空间划分为互不相交的单元或区域,并在每个单元定义一个类的概率分布,就构成了一个条件概率分布。决策树的一条路径对应于划分中的一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。假设X表示为特征的随机变量,Y表示类的随机变量,那么这个条件概率分布表示为P(Y|X)。各叶节点上的条件概率往往偏向某一个类,即属于某一类的概率较大。决策树分类时将该结点的实例强行分到条件概率大的那一类去。
决策树模型
输入:训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\{(x_1, y_1), (x_2, y_2), ..., (x_m, y_m)\} D={(x1,y1),(x2,y2),...,(xm,ym)}, 属性集 A = { a 1 , a 2 , . . . , a d } A=\{a_1, a_2, ..., a_d\} A={a1,a2,...,ad}
决策树是一个递归过程,有三种情况会导致递归返回:
- 当前节点包含的样本属于同一类别,无需划分
- 当前属性集为空或所有样本在所有属性上取值相同,无法划分
- 当前节点包含的样本集合为空,无法划分
由上述算法的伪代码可以看出,决策树构造最重要的环节就是如何选择划分的属性:
- 信息增益(ID3)
- 信息增益率(C4.5)
- 基尼系数(CART)
ID3
信息熵:
样本集合D中第i类样本所占比率为 p i , ( i = 1 , 2 , . . . , n ) p_i, (i=1, 2, ..., n) pi,(i=1,2,...,n),则该样本的信息熵 H ( D ) = − ∑ i = 1 n p i ∗ l o g 2 ( p i ) H(D)=-\sum_{i=1}^np_i*log_2(p_i) H(D)=−i=1∑npi∗log2(pi)
属性A对样本D进行划分后的信息熵:
假设属性A有V个可选值,则a将D切成V个子样本D1,D2,…,DV。则划分后的信息熵
H
(
D
∣
A
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
H
(
D
v
)
H(D|A)=\sum_{v=1}^V\frac {|Dv|} {|D|}H(Dv)
H(D∣A)=v=1∑V∣D∣∣Dv∣H(Dv)
其中
∣
D
v
∣
|Dv|
∣Dv∣表示子样本
D
v
Dv
Dv的个数
对样本D划分属性A的信息增益:
G
a
i
n
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
Gain(D, A)=H(D) - H(D|A)
Gain(D,A)=H(D)−H(D∣A)
每次划分我们都选择信息增益最大的那个属性
C4.5
实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好带来的不利影响,C4.5算法使用增益率来进行属性划分
属性a的固有值: I V ( A ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(A)=-\sum_{v=1}^V\frac {|D_v|} {|D|}log_2\frac {|D_v|} {|D|} IV(A)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
属性a的可能取值数目越多,则固有值越大。
增益率: G a i n _ r a t i o ( D , A ) = G a i n ( D , A ) I V ( A ) Gain\_ratio(D, A)=\frac {Gain(D, A)}{IV(A)} Gain_ratio(D,A)=IV(A)Gain(D,A)
需要注意的是,增益率准则对可取值数目较少的属性有所偏好,所以C4.5算法不是直接取增益率最大的候选划分属性,而是:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的
CART
数据集D的基尼系数:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
f
p
k
2
Gini(D)=1-\sum_{k=1}^fp_k^2
Gini(D)=1−k=1∑fpk2
直观来说,基尼系数反映了从数据集中抽取两个样本,其类别不一致的概率。因此,基尼系数越小,则数据集纯度越高
G i n i _ i n d e x = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index=\sum_{v=1}^V\frac {|D_v|} {|D|}Gini(D_v) Gini_index=v=1∑V∣D∣∣Dv∣Gini(Dv)
我们在选属性时,选择那个使得划分后基尼指数最小的属性作为最优属性划分
数据集D的基尼系数:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
f
p
k
2
Gini(D)=1-\sum_{k=1}^fp_k^2
Gini(D)=1−k=1∑fpk2
直观来说,基尼系数反映了从数据集中抽取两个样本,其类别不一致的概率。因此,基尼系数越小,则数据集纯度越高
G i n i _ i n d e x = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index=\sum_{v=1}^V\frac {|D_v|} {|D|}Gini(D_v) Gini_index=v=1∑V∣D∣∣Dv∣Gini(Dv)
我们在选属性时,选择那个使得划分后基尼指数最小的属性作为最优属性划分
剪枝处理 TODO
剪枝是决策树学习算法对付过拟合的主要手段。
剪枝可分为预剪枝和后剪枝两种基本策略。
- 预剪枝:预剪枝是指在决策树的生成过程中,对每个节点在划分前后进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶节点。
- 后剪枝:先从训练集生成一颗完整的决策树,然后自底而上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树的泛化性能提升,则将该子树替换为叶节点。
连续值与缺失值
连续值处理
对于连续的属性,可取值不可数,因此不能直接用连续属性的取值来对节点进行划分。此时就需要将连续属性离散化。最简单的策略就是二分法(C4.5采取的就是这种机制):
- 将连续属性a的所有n个取值升序排列
- 相邻两个取值的均值可作为候选划分点,则有n-1个候选划分点
- 从这n-1个候选划分点选一个最好的:计算这n-1个候选划分点划分后的信息增益,选择信息增益最大的那个候选划分点作为属性a的划分点
缺失值处理
现实任务中,经常会遇到数据不完整的情况,尤其是属性较多的时候,会有大量样本出现缺失值。
我们需要解决两个问题:
- 如何在属性缺失的情况下进行划分属性选择
- 给定划分属性,如何对带缺失属性的样本进行划分
对问题一:
给定训练集D和属性a,计算D中属性a不缺失的子集D’所占比例p
G a i n ( D , a ) = p ∗ G a i n ( D ′ , a ) Gain(D, a) = p * Gain(D', a) Gain(D,a)=p∗Gain(D′,a)
G a i n ( D ′ , a ) Gain(D',a) Gain(D′,a)则把D’当成D,按之前的标准来计算即可
对问题二:
若样本x在属性a上的取值未知,则将x同时划入所有子结点,且样本权值调整为r*w, 其中r为D’中各个属性个数的比例,w为样本在当前子结点的权值(初始权值均为1)
多变量决策树
OC1等 TODO
增量学习 TODO
- ID4
- ID5R
- ITI