目录
4.1什么是决策树
决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值。
4.2划分选择
4.2.1 划分的思路
我们需要选择一个最优的划分属性,一般而言,随着划分过程的不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即节点的纯度越来越高。
那我们就需要一种衡量样本集合纯度的一种指标,我们这里选择的是一种常用于度量样本集合纯度的一种指标,即“信息熵”,假定当前样本集合中第 k k k类样本所占的比例为 p k ( k = 1 , 2 , ⋯ , ∣ γ ∣ ) p_k(k=1,2,\cdots,| \gamma |) pk(k=1,2,⋯,∣γ∣),则 D D D的信息熵定义为
E n t ( D ) = − ∑ k = 1 ∣ γ ∣ p k log 2 p k Ent(D)=-\sum_{k=1}^{|\gamma|}p_k\log_2p_k Ent(D)=−k=1∑∣γ∣pklog2pk
4.2.2 ID3决策树
ID3决策数以信息增益为准则划分属性.
假定离散属性 a a a有 v v v个可能的取值{
a 1 , a 2 , ⋯ , a V a^1,a^2,\cdots,a^V a1,a2,⋯,aV},若使用 a a a来对样本集合 D D D进行划分,则会产生 v v v个分支节点,其中第 v v v个分支结点包含了 D D D中所有在属性 a a a上取值为 a v a^v av 的样本,记为 D v D^v Dv,我们先算出 D v D^v Dv的信息熵,再考虑不同分支结点所包含的样本数不同,给分支结点赋予权重,即样本数越多的分支结点的影响越大,于是可计算出属性 a a a对样本集 D D D进行划分所获得的“信息增益”
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)
信息增益越大,则这次划分对纯度提升越高,故我们选择属性
a ∗ = arg max a ∈ A G a i n ( D , a ) a_*=\argmax_{a\in A}Gain(D,a) a∗=a∈AargmaxGain(D,a)
作为划分属性.
4.2.3 C4.5决策树
ID3决策树有个缺点,信息增益准则对可取数目较多的属性有所偏好,为了减少这种影响,C4.5决策树算法选择用“增益率”来选择最优划分属性,增益率定义为
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 ∣ 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 a a的固有值,属性a的可能取值越多, I V ( a ) IV(a) IV(a)通常越大。
需要注意的是,增益率准则对可取值数目较少的属性有所偏好,因此,C4.5决策树并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
4.2.4 CART决策树
CART决策树使用基尼系数来选择划分属性,数据集 D D D的纯度可以用基尼值来度量:
G i n i ( D ) = ∑ k = 1 ∣ γ ∣ ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k − 1 ∣ γ ∣ p k 2 Gini(D)=\sum_{k=1}^{|\gamma|}\sum_{k^{'}\neq k}p_kp_{k^{'}} \\=1-\sum_{k-1}^{|\gamma|}p_{k}^{2} Gini(D)=k=1∑∣γ∣k′=k∑pkpk′=1−k−1∑∣γ∣pk2
直观来说, G i n i ( D ) Gini(D) Gini(D)反映了从数据集 D D D中随机抽取两个样本,其类别标记不一致的概率,因此 G i n i ( D ) Gini(D) Gini(D)越小,则数据集 D D D的纯度越高.
属性a的基尼指数定义为·
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index(D,a)=\sum_{v=1}^{V}\frac{|D^v|}{|D|}Gini(D^v) Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
则
a ∗ = arg min G i n i _ i n d e x ( D , a ) . a_*=\argmin Gini\_index(D,a). a∗=argminGini_index(D,a).
4.3 剪枝处理
4.3.1 基本问题
为什么要剪枝?
剪枝是决策树学习算法对付“过拟合”的主要手段。
那么过拟合是怎么出现的呢?
在决策树学习中,为了尽可以正确分类样本,结点划分将不断重复,有时会造成决策树分支过多,以致把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合,因此,可通过主动去掉一些分支来降低过拟合的风险。
处理方式?
通过剪枝,提高泛化性能。
4.3.2 预剪枝
在决策树生成过程中,对每个结点在划分前进行估计,若当前结点的划分不能带来决策树泛化性能的提升,则停止划分,并将当前结点标记为叶结点。
优点:使得很多分支没有展开,不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。
缺点:有些分支的当前划分虽然不能提升泛化性能,甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高,预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
4.3.3 后剪枝
先从训练集生成一棵完整的决策树,然后自下而上地对非叶结点进行考察,若将该点对应的子树替换为叶结点能带来决策树泛化性能的提升,则将该子树替换为叶结点。
优点: 欠拟合风险小
缺点: 训练时间开销大
4.4 连续与缺失值
4.4.1 连续值处理
到目前为止我们仅讨论了基于离散属性来生成决策树,现实学习任务中常常会遇到连续属性,有必要讨论如何在决策树学习中使用连续属性。
给定样本集合 D D D和连续属性 a a a,假定a在 D D D上出现了 n n n个不同的取值,将这些值从小到大进行排序,记为 { a 1 , a 2 , … , a n } . \{a^1,a^2,\dots,a^n\}. {
a1,a2,…,an}.基于划分点 t t t可将 D D D分为子集 D t − D_{t}^{-} Dt−和 D t + D_{t}^{+} Dt+,其中 D t − D_{t}^{-} Dt−包含那些属性a上取值不大于 t t t的样本,而 D t + D_{t}^{+} Dt+则包含那些在属性 a a a上取值大于 t t t的样本。显然,对相邻的属性取值 a i a^i ai和 a i + 1 a^{i+1} ai+1来说, t t t在区间 [ a i , a i + 1 ) [a^i,a^{i+1}) [ai,ai+1)中取任意值的划分结果相同,所以我们不妨选可能的 n − 1 n-1 n−1的划分点t的集合为
T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ n − 1 } T_a=\{\frac{a^i+a^{i+1}}{2}|1\le i\le n-1\} Ta={
2ai+ai+1∣1≤i≤n−1}
即把 a i a^i ai和 a i + 1 a^{i+1} ai+1的中位点作为候选划分点,然后我们就可以像离散属性值一样来考察这些划分点,选取最优的划分点进行样本的划分。
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)是样本集基于划分点 t t t二分后的信息增益,于是我们就可选择使 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t)最大化的划分点。
需要注意的是,与离散属性不同,若当前结点划分属性为连续属性,该属性还可以作为其后代结点的划分属性。(例如在父节点上使用了“密度 ≤ \le ≤ 0.381”,不会禁止在子节点上使用“密度” ≤ \le ≤ 0.294)
4.4.2缺失值处理
现实任务中常会遇到不完整的样本,即样本的某些属性值缺失;尤其是在属性数目较多的情况下,往往有大量样本出现缺失值。如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,显然是对数据信息极大的浪费。
那么我们需要解决两个问题
1,如何在属性值缺失的情况下进行划分属性的选择?
2,给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
给定训练集 D D D和属性 a a a,令 D ~ \tilde{D} D~表示 D D D中属性在 a a a上没有缺失值的样本子集。
对于问题1,显然我们仅可以根据 D ~ \tilde{D} D~来判断属性 a a a的优劣,假定属性 a a a可取值{
a 1 , a 2 , ⋯ , a V a^1,a^2,\cdots,a^V a1,a2,⋯,aV},令 D v ~ \tilde{D^v} Dv~表示 D ~ \tilde{D} D~中在属性 a a a上取值为 a v a^v av的样本子集, D k ~ \tilde{D_k} Dk~表示 D ~ \tilde{D} D~中属于第 k k k类( k = 1 , 2 , … , ∣ γ ∣ k=1,2,\dots,|\gamma| k=1,2,…,∣γ∣)样本子集,则显然有 D ~ = ∪ k = 1 ∣ γ ∣ D k ~ \tilde{D}=\cup_{k=1}^{|\gamma|}\tilde{D_k} D~=∪k=1∣γ∣Dk~, D ~ = ∪ v = 1 ∣ V ∣ D v ~ \tilde{D}=\cup_{v=1}^{|V|}\tilde{D^v} D~=∪v=1∣V∣Dv~。假定我们为每个样本 x \boldsymbol x x赋予一个权重 w x w_{\boldsymbol x} wx并定义
- 这里的 w x w_x wx是什么呢?
- 答: 初始化为1,会随着学习而调整
ρ = ∑ x ∈ D ~ w x ∑ x ∈ D w x , \rho=\frac{\sum_{x \in \tilde{D}}w_{\boldsymbol x}}{\sum_{x \in D}w_{\boldsymbol x}}, ρ=∑x∈Dwx∑x∈D~wx,
p k ~ = ∑ x ∈ D k ~ w x ∑ x ∈ D w x , \tilde{p_k}=\frac{\sum_{x \in \tilde{D_k}}w_{\boldsymbol x}}{\sum_{x \in D}w_{\boldsymbol x}}, pk~=∑x∈Dwx∑x∈Dk~wx,
r v ~ = ∑ x ∈ D v ~ w x ∑ x ∈ D w x , \tilde{r_v}=\frac{\sum_{x \in \tilde{D^v}}w_{\boldsymbol x}}{\sum_{x \in D}w_{\boldsymbol x}}, rv~=∑x∈Dwx∑x∈Dv~wx,
直观来看,对属性 a a a, ρ \rho ρ表示无缺失值样本所占的比例, p k ~ \tilde{p_k} pk~表示无缺失值样本中第 k k k类所占的比例, r v ~ \tilde{r_v} rv~表示无缺失值样本中在属性 a a a上取值 a v a^v av的样本所占的比例。显然, ∑ k = 1 ∣ γ ∣ p k ~ = 1 \sum_{k=1}^{|\gamma|}\tilde{p_k}=1 ∑k=1∣γ∣pk~=1, ∑ v = 1 ∣ V ∣ r v ~ = 1 \sum_{v=1}^{|V|}\tilde{r_v}=1 ∑v=1∣V∣rv~=1.
基于以上定义我们可以将信息增益的计算式推广为
G a i n ( D , a ) = ρ × G a i n ( D ~ , a ) = ρ × ( E n t ( D ~ ) − ∑ v = 1 V r v ~ E n t ( D v ~ ) ) Gain(D,a)=\rho \times Gain(\tilde{D},a)\\ =\rho \times (Ent(\tilde{D})-\sum_{v=1}^{V}\tilde{r_v}Ent( \tilde{D^v})) Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)−v=1∑Vrv~Ent(Dv~))
其中
E n t ( D ~ ) = − ∑ k = 1 ∣ γ ∣ p k ~ log 2 p k ~ Ent(\tilde{D})=-\sum_{k=1}^{|\gamma|}\tilde{p_k}\log_2\tilde{p_k} Ent(D~)=−k=1∑∣γ∣pk~log2pk~
对问题2,若样本 x \boldsymbol x x在划分属性 a a a上的取值未知,则将 x \boldsymbol x x同时划入所有子结点,且将样本权值在与属性值 a a a对应的子结点中调整为 r v ~ ⋅ w x \tilde{r_v}\cdot w_{\boldsymbol x} rv~⋅wx;直观来看,就是让同一个样本以不同的概率划入不同的子结点中去。
4.5 多变量决策树
若把每个属性对应一条坐标轴,上述的单变量决策树,划分的边界是和该坐标轴垂直的,是“直”的,这样的划分可能需要很多次才能得到较好的近似,而多变量决策树可以直接生成“斜”的边界,决策判断条件变得多维,如下图。
- 如何实现呢?
以上内容源于周志华《机器学习》(西瓜书),笔者以自己的理解写了这篇笔记,如有错误欢迎指正
文章评论