美文网首页
统计机器学习-决策树

统计机器学习-决策树

作者: 又双叒叕苟了一天 | 来源:发表于2020-06-27 21:03 被阅读0次

决策树是一种基本的分类与回归方法。ID3和C4.5决策树可以用于分类,CART(分类与回归树)既可以用于分类,也可以用于回归。决策树的学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。这里主要介绍分类决策树。附上机器学习实战的书中决策树代码

定义

分类决策树模型是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成。结点由两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。

由决策树的根结点到叶结点的每一条路径构建一条规则:路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。决策树的路径对应的规则互斥且完备,每一个实例都只被一条路径所覆盖。

决策树还能表示给定特征条件X下类Y的条件概率分布P(Y|X)

决策树的学习

决策树学习,假设给定训练数据集
D= \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
其中,x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)})^T为输入实例(特征向量),n为特征个数,y_i\in \{1,2,\cdots,K\}为类标记,i=1,2,\cdots,NN为样本容量,学习的目的是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。

决策树学习的算法通常是一个递归的选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程,这一过程对应着对特征空间的划分,也对应着决策树的构建。在构建完成后,决策树对训练数据有了很好的划分,但是一般不具备很好的泛化能力,容易出现过拟合,于是可以通过剪枝算法剪去一些子树来提高泛化能力。剪枝的结果不是唯一的,需要选择一个最优的决策树最为最终的模型。这一最优化问题是NP完全问题,通常采用启发式算法求解,得到的决策树是次最优的。

NP完全问题=NPC问题,这种问题存在的现象就是生成问题的一个解比验证一个给定解花费的时间多得多。

特征选择

特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。通常特征选择的准则是信息增益或信息增益比。

信息增益

首先定义熵和条件熵

熵是表示随机变量不确定性的度量,设X是一个取有限个值的离散随机变量,其概率分布为
P(X=x_i)=p_i,\ \ i=1,2,\cdots,n
则随机变量的熵定义为
H(X)=-\sum_{i=1}^np_ilogp_i\tag1
当随机变量越确定时,熵越小。例如0,1分布,P(X=1)=p的熵随概率p的曲线:

hp

p=0.5时,最不确定0还是1,此时熵最大。

条件熵

设随机变量(X,Y),其联合概率分布为
P(X=x_i,Y=y_j)=p_{ij},\ \ i=1,2,\cdots,n;\ \ j=1,2,\cdots,m
条件熵H(Y|X)表示在一直随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的期望
H(Y|X)=\sum_{i=1}^np_iH(Y|X=x_i)
当熵和条件熵中的概率有数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵,此时,如果有0概率,令0\log0=0

信息增益定义

特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
g(D,A)=H(D)-H(D|A)\tag2
表示通过特征A划分,数据集D分类不确定性减少的程度。

信息增益的算法

输入:训练数据集D和特征A

输出:特征A对训练数据集D的信息增益g(D,A)

(1)计算数据集D的经验熵
H(D)=-\sum_{k=1}^K\frac{|C_k|}{|D|}\log_2\frac{|C_k|}{|D|}
其中|C_k|是训练集中属于C_k类的样本个数,|D|是训练集样本总数

(2)计算特征A对数据集D的经验条件熵H(D|A)
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|}
其中D_i是训练集D根据特征A的第i个取值划分得到的子集,\sum D_i=DD_{ik}是子集D_i中属于C_k类的样本的集合

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

信息增益比

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

信息增益比定义

特征A对训练数据集D的信息增益比g_R(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵H_A(D)之比,即
g_R(D,A)=\frac{g(D,A)}{H_A(D)}
其中,H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|}n是特征A取值的个数。熵H(D)是针对数据集D的分类Y的,这里H_A(D)是针对数据集D的特征A的。

决策树的生成

ID3的生成算法

输入:训练数据集D,特征集A,阈值\varepsilon

输出:决策树T

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

(2)若A=\varnothing,则T为单结点树,并将D中实例数最大的类C_k作为该结点的类标记,返回T

(3)否则,按信息增益算法计算A中各特征对D的信息增益,选择信息增益最大的特征A_g

(4)如果A_g的信息增益小于阈值\varepsilon,则置T为单结点树,并将D中实例数最大的类C_k作为该结点的类标记,返回T

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

(6)对第i个子结点,以D_i为训练集,以A- \{A_g\}为特征集,递归的调用步(1)-(5),得到子树T_i,返回T_i

C4.5的生成算法

输入:训练数据集D,特征集A,阈值\varepsilon

输出:决策树T

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

(2)若A=\varnothing,则T为单结点树,并将D中实例数最大的类C_k作为该结点的类标记,返回T

(3)否则,按公式(2)计算A中各特征对D的信息增益比,选择信息增益比最大的特征A_g

(4)如果A_g的信息增益小于阈值\varepsilon,则置T为单结点树,并将D中实例数最大的类C_k作为该结点的类标记,返回T

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

(6)对第i个子结点,以D_i为训练集,以A- \{A_g\}为特征集,递归的调用步(1)-(5),得到子树T_i,返回T_i

两个算法的区别仅在于ID3使用信息增益最大为标准选择划分特征,而C4.5使用信息增益比最大为标准选择划分特征。

决策树的剪枝

生成算法产生的决策树对训练数据有很好的划分,但是容易出现过拟合,这时候就需要对生成的决策树进行剪枝,提高模型的泛化能力。

剪枝通过极小化决策树整体的损失函数或代价函数来实现。设树T的叶结点个数为|T|t是树T的叶结点,该叶结点有N_t个样本点,其中k类的样本点有N_{tk}个,k=1,2,\cdots,KH_t(T)为叶结点t上的经验熵,\alpha\geq0为参数,则决策树学习的损失函数可以定义为
C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|\tag3
其中经验熵为
H_t(T)=-\sum_k\frac{N_{tk}}{N_t}\log\frac{N_{tk}}{N_t}\tag4
在损失函数,将公式(3)中右端第一项记做
C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}\log\frac{N_{tk}}{N_t}\tag5
这时有
C_\alpha(T)=C(T)+\alpha|T|\tag6
上式中C(T)表示模型对训练数据的预测误差,|T|表示模型复杂度。参数\alpha控制两者之间的影响,较大的\alpha促使选择简单的模型,较小的\alpha促使选择复杂的模型,\alpha=0表示不考虑模型复杂度。该损失函数的极小化等价于正则化的极大似然估计。

树的剪枝算法

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

输出:修剪后的子树T_\alpha

(1)计算每个结点的经验熵

(2)递归的从树的叶结点向上回缩。设一组叶结点回缩到父结点之前与之后的整体树分别为T_BT_A,其对应的损失函数值分别是C_\alpha(T_B)C_\alpha(T_A),如果
C_\alpha(T_A)\leq C_\alpha(T_B)
则进行剪枝,即将父结点变为新的叶结点。

(3)返回(2),直至不能继续位置,得到损失函数最小的子树T_\alpha

剪枝算法可以通过动态规划的算法实现。

CART算法

CART是分类与回归树的简写,即既可以实现分类,也可以实现回归的树。CART是二叉树,内部结点有两个分支,左边是“是”,右边是“否”,对特征进行递归的二分。

CART算法由以下两步组成:

(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;

(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

CART生成

回归树生成

假设XY分别为输入和输出变量,并且Y是连续变量,给定训练数据集
D= \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
考虑如何生成回归树。

一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元的输出值。假设已将输入空间划分为M个单元R_1,R_2,\cdots,R_M,并且在每个单元R_m有一个固定的输出值c_m,于是回归树模型可表示为
f(x)=\sum_{m=1}^Mc_mI(x\in R_m)
当输入空间的划分确定时,可以用平方误差\sum_{x_i\in R_m}(y_i-f(x_i))来表示回归树对训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。易知,单元R_m上的c_m的最优值\hat c_mR_m上的所有输入实例x_i对应的输出y_i的均值,即
\hat c_m=\mathrm{ave}(y_i|x_i\in R_m)
问题是怎样对输入空间进行划分。这里采用启发式的方法,选择第j个变量x^{(j)}和它的取值s,作为切分变量和切分点并定义两个区域:
R_1(j,s)= \{x|x^{(j)}\leq s\}\ \ 和\ \ R_1(j,s)= \{x|x^{(j)}\gt s\}
然后寻找最优切分变量j和最优切分点s。具体的,求解
\min_{j,s}\bigg[\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\bigg]
对固定输入变量j可以找到最优切分点s
\hat c_1=\mathrm{ave}(y_i|x_i\in R_1(j,s))\ \ 和\ \ \hat c_2=\mathrm{ave}(y_i|x_i\in R_2(j,s))
遍历所有输入变量,找到最优的切分变量j,构成一个对(j,s),以此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件(例如结点中的样本个数小于预定阈值)为止。这样就生成一颗回归树,这样的回归树通常称为最小二乘回归树。

最小二乘回归树生成算法

输入:训练数据集D

输出:回归树f(x)

在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:

(1)选择最优切分变量j与切分点s,求解
\min_{j,s}\bigg[\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\bigg]\tag7
遍历变量j,对固定的切分变量j扫描切分点s,选择使公式(7)达到最小的值的对(j,s)

(2)用选定的对(j,s)划分区域并决定相应的输出值:
R_1(j,s)= \{x|x^{(j)}\leq s\},\ \ R_2(j,s)= \{x|x^{(j)}\gt s\}

\hat c_m=\frac1{N_m}\sum_{x_i\in R_m(j,s)}y_i,\ \ x\in R_m,\ \ m=1,2

(3)继续对两个子区域调用步骤(1),(2),直至满足停止条件。

(4)将输入空间划分为M个区域R_1,R_2,\cdots,R_M,生成决策树:
f(x)=\sum_{m=1}^Mc_mI(x\in R_m)

分类树的生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

基尼指数的定义

分类问题中,假设有K个类,样本点属于第k类的概率为p_k,则概率分布的基尼指数定义为
\mathrm{Gini}(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2\tag8
对于给定样本集D,其基尼指数为
\mathrm{Gini}(D)=1-\sum_{k=1}^K\bigg(\frac{|C_k|}{|D|}\bigg)\tag9
这里,C_kD中属于第k类的样本子集。

如果样本集合D根据特征A是否取某一可能值a被分割成D_1D_2两部分,则在特征A的条件下,集合D的基尼指数定义为
\mathrm{Gini}(D,A)=\frac{|D_1|}{|D|}\mathrm{Gini}(D_1)+\frac{|D_2|}{|D|}\mathrm{Gini}(D_2)
基尼指数\mathrm{Gini}(D)表示集合D的不确定性,基尼指数越大,不确定性越高,和熵有相似的性质。基尼指数\mathrm{Gini}(D,A)表示按特征A=a划分后的不确定性。

CART生成算法

输入:训练数据集D,停止计算的条件;

输出:CART决策树。

根据训练数据集,从根结点开始,递归的对每个结点进行以下操作,构建二叉决策树:

(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D_1D_2两部分,利用
\mathrm{Gini}(D,A)=\frac{|D_1|}{|D|}\mathrm{Gini}(D_1)+\frac{|D_2|}{|D|}\mathrm{Gini}(D_2)
计算A=a时的基尼指数。

(2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据依特征分配到两个子结点中去。

(3)对两个子结点递归的调用(1),(2),直至满足停止条件。

(4)生成CART决策树。

算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART 剪枝

在剪枝过程中,计算子树的损失函数:
C_\alpha(T)=C(T)+\alpha|T|
其中,T为任意子树,C(T)为对训练数据的预测误差(分类树中C(T)=\sum_{t=1}^{|T|}N_t\mathrm{Gini}_t(T)),|T|为子树的叶结点个数,\alpha\geq0为参数,较大的\alpha促使选择简单的模型,较小的\alpha促使选择复杂的模型。

对固定的\alpha,一定存在使损失函数C_\alpha(T)最小的子树,于是我们把\alpha从小增大,0=\alpha_0\lt\alpha_1\lt\cdots\lt\alpha_n\lt+\infty使其从复杂到简单逐步进行剪枝,剪枝得到的子树序列对应着区间\alpha\in[\alpha_i,\alpha_{i+1}]i=0,1,\cdots,n的最优子树序列\{T_0,T_1,\cdots,T_n\},序列中的子树是嵌套的。

具体的,从整体树T_0开始剪枝。对T_0的任意内部结点t,以t为单结点树的损失函数是
C_\alpha(t)=C(t)+\alpha
t为根结点的子树T_t的损失函数是
C_\alpha(T_t)=C(T_t)+\alpha|T_t|
\alpha=0\alpha充分小时,有不等式
C_\alpha(T_t)\lt C_\alpha(t)
单结点树损失更大一点,因为\alpha充分小时,复杂的树损失更小。当\alpha增大时,在某一\alpha
C_\alpha(T_t)=C_\alpha(t)
单结点树和子树损失相同。当\alpha再增大时,不等式反向,单结点树损失更小。

所以只要\alpha=\frac{C(t)-C(T_t)}{|T_t|-1}T_tt有相同的损失函数值,而t的结点少,因此tT_t更可取,对T_t进行剪枝。

为此,对T_0中每一内部结点t,计算
\alpha=g(t)=\frac{C(t)-C(T_t)}{|T_t|-1}
减去g(t)最小的T_t,得到的子树作为T_1,所处的区间为[\alpha_1,\alpha_2](整体树的区间是[\alpha_0=0,\alpha_1))。

如此剪枝下去,直至得到根结点。在这一过程中,不断的增加\alpha的值,产生新的区间。并且每个区间的子树是在上个区间的子树上剪枝得到的,因为当\alpha更大时,对于之前g(t)值更小的结点,C_\alpha(T_t)\gt C_\alpha(t),即之前剪去的结点其子树T_t的损失要比单结点t更大,所以嵌套的剪枝是合理的。

剪枝完成后,子树序列T_0,T_1,\cdots,T_n对应的\alpha序列\alpha_1,\alpha_2,\cdots,\alpha_n也就确定了,利用验证数据集在子树序列T_0,T_1,\cdots,T_n中计算损失C_{\alpha_n}(T),选择损失最小的决策树T_\alpha

CART剪枝算法

输入:CART算法生成的决策树T_0

输出:最优决策树T_\alpha

(1)设k=0T=T_0

(2)设\alpha=+\infty

(3)自下而上的对各内部结点t计算C(T_t)T_t以及
g(t)=\frac{C(t)-C(T_t)}{|T_t|-1}

\alpha=\min(\alpha,g(t))

这里,T_t表示以t为根结点的子树,C(T_t)是对训练数据的预测误差,|T_t|T_t的叶结点个数。

(4)对g(t)=\alpha的内部结点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T

(5)设k=k+1\alpha_k=\alphaT_k=T

(6)如果T_k不是由根结点及两个叶结点构成的树,则回到步骤(3),否则令T_k=T_n

(7)采用交叉验证法在子树序列T_0,T_1,\cdots,T_n中选取最优子树T_\alpha

相关文章

  • 统计机器学习-决策树

    决策树是一种基本的分类与回归方法。ID3和C4.5决策树可以用于分类,CART(分类与回归树)既可以用于分类,也可...

  • 决策树(一)

    复现经典:《统计学习方法》第 5 章 决策树微信号:机器学习初学者https://mp.weixin.qq.com...

  • 决策树算法总结

    前言 决策树是机器学习模型较常用的一种方法,李航老师《统计学习方法》详细的描述了决策树的生成和剪枝,本文根据书中的...

  • [机器学习]决策树

    决策树 @(技术博客)[机器学习, 决策树, python] 学习决策树首先要搞清楚决策树是什么(what),在弄...

  • 6.machine_learning_Decision_Tree

    1 机器学习决策树 1.1机器学习中的决策树模型 ① 树模型不用做scaling ② 树模型不太需要做离散化 ③ ...

  • 机器学习 | 决策树及若干基础问题

    决策树 1.构造决策树 学习决策树就是学习一系列if/else问题,是我们能够以最快的速度得到正确答案。在机器学习...

  • ID3、C4.5、CART决策树生成算法总结

    简介 决策树模型是最常见的机器学习方法之一,也是入门机器学习必须掌握的知识。决策树模型呈现树形结构,在分类问题中,...

  • 第一章 统计学习方法概论

    1.1 统计学习 a. ~概念: 又叫统计机器学习,人们提到的机器学习往往指统计机器学习, 它是利用计算机对数据构...

  • 机器学习之决策树(Decision Tree)及其Python

    机器学习之决策树(Decision Tree)及其Python代码实现

  • 机器学习笔记(6):决策树

    本文来自之前在Udacity上自学机器学习的系列笔记。这是第6篇,介绍了监督学习中的决策树模型。 决策树 决策树是...

网友评论

      本文标题:统计机器学习-决策树

      本文链接:https://www.haomeiwen.com/subject/bdovfktx.html