Loading [MathJax]/jax/output/CommonHTML/autoload/mtable.js

统计学习方法学习笔记-05-决策树

首先介绍决策树的基本概念,然后通过ID3ID3C4.5C4.5介绍特征的选择、决策树的生成以及决策树的修剪,最后介绍CARTCART算法

决策树模型与学习

  • 分类决策树模型的树结构有两种结点,内部结点表示一个特征或属性,叶结点表示一个类;
  • 决策树所有的从根节点到叶结点的路径构成if-else规则集,这些规则是互斥且完备的;
  • 决策树学习算法包含特征选择、决策树的生成和决策树的修剪
  • 从可能的决策树中直接选取最优决策树是NPNP完全问题,现实中采用启发式方法学习次优的决策树

特征选择

如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的,特征选择在于选取对训练数据具有分类能力的特征,特征选择的准则一般是信息增益或信息增益比

信息增益

  • XX是一个取有限个值的离散随机变量,其概率分布为P(X=xi)=pi,i=1,2,,nP(X=xi)=pi,i=1,2,,n,则随机变量XX的熵为:

H(X)=ni=1pilogpiH(X)=ni=1pilogpi

熵越大,随机变量的不确定性越大,0H(p)logn0H(p)logn

  • 条件熵:H(Y|X)H(Y|X)表示在已知随机变量XX的条件下随机变量YY的不确定性,定义为XX给定条件下YY的条件概率分布的熵对XX的数学期望

H(Y|X)=ni=1piH(Y|X=xi)H(Y|X)=ni=1piH(Y|X=xi)

这里pi=P(X=xi),i=1,2,,npi=P(X=xi),i=1,2,,n

  • 信息增益表示得知特征XX的信息而使得类YY的信息的不确定性减少的程度,特征AA对训练数据集DD的信息增益g(D,A)g(D,A),定义为集合DD的经验熵H(D)H(D)与特征AA给定条件下DD的经验条件熵H(D|A)H(D|A)之差:

g(D,A)=H(D)H(D|A)g(D,A)=H(D)H(D|A)

信息增益的算法

输入:训练数据集DD和特征AA
输出:特征AA对训练数据集DD的信息增益g(D,A)g(D,A)
设训练数据集为DD|D||D|表示其样本容量,即样本个数,设有KK个类Ck,k=1,2,,K,|Ck|Ck,k=1,2,,K,|Ck|为属于类CkCk的样本个数,Kk=1|Ck|=|D|Kk=1|Ck|=|D|,设特征AAnn个不同的取值{a1,a2,,an}{a1,a2,,an},根据特征AA的取值将DD划分为nn个子集D1,D2,,DnD1,D2,,Dn|Di||Di|DiDi的样本个数,ni=1|Di|=|D|ni=1|Di|=|D|,记子集DiDi中属于类CkCk的样本的集合为DikDikDik=DiCk,|Dik|Dik=DiCk,|Dik|DikDik的样本个数

  • 计算数据集DD的经验熵H(D)H(D)

H(D)=Kk=1|Ck||D|log2|Ck||D|H(D)=Kk=1|Ck||D|log2|Ck||D|

  • 计算特征AA对数据集DD的经验条件熵H(D|A)H(D|A)

H(D|A)=ni=1|Di||D|H(Di)=ni=1|Di||D|Kk=1|Dik||Di|log2|Dik||Di|H(D|A)=ni=1|Di||D|H(Di)=ni=1|Di||D|Kk=1|Dik||Di|log2|Dik||Di|

  • 计算信息增益

g(D,A)=H(D)H(D|A)g(D,A)=H(D)H(D|A)

信息增益比

目的:以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比来校正

  • 特征AA对训练数据集DD的信息增益比gR(D,A)gR(D,A)定义为其信息增益g(D,A)g(D,A)与训练数据集DD关于特征AA的值的熵HA(D)HA(D)之比

gR(D,A)=g(D,A)HA(D)=g(D,A)ni=1|Di|Dlog2|Di|D

决策树的生成

ID3算法

输入:训练数据集D,特征集A,阈值ε
输出:决策树T

  • D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T;
  • A=,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;
  • 否则计算各特征对D的信息增益,选择信息增益最大的特征Ag
  • 如果Ag的信息增益小于阈值ε,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;
  • 否则,对Ag的每一个可能取值ai,依Ag=aiD分割为非空子集Di,将Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T
  • 对第i个子结点,以Di为训练集,以A{Ag}为特征集,递归的调用第一步到第五步,得到子树Ti,返回Ti

C4.5生成算法

输入:训练数据集D,特征集A,阈值ε
输出:决策树T

  • D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T;
  • A=,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;
  • 否则计算各特征对D的信息增益比,选择信息增益比最大的特征Ag
  • 如果Ag的信息增益比小于阈值ε,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;
  • 否则,对Ag的每一个可能取值ai,依Ag=aiD分割为非空子集Di,将Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T
  • 对第i个子结点,以Di为训练集,以A{Ag}为特征集,递归的调用第一步到第五步,得到子树Ti,返回Ti

决策树的剪枝

目的:解决过拟合问题

剪枝时的损失函数

设树T的叶结点个数为|T|t是树T的叶结点,该叶结点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2,,KHt(T)为叶结点t上的经验熵,α0为参数,则决策树学习的损失函数可以定义为:

Cα(T)=|T|t=1NtHt(T)+α|T|

其中经验熵为:

Ht(T)=kNtkNtlogNtkNt

将式子左边记为:

C(T)=|T|t=1NtHt(T)=|T|t=1Kk=1NtklogNtkNt

有:

Cα(T)=C(T)+α|T|

C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型复杂度,参数α控制两者之间的影响,较大促使选择较简单的模型,较小促使选择较复杂的模型

树的剪枝算法

α确定时,选择损失函数最小的模型
输入:生成算法产生的整个树T,参数α
输出:修剪后的子树Tα

  • 计算每个结点的经验熵
  • 递归的从树的叶结点向上回缩,设一组叶结点回缩到其父结点之前与之后的整体树分别为TBTA,其对应的损失函数分别是Cα(TB)Cα(TA),如果Cα(TB)Cα(TA),则进行剪枝,即将父结点变为新的叶结点。
  • 返回第二步,直到不能继续为止,得到损失函数最小的子树Tα

CART算法

classification and regression tree分类与回归树模型

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

回归树的生成

假设输入XY分别为输入和输出变量,并且Y是连续变量,给定训练数据集D={(x1,y1),(x2,y2),,(xN,yN)}
输入:训练数据集D;
输出:回归树f(x),对应着将特征空间划分为M个单元R1,R2,,RM,在每个单元上有一个固定的输出值cm;

  • 选择最优切分变量j与切分点s,求解

minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]

选择第j个变量x(j)和它取的值s作为切分变量和切分点,定义两个区域R1(j,s)={x|x(j)s},R2(j,s)={x|x(j)>s},遍历变量j,对固定的切分变量j扫描切分点s,选择使上式达到最小值的对(j,s)

  • 用选定的对(j,s)划分区域并决定相应的输出值:

R1(j,s)={x|x(j)s},R2(j,s)={x|x(j)>s}ˆcm=1NmxiRm(j,s)yi,xRm,m=1,2

  • 继续对两个子区域调用步骤1,2,直到满足停止条件;
  • 将输入空间划分为M个区域R1,R2,,RM,生成决策树:

f(x)=Mm=1ˆcmI(xRm)

分类树的生成

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

基尼指数

分类问题中,假设有K个类,样本点属于第k类的概率为pk,则概率分布的基尼指数定义:

Gini(p)=Kk=1pk(1pk)=1Kk=1p2k

对于给定的样本集合D,其基尼指数为:

Gini(D)=1Kk=1(|Ck||D|)2

CkD中属于第k类的样本子集,K是类的个数。
如果样本集合D根据特征A是否取某一可能值a被分割成D1D2两部分,即:

D1={(x,y)D|A(x)=a},D2=DD1

则在特征A的条件下,集合D的基尼指数定义为:

Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经A=a分割后集合D的不确定性,基尼指数值越大,样本集合的不确定性越大。

CART生成算法

输入:训练数据集D,停止计算的条件;
输出:CART决策树;

  • 设节点的训练数据集为D,计算现有特征对该数据集的基尼指数,此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成D1D2两部分,计算A=a的基尼指数
  • 在所有可能额特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现有结点生成两个子结点,将训练数据集依特征分配到两个子结点中去;
  • 对两个子结点递归的调用1,2步,直至满足停止条件
  • 生成CART决策树
    算法停止计算的条件是节点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART剪枝

首先从生成算法产生的决策树T0底端开始不断剪枝,直到T0的根结点,形成一个子树序列{T0,T1,,Tn},之后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树

剪枝,形成一个子树序列

  • 子树的损失函数:

Cα(T)=C(T)+α|T|

  • 对整体树T0开始剪枝,对T0的任意内部结点t,以t为单结点树的损失函数是:

Cα(t)=C(t)+α

  • t为根结点的子树Tt的损失函数是:

Cα(Tt)=C(Tt)+α|Tt|

  • α=0时,有不等式:

Cα(Tt)=Cα(t)

  • α不断增大时,不等式反向
  • α=C(t)C(Tt)|Tt|1时,Ttt有相同的损失函数值,也就是单个节点的损失函数值和一颗子树的损失函数值相同,所以这课子树可以被剪掉
  • T0中的每一个内部结点进行计算:

g(t)=C(t)C(Tt)|Tt|1

T0中减去g(t)最小的子树Tt,将得到的子树作为T1,同时将最小的g(t)设为α1T1为区间[α1,α2)的最优子树,如此剪枝下去,不断增加α的值,产生了新的区间。

在剪枝得到的子树序列中通过交叉验证选取最优子树

  • 使用独立的验证数据集,测试子树序列T0,T1,,Tn中各棵子树的平方误差或基尼指数
  • 平方误差或基尼指数最小的决策树被称为最优的决策树Tα
  • 子树和α是一一对应的

CART剪枝算法

输入:CART算法生成的决策树T0
输出:最优决策树Tα

  • k=0,T=T0
  • α=+
  • 自下而上的对各内部节点t计算:

g(t)=C(t)C(Tt)|Tt|1α=min(α,g(t))

  • g(t)=α的内部结点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T
  • k=k+1,αk=α,Tk=T
  • 如果Tk不是由根结点及两个叶结点构成的树,则回到第二步,否则Tk=Tn
  • 采用交叉验证法在子树序列T0,T1,,Tn中选取最优子树Tα
posted @   eryo  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示