西瓜书决策树笔记
Posted MathPie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了西瓜书决策树笔记相关的知识,希望对你有一定的参考价值。
决策树Decision Tree
文章目录
基本知识
一类常见的机器学习方法
决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。
决策过程的最终结论对应了我们所希望的判定结果。决策过程中提出的每个判定问题都是对某个属性的“测试”
一般的,一棵决策树包含一个根结点,若干个内部结点和若干个叶结点,叶结点对应了决策结果,其他结点对应于一个属性测试。
每个结点包含的样本集合根据属性测试的结果被划分到子结点中,根结点包含样本全集。
从根结点到每个叶结点的路径对应了一个判定测试序列
决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
决策树的生成是一个递归过程,有三种情形会导致递归返回(产生叶结点):
- 1
当前结点包含的样本全属于同一类别,无需划分,该叶结点的类别自然就是所有样本属于的那一类 - 2
当前属性集为空,或是所有样本在属性上取值相同,无法划分,该叶结点的类别设定为该结点所包含的样本最多的一类,属于利用该结点的后验分布 - 3
当前结点包含的样本集为空,不能划分,该叶结点的类别采用其父节点所含样本最多的那一类,将父节点的样本分布作为了当前节点的先验分布
划分选择
决策树学习的关键在于如何选择最优划分属性,随着划分的进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,纯度越来越高。
利用信息增益选择最优属性
前置概念:
信息熵:度量样本集合纯度的一种指标
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k p k ( k = 1 , 2 , 3 … … , ∣ y ∣ ) Ent(D)=-\\sum^|y|_k=1p_klog_2p_k ~~~ p_k(k=1,2,3……,|y|) Ent(D)=−∑k=1∣y∣pklog2pk pk(k=1,2,3……,∣y∣)
信息熵越小,D纯度越高
信息增益:划分前的信息熵减去划分后各结点的信息熵之和,表示纯度的提升
G
a
i
n
(
D
,
α
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
Gain(D,\\alpha)=Ent(D)-\\sum^V_v=1\\frac|D^v||D|Ent(D^v)
Gain(D,α)=Ent(D)−∑v=1V∣D∣∣Dv∣Ent(Dv)
D
v
D^v
Dv表示D以某一属性
a
=
a
v
a=a^v
a=av为划分出来的分支结点所包含的样本集合,
∣
D
v
∣
∣
D
∣
\\frac|D^v||D|
∣D∣∣Dv∣表示分支结点所占的权重
ID3(Iterative Dichotomiser 3迭代二叉树三代)决策树,是由 Ross Quinlan于1986年提出的决策树思想方法,是以信息增益为准则来选择划分属性的。
通过比较对不同属性进行本次分支的划分,来找出最大的信息增益,来找到最优划分属性
利用增益率选择最优属性
由于信息增益对可取值数目较多的属性有所偏好(当取值较多时,用该属性划分出的单个分支纯度可能越高,那么这些分支的信息熵可能都比较小,相加后可以得到更小的信息熵之和,进而得到更大的信息增益,简单来说,就是分支越多,信息熵通常越小)
所以,引入了信息增益率来进一步优化。
G a i n r a t i o ( D , α ) = G a i n ( D , α ) I V ( a ) Gain_ratio(D,\\alpha)=\\fracGain(D,\\alpha)IV(a) Gainratio(D,α)=IV(a)Gain(D,α)
I V ( a ) IV(a) IV(a)为属性a的固有值(intrinsic value),属性a的可能取值数目越多,IV(a)的取值通常越大(类比信息熵,这里相当于V越大,属性a所含的信息量通常越大)
但是,信息增益率对可取值数目少的属性有所偏好,因此C4.5算法并不是选择增益率最大的候选划分属性,而是使用了一个启发式,先从候选划分属性中找出信息增益高于平均水平的属性,然后再从中选择增益率最高的
利用基尼指数选择最优属性
CART决策树(Classification and Regression Tree),既可以用于分类问题,也可以用于回归问题。
前置概念:
基尼值:
G
i
n
i
(
D
)
=
∑
k
=
1
∣
y
∣
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
∣
y
∣
p
k
2
Gini(D)=\\sum^|y|_k=1 \\sum_k^' \\neq kp_kp_k^'\\\\~~~~~~~~~~~~~~~~=1-\\sum_k=1^|y|p_k^2
Gini(D)=∑k=1∣y∣∑k′=kpkpk′ =1−∑k=1∣y∣pk2
基尼系数:
G
i
n
i
i
n
d
e
x
(
D
,
α
)
=
∑
v
=
1
∣
D
v
∣
G
i
n
i
(
D
v
)
Gini_index(D,\\alpha)=\\sum_v=1^|D^v|Gini(D^v)
Giniindex(D,α)=∑v=1∣Dv∣Gini(Dv)
基尼值表示从数据集D中随机抽取两个样本,他们的类别不一致的概率,因此Gini(D)越小,D的纯度越高。
基尼指数则是表示对于一个划分属性来说,他所划分的各个分支的纯度表现,基尼指数越小,纯度表现越好。
我们会选择基尼指数最小的属性作为最优划分属性,因为它所划分的各结点纯度表现最好
剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。
在决策树学习过程中,为尽可能正确分类训练样本,节点划分过程不断重复,有时会造成决策树分支过多,导致将一些训练集自身的特点当作普遍特点造成过拟合。因此,可以通过主动剪去一些分支,来减少过拟合的风险。
预剪枝
在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力(对于样本类别判断是否正确的能力)的提升,则停止划分并将当前结点标记为叶结点。
Note:在判断叶结点类别时是在训练集上进行判断的,但是在泛化性能是在验证集上计算的,实际计算中,容易搞混
仅有一层划分的决策树为决策树桩(Decision Stump)
由于分支不能增加泛化性能,但分支再分支却可能增加泛化性能,所以预剪枝可能会造成欠拟合
后剪枝
先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点可以增加泛化性能,那么则替换。
后剪枝决策树通常比预剪枝决策树保留了更多的分支,后剪枝比预剪枝的欠拟合可能性要小,泛化性能更优,但是训练时间开销要更大
连续值处理
我们目前仅讨论了基于离散值属性来生成决策树,但是连续属性我们不能在实际操作中避免,所以我们要在面对连续属性时进行处理。
二分法处理连续属性
C4.5决策树便采用了这一方法
对于一个属性a,在样本集D上出现了
a
1
,
a
2
…
…
a
n
\\a^1,a^2……a^n\\
a1,a2……an共n个取值,我们选定一个划分点t,将D划分为
D
t
−
和
D
t
+
D_t^-和D_t^+
Dt−和Dt+两个集合。
我们首先根据连续属性在样本中出现的值确定划分点的候选集合:
T
a
=
a
i
+
a
i
+
1
2
∣
1
≤
i
≤
i
+
1
T_a=\\\\fraca^i+a^i+12|1\\leq i \\leq i+1\\
Ta=2ai+ai+1∣1≤i≤i+1
之后通过信息增益从候选集合中选出最优的划分点
G a i n ( D , α ) = max t ∈ T a E n t ( D ) − ∑ λ ∈ − , + ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) Gain(D,\\alpha)=\\displaystyle \\max_t \\in T_a Ent(D)-\\sum_\\lambda \\in \\-,+\\ \\frac|D_t^\\lambda||D|Ent(D_t^\\lambda) Gain(D,α)=t∈TamaxEnt(D)−λ∈−,+∑∣D∣∣Dtλ∣Ent(Dtλ)
需注意的是,与离散属性不同,若当前结点划分为连续属性,该属性还可以作为后续结点的划分属性
缺失值处理
现实任务中常会遇到不完整的样本,即某些样本的某些属性缺失。尤其是在属性数目较多的情况下,往往会有大量样本出现缺失值,若简单地放弃不完整样本,仅使用无缺失值的样本进行学习,显然是对数据信息的浪费。所以,有必要考虑利用缺失属性值的训练样例来进行学习。
在利用缺失属性值的训练样例时,我们需要考虑两个问题:
(1)如何在属性值缺失的情况下进行划分属性选择?
(2)给定划分属性,若样本在该属性值上缺失,如何对样本进行划分?
针对(1)
我们仅根据 D ~ \\displaystyle \\widetildeD 以上是关于西瓜书决策树笔记的主要内容,如果未能解决你的问题,请参考以下文章