第4章 决策树
1. 基本流程
1.1. 决策树是一种基本的分类与回归方法。
- 决策树分类
sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,
min_impurity_split=None, class_weight=None, presort=False)
- 决策树回归
sklearn.tree.DecisionTreeRegressor(criterion='mse', splitter='best', max_depth=None, min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0,
min_impurity_split=None, presort=False)
1.2. 决策树是基于树结构来进行决策的。
一棵决策树包含一个根结点、若干个内部结点和若干个叶结点。
叶结点对应于决策结果(类别); 每个非叶结点对应一个测试属性;
有向边代表了属性值。
每个结点包含的样本集合根据属性测试被划分到子节点中;
根节点包含样本全集;
1.3. 树的生成
构建根节点,选择最优特征。按照特征划分子集,继续选择新的最优特征,直到没有合适特征或者全部被正确分类。
1.4. 决策树的构造是一个递归的过程,有三种情形会导致递归返回:
- (1)当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;
- (2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;
- (3)前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。
1.5. 决策树学习算法
1.6. 决策树学习通常包括3个步骤:
- 特征选择(划分选择)、决策树生成、决策树剪枝。
2. 划分选择
2.1. 决策树学习的关键
如何选择最优化分属性。希望决策树的分支结点所包含的样本尽可能同属于同一类,即结点的“纯度”越来越高。通常特征选择的指标有:ID3、C4.5和CART
2.2. 信息增益(ID3)
2.2.1. 信息熵
度量样本集合纯度最常用的一种指标
假定当前样本集合D中第k类样本所占比例为
p
k
(
k
=
1
,
2
,
…
,
∣
Y
∣
)
p_k(k=1,2,…,|\mathcal Y|)
pk(k=1,2,…,∣Y∣),则D的信息熵定义为:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
Y
∣
p
k
log
2
p
k
Ent(D)=-\sum_{k=1}^{\vert \mathcal Y \vert}p_k \log_2p_k
Ent(D)=−k=1∑∣Y∣pklog2pk
2.2.2. 信息增益
假设离散属性
a
a
a有
V
V
V个可能的取值
{
a
1
,
a
2
,
.
.
.
a
V
}
\{ a^1,a^2,...a^V\}
{a1,a2,...aV},若使用
a
a
a对样本集
D
D
D进行划分会产生
V
V
V个分支结点。
v
v
v代表第
v
v
v个分支结点,包含了
D
D
D中所有在属性
a
a
a上取值为
v
v
v的样本,记为
D
v
D^v
Dv
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
Gain(D,a)=Ent(D)-\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v)
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
- 信息增益对取值数目较多的属性有所偏好。
2.2.3. ID3
ID3算法对训练数据集(或子集)D,计算其每个特征的信息增益,比较它们的大小,选择信息增益最大的特征。
课后题4.3答案:试编程实现基于信息熵进行划分选择的决策树算法,并为表4.3中数据生成一棵决策树。并加入了对连续值的处理
2.3. 增益率/信息增益比(C4.5)
2.3.1 定义
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)
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
log
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∣
I
V
(
a
)
IV(a)
IV(a)称为属性
a
a
a的“固有值”
增益率对取值数目较少的属性有所偏好。
2.3.2. C4.5
C4.5算法不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。这个地方很多博客的代码是不对的,他们直接选择增益率最大的属性。有可能分子分母都很小得到的增益率最高,这样是不对的。
2.4. 基尼系数(CART)
- 数据集D的基尼值:
G i n i ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ = ̸ k p k p k ′ = 1 − ∑ k = 1 ∣ Y ∣ p k 2 Gini(D)=\sum_{k=1}^{|\mathcal Y|}\sum_{k'=\not k}p_kp_{k'}=1-\sum_{k=1}^{|\mathcal Y|}p_k^2 Gini(D)=k=1∑∣Y∣k′≠k∑pkpk′=1−k=1∑∣Y∣pk2
G i n i ( D ) Gini(D) Gini(D)反映了从数据集 D D D中随机抽取两个样本,其类别标记不一致的概率。 基尼值越小,数据集的纯度越高。 - 属性a的基尼系数
G i n i ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini(D,a)=\sum_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v) Gini(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
选择那个使得划分后基尼指数最小的属性作为最优化分属性。
3. 剪枝处理
剪枝是决策树学习算法对付“过拟合”的主要手段
3.1. 预剪枝
- 预剪枝是在决策树生成的过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
- 预剪枝容易欠拟合
3.2. 后剪枝
- 后剪枝是先从训练集生成一颗完整的决策树,然后自底向上对非叶结点进行考察点,若将该结点对应的子树替换为叶节点能带来决策树泛化性能的提升,则将该子树替换为叶结点。实际情况性能保持不变,一般也会剪枝,因为根据奥卡姆剃刀准则,简单的模型更好。
4. 连续与缺失值
4.1. 连续值处理
4.1.1 连续属性离散化:二分法
给定样本集D与连续属性a,
1、首先将属性a的n个不同取值,从小到大进行排序,记为
{
a
1
,
a
2
,
.
.
.
,
a
n
}
\{a^1,a^2,...,a^n\}
{a1,a2,...,an}
2、然后基于划分点
t
t
t,将D分为子集
D
t
−
D_t^-
Dt−(≤t)和
D
t
+
D_t^+
Dt+(>t),划分点
t
t
t是所有相邻属性值的平均值(n-1个)
划分点集合:
T
a
=
{
a
i
+
a
i
+
1
2
∣
1
≤
i
≤
n
−
1
}
T_a=\left\{\frac{a^i+a^{i+1}}{2}\mid1\leq i\leq n-1 \right\}
Ta={2ai+ai+1∣1≤i≤n−1}
4.1.2 连续属性离散化之后的信息增益
G a i n ( D , a ) = max t ∈ T a   G a i n ( D , a , t ) = max t ∈ T a   E n t ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) Gain(D,a)=\max_{t\in T_a}\,Gain(D,a,t) \\=\max_{t\in T_a}\,Ent(D)-\sum_{\lambda\in \{-,+\}}\frac{| D_t^{\lambda} |}{|D|}Ent(D_t^{\lambda}) Gain(D,a)=t∈TamaxGain(D,a,t)=t∈TamaxEnt(D)−λ∈{−,+}∑∣D∣∣Dtλ∣Ent(Dtλ)
- 选择使 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t)最大的划分点。
- 注意:和离散属性不同,若当前结点划分属性为连续属性,该属性还可以作为其后代结点的划分属性。
4.2. 缺失值处理
4.2.1 需要解决的两个问题
1)如何在属性值缺失的情况下选择最优划分属性?
2)给定划分属性,如何划分缺失该属性值的样本?
为每个样本x赋予一个权重
w
x
w_x
wx:
4.2.2. 解决方法
- 1)选择最优划分特征:
其中,
E n t ( D ~ ) = − ∑ k = 1 ∣ Y ∣ p ~ k log 2 p ~ k Ent(\tilde D)=-\sum_{k=1}^{|\mathcal Y| } \tilde p_k\log_2\tilde p_k Ent(D~)=−k=1∑∣Y∣p~klog2p~k
(在无缺失值得样本集上进行计算) - 2)给定划分属性,对缺失数据的某个样本进行划分:
- 若样本x在划分属性a上的取值已知,则将x划入到取值对应的子结点,且样本权值在子结点中保持为 w x w_x wx。
- 若样本x在划分属性a上的取值未知,则将该样本以不同的概率划入到所有子结点中,该样本在分支结点中的权重变为 r ~ v ⋅ w x \tilde r_v\cdot w_x r~v⋅wx。
5. 多变量决策树
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
记录自己的学习过程,,如有不对的地方还请指教!如果你喜欢欢迎点赞、评论O(∩_∩)O