《统计学习方法》——第5章 决策树

文章目录


前言

本文只要记录一些书中的一些小知识点,挑一些本人认为重要的地方进行总结。

各位道友!道长(zhǎng) 道长(chǎng)


一、决策树

  • 一种基本的分类与回归方法
  • 优点:可读性,分类速度快
  • 三个步骤:特征选择、决策树的生成、决策树的剪枝
  • 常用算法:ID3,C4.5,CART

二、决策树模型

1.决策树由节点和有向边组成。

2.内部节点表示一个特征或属性

3.叶节点表示一个类

三、决策树的学习

递归的选择最优特征,根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。

1、构建根节点,将所有数据放在根节点中。

2、选择最优特征,根据这一特征将训练数据集分割成子集

3、若可以正确分类,则构建叶节点,将子集放入叶节点

4、如果自己不能被基本正确的分类,那么对自己继续选新的最优特征,对其进行分割,构建新节点

5、递归进行,最后生成一颗树

决策树的学习算法包括特征选择、决策树的生成、决策树的剪枝

四、特征选择

特征选择是决定用哪个特征来划分特征空间

准则是信息增益信息增益比

4.1信息增益

:随机变量不确定性的度量

概率分布:
P ( X = x i ) = p i P(X=x_i)=p_i P(X=xi)=pi
X的熵:
H ( X ) = − ∑ p i log ⁡ p i H(X)=-\sum p_i \log p_i H(X)=−∑pilogpi
条件熵 :X给定的的条件下Y的条件熵
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)=\sum_{i=1}^n p_i H(Y|X=x_i) H(Y∣X)=i=1∑npiH(Y∣X=xi)

由数据估计得到时,对应的熵和条件熵为经验熵经验条件熵

信息增益 :经验熵和条件熵之差
g ( D ∣ A ) = H ( D ) − H ( D ∣ A ) g(D|A)=H(D)-H(D|A) g(D∣A)=H(D)−H(D∣A)

4.2信息增益算法

输入:数据集D和特征A

输出:信息增益 g ( D ∣ A ) g(D|A) g(D∣A)

1、计算H(D)
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^K\frac{|C_k|}{|D|} \log_2\frac{|C_{k}|}{|D|} H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣

  • ∣ C k ∣ |C_k| ∣Ck∣为这个 C k C_k Ck类的样本数

2.计算经验条件熵
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ D i log ⁡ 2 ∣ D i k ∣ ∣ D i ∣ H(D|A)=\sum_{i=1}^n \frac {|D_i|}{|D|}H(D_i)=-\sum_{i=1}^n\frac {|D_i|}{|D|}\sum_{k=1}^K \frac {|D_{ik}|}{D_i}\log_2\frac {|D_{ik}|}{|D_i|} H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣k=1∑KDi∣Dik∣log2∣Di∣∣Dik∣

3.计算信息增益
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)

选信息增益最大的作为最优特征

4.3信息增益比

  • 使用信息增益作为划分数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比对这个问题可以进行矫正

信息增益g与训练数据集D关于特征A的值的熵之比
g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)

  • 其中 H A ( D ) H_A(D) HA(D)为D关于特征A的的熵

五、决策树的生成

5.1 ID3算法

输入:数据集D和特征集A阈值 ε \varepsilon ε

输出:决策树T

(1)若D中所有实例属于同一类 C k C_k Ck,则T为单节点树,并将类 C k C_k Ck作为节点的类标记,返回T

(2) A = ∅ A=\emptyset A=∅,则T为单节点树,并将实例数最大的类 C k C_k Ck作为节点的类标记,返回T

(3)否则,按照上面讲的信息增益算法 计算A中个特征对D的信息增益,选择信息增益最大的特征 A g A_g Ag

(4)若 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε,则置T为单节点树,并将实例数最大的类 C k C_k Ck作为节点的类标记,返回T

(5)否则,对 A g A_g Ag的每一个可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割成若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类 作为标记,构建子节点,由节点及其子节点构成树T,返回T

(6)对于第i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\{Ag\} A−{Ag}为特征集,递归的调用(1)-(5),得到子树 T i T_i Ti,返回 T i T_i Ti

5.2 C4.5生成算法

在ID3基础上,使用信息增益比来选择特征,其余不变

六、决策树的剪枝

若按照以上讲的生成算法产生决策树,这样容易造成过拟合 的现象。这是因为过多的考虑对已知数据的正确分类,从而构建了十分复杂的决策树。

为了解决这个问题,需要对决策树进行简化,即剪枝

6.1 决策树学习的损失函数

决策树学习的损失函数可以定义为:

  • |T|为叶节点个数,t是叶节点
  • N t N_t Nt为叶节点t的样本数
  • N t k N_{tk} Ntk表示 N t N_t Nt中k类的样本数量
  • H t ( T ) H_t(T) Ht(T)为叶节点t的经验熵
  • α \alpha α为参数,大于等于0

经验熵 H t ( T ) H_t(T) Ht(T)为

把损失函数 C α ( T ) C_{\alpha}(T) Cα(T)第一项记作C(T)

这时候有

  • C(T)表示模型对于训练数据的训练误差,即模型与训练数据的拟合程度
  • |T|表示模型复杂度
  • α \alpha α控制两者之间的影响。
    • 较大的 α \alpha α选择简单的模型(树),较小的选择复杂的模型。

剪枝,就是当 α \alpha α确定,选择巡视函数最小的模型(子树)。

6.2 剪枝算法

输入:生成算法生成的整个树T;参数 α \alpha α

输出:剪枝后的T

(1)计算学个节点的经验熵

(2)递归的从树的叶节点向上回退。

设一组叶节点回退到父节点之前和之后的整体树分别是 T B T_B TB和 T A T_A TA,对应的损失函数为 C α ( T B ) C_{\alpha}(T_B) Cα(TB)与 C α ( T A ) C_{\alpha}(T_A) Cα(TA),如果
C α ( T B ) ≥ C α ( T A ) C_{\alpha}(T_B) \ge C_{\alpha}(T_A) Cα(TB)≥Cα(TA)

则进行剪枝,将父节点变成叶节点

(3)返回(2)直到不能继续为止,得到损失函数最小的子树 T α T_{\alpha} Tα

七、CART算法

分类与回归树(classification and regression tree)

  • CART既可以分类又可以回归
  • 假设决策树是二叉树,内部节点的取值是"是"或"否",且左"是"右"否"
  • 两步组成:(1)决策树生成,尽量大(2)决策树剪枝,损失函数最小

7.1 CART生成

对于回归树平方误差最小化 准则

对于分类树基尼指数最小化准则

1.回归树生成

假设把输入空间划分为M个单元,
每个单元 R m R_m Rm上的输出为 c m c_m cm,故回归树模型可以表示为
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^Mc_mI(x\in R_m) f(x)=m=1∑McmI(x∈Rm)

当输入空间划分确定时,可以用平方误差来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。

易知 c ^ m \hat{c}_m c^m是所有输入实例 x i x_i xi对于输出 y i y_i yi的均值。
c ^ m = a v e ( y i ∣ x i ∈ R m ) \hat c_m= ave (y_i|x_i \in R_m) c^m=ave(yi∣xi∈Rm)

然后对输入空间进行划分。具体的选择第j个变量 x ( j ) x^{(j)} x(j)和他的取值s,作为切分变量j切分点s 。并且定义两个区域

具体的,
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[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]

对于固定输入变量j可以找到最优切分点s

遍历所有输入变量,找到一个最优的切分变量j,构成(j,s)。将输入空间划分为连个区域。

接着对每个区域 重复上述过程,直到满足条件。

这样的回归树称为最小二乘回归树

2.最小二乘回归树生成算法

3.分类树的生成

  • 基尼指数

    分类问题中,假设有K个类,样本点属于第k类的概率为 p k p_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=1}^K p_k(1-p_k)=1-\sum_{k=1}^K p_k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2

    对于给定样本集合D,基尼指数为
    G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^K (\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2

    在特征A的条件下,基尼指数为
    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)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)

    • ( C k C_k Ck是D中属于第k类样本子集,K是类的个数)
    • 基尼指数表示集合D的不确定性,
    • G i n i ( D , A ) Gini(D,A) Gini(D,A)表示经过A=a分割后D的不确定性
    • 基尼指数越大,不确定性越大(类似于熵)

4.CART生成算法

输入:训练集D;停止计算条件

输出:CART决策树

从根节点开始,递归的对每个节点进行以下操作

(1)设节点的训练集是D,计算现有特征的对数据集的基尼指数。根据样本点对特征A=a的测试为是或否,将D分为 D 1 D_1 D1和 D 2 D_2 D2,计算 G i n i ( D , A ) Gini(D,A) Gini(D,A)的基尼指数

(2)在所有可能的特征A机器他们的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点。根据最优特征和最优切分点生成两个子节点,将数据集进行分配

(3)对两个子节点递归调用(1)(2),直到满足条件

(4)生成CART树

  • 停止计算条件是节点中的样本个数小于预定阈值。或者样本集的基尼指数小于预定阈值。或者没有更多特征。

7.2 CART剪枝

两步:

  1. 从生成的决策树 T 0 T_0 T0底端开始剪枝,直到根节点,形成一个子树序列{ T 0 , . . . , T n T_0,...,T_n T0,...,Tn}
  2. 用交叉验证法在独立的验证数据集上对子树序列进行测试,选择最优子树

1.剪枝,形成一个子树序列

剪枝过程中,计算子树的损失函数

对于固定的 α \alpha α,一定存在使损失函数 C α ( T ) C_{\alpha}(T) Cα(T)最小的子树 T α T_{\alpha} Tα。

  • Breiman等人证明:用递归的方法对树剪枝,将 α \alpha α从小增大,产生一些列区间, [ α i , α i 1 ) [\alpha_i,\alpha_{i_1}) [αi,αi1),得到对应的子树序列{ T 0 , . . . , T n T_0,...,T_n T0,...,Tn},序列中子树是嵌套的

C ( T ) C(T) C(T)为训练数据的预测误差(如基尼指数)。

对 T 0 T_0 T0的每一内部节点t,计算
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t)=\frac{C(t)-C(T_t)}{|T_t|-1} g(t)=∣Tt∣−1C(t)−C(Tt)

  • 他表示剪枝后整体损失函数减少的程度。在T0中减去g(t),将得到的子树记作T1,同时将最小的g(t)设为 α 1 \alpha_1 α1。 T 1 T_1 T1为区间 [ α 1 , α 2 ) [\alpha_1,\alpha_2) [α1,α2)的最优子树。

2.在子树序列中,通过交叉验证选取最优子树 T α T_{\alpha} Tα

利用独立的验证数据集 ,测试子树序列中各个子树的平方误差或基尼指数。

平方误差或基尼指数最小的决策树被认为是最优决策树。

在子树序列中,每个子树都对应一个 α i \alpha_i αi,所以最优 T i T_i Ti确定, α i \alpha_i αi也确定。

即得到了最优决策树 T α T_{\alpha} Tα

3.CART剪枝算法

总结

今天的内容是统计学习方法的第5章节,加油呀!

相关推荐
NiNg_1_2345 分钟前
机器学习之Python中Scikit-Learn(sklearn)入门
python·机器学习·scikit-learn
曳渔7 分钟前
Java-数据结构-二叉树-习题(三)  ̄へ ̄
java·开发语言·数据结构·算法·链表
shark-chili18 分钟前
数据结构与算法-Trie树添加与搜索
java·数据结构·算法·leetcode
见牛羊23 分钟前
旋转矩阵乘法,自动驾驶中的点及坐标系变换推导
算法
奥利给少年23 分钟前
深度学习——管理模型的参数
人工智能·深度学习
小羊在奋斗1 小时前
【C++】探秘二叉搜索树
c++·人工智能·神经网络·机器学习
m0_713344851 小时前
新能源汽车数据大全(产销数据\充电桩\专利等)
大数据·人工智能·新能源汽车
NewsMash1 小时前
平安养老险阜阳中心支公司开展金融教育宣传专项活动
人工智能·金融
爱数模的小云1 小时前
【华为杯】2024华为杯数模研赛E题 解题思路
算法·华为
白葵新1 小时前
PCL addLine可视化K近邻
c++·人工智能·算法·计算机视觉·3d