决策树

信息论基础

  • 信息熵:是一个随机变量不确定性的度量,对于一个离散型随机变量 X~ p(x) ,其离散熵可以定义为:
    H ( x ) = − ∑ x ∈ χ p ( x ) l o g ( p ( x ) ) H(x)=-\sum_{x\in \chi} p(x)log(p(x)) H(x)=xχp(x)log(p(x))
  • 联合熵:分布为 p(x,y) 的一对随机变量 (X,Y) ,其联合熵定义为:
    H ( X , Y ) − = ∑ x ∈ χ ∑ y ∈ y p ( x , y ) l o g p ( x , y ) = H ( X ) + H ( Y ∣ X ) H(X,Y)-=\sum_{x\in \chi}\sum_{y\in y} p(x,y)logp(x,y)=H(X)+H(Y|X) H(X,Y)=xχyyp(x,y)logp(x,y)=H(X)+H(YX)
    表示输入为X,输出为Y时,整个系统所具有的不确定程度
  • 条件熵,表示表示已知编码输入集为X时,编码输出集为Y所剩余的不确定性。
    H ( Y ∣ X ) = − ∑ x ∈ χ ∑ y ∈ y p ( x , y ) l o g p ( y ∣ x ) H(Y|X)=-\sum_{x\in \chi}\sum_{y\in y}p(x,y)logp(y|x) H(YX)=xχyyp(x,y)logp(yx)

基本流程

决策树_第1张图片

三种情况导致递归返回

  1. 当前节点包含的样本完全属于同一类别,无需划分
  2. 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
  3. 当前节点包含样本集合为空,不能划分

第二种情况,把当前节点标记为叶节点,将其类别设定为该节点所含样本最多的类别

第三种情况,当前设为叶子节点,类别设为其父节点样本最多的类别

划分选择

难点在第八行,即选择最优划分属性,一般而言我们希望随着划分的进行,分支节点所包含的样本尽可能属于同一类,即节点纯度越来越高

信息增益

信息熵
假定当前样本集合D中第k类样本所占比例是Pk(k=1,2……y),则信息熵定义为
E n t ( D ) = − Σ k = 1 y p k l o g 2 p k Ent(D)=-\Sigma^y_{k=1} p_k log_2p_k Ent(D)=Σk=1ypklog2pk
Ent(D)越小,D的纯度越高

信息增益

假定离散属性a有V个可能的取值 \({a^1 , a^2 …… a^V}\) 使用属性a对样本集D进行划分,则会产生V个分支节点,其中第v个分支节点包含了D中所有在属性a上取值为 \(a^v\) 的样本,记为 \(D^v\)

根据信息熵公式算出信息熵,再考虑到不同分支节点包含的样本数不同,给分支节点赋予权重\(|D^v|/|D|\),即样本数越多的分支节点的影响越大,于是得到信息增益公式
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) ( 1 ) Gain(D,a)=Ent(D)-\sum\limits_{v=1}^V \frac {|D^v|}{|D|}Ent(D^v) \qquad (1) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)(1)

一般而言,信息增益对俄大,则意味着使用属性a来进行划分所获得“纯度提升”越大,所以使用信息增益来进行最优划分属性选择。著名的ID3决策树算法就是以信息增益为准则来选择划分属性

增益率

决策树_第2张图片 假设我们使用“编号”这一属性来作为一个候选划分,算出信息增益为0.998远大于其他候选属性划分,这很容易理解,“编号”属性产生17个分支,每个分支仅包含一个样本,纯度已达最高,然而这样的决策树不具有泛化能力,无法对新样本进行有效预测

实际上,信息增益准则对取值数目较多的属性有所偏好,为减少这种不利影响,著名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_{v=1} \frac {|D^v|}{|D|} log_2 \frac{|D^v|}{|D|} IV(a)=v=1VDDvlog2DDv
称为属性a的固有值,属性a的可能取值数目越多(即V越大),则IV(a)的值通常会越大

需要注意的是,增益率准则对于可取值数目较少的属性有所偏好,所以C4.5算法并不是选择增益率最高的属性作为划分,而是采用一个启发式方法先从候选划分找出信息增益高于平均水平的属性,然后再选择增益率最高的

基尼指数

CART决策树使用基尼指数来选择划分属性,数据集D的纯度用基尼值来度量,
G i n i ( D ) = ∑ k = 1 ∣ y ∣ ∑ k ′ ≠ k p k p k ′ Gini(D)=\sum^{|y|}_{k=1}\sum_{k' \neq k}p_kp_{k'} Gini(D)=k=1yk̸=kpkpk
= 1 − ∑ k = 1 ∣ y ∣ p k 2 =1-\sum^{|y|}_{k=1}p^2_k =1k=1ypk2
直观来说,基尼反映了从数据集中随机抽取两个样本,其类别标记不一致的概率,因此基尼越小,则数据集D的纯度越高,按照(1)式格式,得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_{v=1}\frac {|D^v|}{|D|}Gini(D^v) Gini_index(D,a)=v=1VDDvGini(Dv)

ID3算法

流程

决策树_第3张图片 决策树_第4张图片

ID3算法采用信息增益作为最优属性划分选择,另外有个阈值,如果当前最优划分属性信息增益小于该阈值,则直接返回。
缺点:ID3算法只有树的生成,所以容易过拟合。另外还有一个缺点,就是上面提到的实际上,信息增益准则对取值数目较多的属性有所偏好

C4.5算法

基本流程与ID3算法一致,不过采用信息增益率作为划分最优属性标准。统计上书上仅仅只是说以信息增益率划分标准。西瓜书上说增益率准则对于可取值数目较少的属性有所偏好,所以C4.5算法并不是选择增益率最高的属性作为划分,而是采用一个启发式方法先从候选划分找出信息增益高于平均水平的属性,然后再选择增益率最高的

CART分类与回归树

(classification and regression tree CART)分类与回归树,主要两步组成

  1. 决策树生成:基于训练数据集生成决策树,生成决策树要尽量大
  2. 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,用损失函数最小作为剪枝标准

回归树使用平方误差最小化准则,分类用基尼指数最小化准则

回归树生成流程

这里要重点看!!!,因为最原始的gbdt是基于回归树来说明的

我们用CART算法来说明一颗回归树的生成过程,这是回归树算法流程
决策树_第5张图片

直接看算法不太容易看懂,我们来举一个例子进行理解

假设我们有训练数据如下,目标是得到一颗最小二乘回归树

决策树_第6张图片
  1. 选择最优划分属性j与划分点s
    因为只有一个属性x,因此最优切分变量就是x

接下来考虑9个切分点[1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5],损失函数定义为\(Loss=(y,f(x))=(f(x)-y)^2\),将9个切分点一一代入下个式子,其中\(c_m=ave(y_i|x_i \in R_m)\)(即我们通过切割点将数据集分为两部分,每部分我们的预测值就是这一部分所有样本取值的平均值)
min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}[\min_{c_1} \sum_{x_i \in R_1(j,s)}(y_i -c_1)^2+\min_{c_2}\sum_{x_i \in R_2(j,s)}(y_i-c_2)^2] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]
例如我们取s=1.5,R1={1},R2={2,3,4,5,6,7,8,9,10},这两个区域的输出值分别是
c1=5.56,c2=1/9(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)=7.50,得到下表
决策树_第7张图片>
将以上各个c1 c2带入平方误差损失函数可得下表
决策树_第8张图片
显然s=6.5是,m(s)最小,因此第一个划分变量是j=x,s=6.5

用选定的(j,s)对数据进行划分,并决定输出值。目前我们分的两个区域分别是R1={1,2,3,4,5,6},R2={7,8,9,10}输出值 \(c_m=ave(y_i|x_i \in R_m)\) ,c1=6.24,c2=8.91,对两个子区域继续重复上述步骤,直到满足停止条件(如限制深度或叶子结点个数)

可以看出我们每次划分最优属性与最优切割点,都需要遍历所有属性,所有切割点,所有训练样本,这一步骤是很耗时的

分类树

基尼指数(感觉这里,统计比西瓜讲得要好)
定义:分类问题中,假设有K个类,样本点属于地k类的概率为pk,则概率分布的基尼指数定义为
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum^K_{k=1}p_k(1-p_k)=1-\sum^K_{k=1}p_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
对于二分类问题,假设样本点属于第一个类的概率是p,则概率分布的基尼指数为
G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1-p) Gini(p)=2p(1p)
对于给定的样本集合,其基尼指数为
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum^K_{k=1}(\frac{|C_k|}{|D|})^2 Gini(D)=1k=1K(DCk)2
这里Ck是D中属于第k类的样本子集,K是类别个数,这个式子与上面基尼指数是一样的意思
重要!!
入股样本集合D根据特征A是否取某一可能值a被分割成D1和D2两部分,则在特征A的条件下,集合D的基尼指数定义为
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)
基本流程

决策树_第9张图片)
决策树_第10张图片

与之前讨论树的不一样地方在于,之前都是划分属性,现在是根据属性中的某一个取值与否作为划分,即只能二叉分

剪枝处理

剪枝是决策树学习算法对付过拟合的主要手段

  1. 预剪枝,在决策树生成过程中,对每个节点在划分前进行估计,若当前节点的划分不能导致决策树泛化能力提升,停止划分,并将当前节点标记为叶节点
  2. 后剪枝则是先从训练街生成一颗完整的决策树,然后自底向上对非叶子节点进行考察,若将该节点对应的字数替换为叶节点导致泛华能力提升,则子树替换为叶节点

两者对比

  1. 后剪枝通常比与预剪枝决策树保留更多的分支,所以后剪枝不容易欠拟合,泛化能力往往优于预剪枝决策树
  2. 后剪枝是在生成完全决策树之后进行的,并且要自底向上的对书上的所有非叶子节点进行一一考察,所以开销要比预剪枝决策树大

连续与缺失值

连续值处理

属性是连续值,采用二分法对连续属性进行处理,这正是C4.5决策苏算法采用的机制

假定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大排序,记为 \({a1,a2……,a^n}\) ,基于划分点t将D分为两部分,一部分大于t一部分小于等于t。对于连续值属性,对相邻的属性取值ai与ai+1l来说,t在区间[ai,ai+1)的划分结果相同,所以产生n-1个划分点集合
T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ n − 1 } T_a=\{\frac {a^i+a^{i+1}}{2} | 1 \leq i \leq n-1\} Ta={2ai+ai+11in1}

**与离散值不同的是,若当前节点划分属性为连续属性,该属性还可作为其后代节点的划分属性 **

缺失值处理

需要解决两个问题

  1. 如何在属性值缺失的情况下进行最优划分属性选择
  2. 给定划分属性,若样本在该属性值上的值缺失,如何多样本进行划分?

先来解决第一个问题

给定训练集D和属性a,令 \(D^-\) 表 示D中属性a没有缺失值的样本子集,对于问题1,显然我们仅可根据 \(D^-\)判断属性a的优劣。假设属性a有V个可取值 \(a^1 , a^2…… a^V\)

令 \(D^{-v}\) 表示 \(D^-\) 在属性a上取值为\(a^v\)的样本子集

\(D^-_k\) 表示 \(D^-\) 中属于第k类(k=1,2……,|y|)的样本子集

假定我们为每一个样本x赋予一个权重 \(w_x\) ,并定义

ρ = Σ x ∈ D − w x Σ x ∈ D w x \rho = \frac {\Sigma_{x \in D^- }w_x}{\Sigma_{x \in D}w_x} ρ=ΣxDwxΣxDwx
p k − = Σ x ∈ D k − w x Σ x ∈ D − w x ( 1 ≤ k ≤ ∣ y ∣ ) p^-_k=\frac {\Sigma_{x \in D^-_k}w_x}{\Sigma_{x \in D^-}w_x} \qquad (1 \leq k \leq |y|) pk=ΣxDwxΣxDkwx(1ky)
r v − = Σ x ∈ D k − w x Σ x ∈ D − w x ( 1 ≤ k ≤ V ) r^-_v=\frac {\Sigma_{x \in D^-_k}w_x}{\Sigma_{x \in D^-}w_x} \qquad (1 \leq k \leq V) rv=ΣxDwxΣxDkwx(1kV)
基于上述定义,我们将信息增益的计算式推广为,
G a i n ( D , a ) = ρ ∗ G a i n ( D − , a ) Gain(D,a)=\rho *Gain(D^-,a) Gain(D,a)=ρGain(D,a)
= ρ ∗ ( E n t ( D − ) − ∑ v = 1 V r v − E n t ( D − v ) ) =\rho *(Ent(D^-)-\sum^V_{v=1}r^-_vEnt(D^-v)) =ρ(Ent(D)v=1VrvEnt(Dv))
E n t ( D − ) = − ∑ k = 1 ∣ y ∣ p k − l o g 2 p k − Ent(D^-)=-\sum^{|y|}_{k=1}p^-_klog_2p^-_k Ent(D)=k=1ypklog2pk
解决第二个问题
划分属性是a,样本x在属性a的取值未知,则将x同时划入所有子节点,且样本权值在属性值a v对应的子节点调整为\(r^-_v*w_x\),直观的看,就是让同一个样本以不同的概率划入到不同子节点中去

你可能感兴趣的:(机器学习)