机器学习算法:决策树(decision tree)

目录

决策树

模型

决策树学习

特征选择

信息增益(Information Gain)

信息增益比(Information Gain Ratio)

决策树生成

ID3 算法

C4.5 算法

决策树剪枝

CART 算法(classification and regression tree)

CART回归树

CART分类树

CART树剪枝


决策树

  • 可用于分类与回归
  • 模型呈树形结构,if-else 规则集合
  • 优点:可读性好、分类速度快
  • 训练:根据损失函数最小化原则构建树,包括:特征选择、决策树生成、决策树修剪
  • 预测:用模型进行分类

 

模型

  • 树形结构,由节点和有向边组成
  • 节点有两种类型:内部节点和叶节点,内部节点表示一个特征,叶节点表示一个类
  • 可视作if-else规则集合,从根节点到叶节点经历的内部节点对应规则条件,叶节点对应规则结论,不同路径的规则互斥且完备,每个实例只满足一条规则。

下图是一棵训练好的决策树:

图 1. 决策树案例图

样本是贷款用户,规则有“是否拥有房产”、“是否结婚”、“月收入是否大于4k”,通过这些规则判断可将用户区分为两类:“可以偿还” 和“不能偿还”。

决策树属于“监督学习”算法,因为样本的类别(是否可以偿还)需要事先已知;其次,哪些判断规则要优先选择(先判断“有没有房产”还是“有没有结婚”),条件的阈值(月收入)都是要训练得到的参数。

 

条件概率分布

  • 决策树定义了在给定特征条件下类的概率分布,决策树多个路径将特征空间划分为互斥的单元,每个单元定义一个类的概率分布,决策树的概率分布由每个单元下的分布组成。
  • 设X为特征向量随机变量,Y为类别随机变量,这个概率表示为P(Y|X)。X取值于不同单元,Y取值于不同类别。在给定某个X(单元)下某个Y(类别)的取值最大,决策树就将该节点标记为该类。

 

决策树学习

给定训练集: 为输入,n为特征数,  为类标记, ,N为样本容量。

  • 学习目标:构建一个决策树模型,对样本正确分类
  • 与训练集不矛盾的决策树可能有多个,也可能没有,选较小的且泛化能力好的一个,另一个角度看是找到一个合适的条件概率(空间划分)
  • 损失函数:正则化的极大似然函数
  • 搜索最优决策树是NP难题,一般用启发式算法近似求解次优
  • 算法:
    • 特征选择:所有样本初始化在根节点,选择最优特征,选取分割点,保证将样本分到目前最好的类别(子节点)中。
    • 树生成:递归此过程知道所有样本都正确分类,或没有可用特征为止。此过程对应决策树的建立,也是特征空间的划分。考虑局部最优。
    • 树剪枝:为提高泛化能力,对决策树从下往上剪枝,使其不会过于复杂。考虑全局最优
  • 常用算法:ID3、C4.5、CART

 

特征选择

  • 选择对训练数据具有分类能力的特征,提高学习效率;若按某特征分类结果和随机分类差别不大,则称其为无分类能力
  • 分类能力判断准则:信息增益、信息增益比

信息熵(Information Entropy)

信息熵用于评价样本纯度,样本越纯,信息熵越小,或者说不确定性越小(信息论)

设X是取有限值的随机变量,概率分布为:

熵定义为:

  • 熵只依赖于X的分布,与X取值无关
  • 熵越大,不确定性越大。若X只会取0和1,则分布为:,熵为:。当p=0或1时,熵为0,没有不确定性。当p=0.5,熵为1达到最大,此时X不确定性最大。

条件熵

设随机变量(X, Y),联合概率分布为:,条件熵 H(Y|X) 表示已知X条件下Y的不确定性,定义为给定X条件下,Y的条件分布的熵对X的期望:

,这里 

当熵与条件熵由数据估计(极大似然估计)时,对应成为经验熵和条件经验熵。

 

信息增益(Information Gain)

表示得知特征X信息后,Y的不确定性减小的量。定义为:

 为集合经验熵, 为特征A给定条件下D的条件经验熵

信息增益也等价为“互信息”。信息增益大的特征更具有分类能力,所以应该优先选取信息增益最大的特征。

设训练集为D,样本数|D|,有K个类Ck,k=1,2,3……K。|Ck|为属于类Ck的样本数, 。A有n个不同取值,,根据A的值将D划分为n个子集,|Di|为第i个子集样本数,。子集Di中属于类Ck的样本数为Dik, ,|Dik|为Dik样本数。

 

信息增益算法

输入:训练集D和特征A

输出:特征A对训练集D的信息增益

  1. 计算数据集D经验熵H(D): 
  2. 计算特征A对数据集D的条件经验熵H(D|A): 
  3. 计算信息增益:

 

信息增益比(Information Gain Ratio)

信息增益偏向于选择取值较多的特征,如某个特征f ,取值多到能将每个样本分开,最后每个叶子节点最多只有一个样本,这种划分是最纯的,但是却未必合适。

信息增益率在信息增益的基础上,除以一项:

,n是特征A取值个数。

若 A 的取值较多,信息增益率越小。

 

决策树生成

ID3 算法

基于信息增益选择特征来构建决策树

输入:数据集D,特征A,阈值ε 

输出:决策树T

  1. 若D中所有实例属于同一类Ck,则统一放入根节点,标记为类Ck,返回T
  2. 若A=∅,则T为单节点树,将D标记为实例数最大的类Ck,返回T
  3. 计算A中各特征对D的信息增益,选择最大的特征Ag
  4. 若Ag 信息增益< ε ,则T为单节点树,将D标记为实例数最大的类Ck,返回T
  5. 否则对Ag的可能值ai,按照Ag=ai将D分割为多个非空子集Di,各自标记为Di中实例数最大的类,构建子节点,与原节点构成树T并返回。
  6. 对第i个子节点,以Di为训练集,以A - {Ag}为特征集,递归调用步骤1-5,得到子树Ti并返回。

C4.5 算法

区别于ID3,C4.5选择信息增益比来选择特征。

输入:数据集D,特征A,阈值ε 

输出:决策树T

  1. 若D中所有实例属于同一类Ck,则统一放入根节点,标记为类Ck,返回T
  2. 若A=∅,则T为单节点树,将D标记为实例数最大的类Ck,返回T
  3. 计算A中各特征对D的信息增益比,选择最大的特征Ag
  4. 若Ag 信息增益< ε ,则T为单节点树,将D标记为实例数最大的类Ck,返回T
  5. 否则对Ag的可能值ai,按照Ag=ai将D分割为多个非空子集Di,各自标记为Di中实例数最大的类,构建子节点,与原节点构成树T并返回。
  6. 对第i个子节点,以Di为训练集,以A - {Ag}为特征集,递归调用步骤1-5,得到子树Ti并返回。

 

决策树剪枝

决策树生成会一直进行到没有可用特征,这样的树往往泛化性能一般(过拟合),解决办法是对树进行简化(剪枝),一般通过极小化整体损失函数来实现。

设树T的叶节点个数为|T|,t是叶节点,其中有Nt个样本点,k类样本点有Ntk个,k=1,2...K,Ht(T)为叶节点t的经验熵, 为参数,则决策树的损失函数定义为:

其中经验熵为:

损失函数第一项为:

这时有:

C(T)表示模型对训练数据的预测误差,|T|表示模型复杂度。 控制两者之间的影响,较大的a选择较小(简单)的模型,较小的a选择较复杂的模型。

剪枝是在a确定时,选择损失函数最小的模型。决策树生成时只考虑提高信息增益(比)更好的拟合数据,剪枝则考虑了减少模型复杂度。生成是学习局部模型,剪枝是学习整体模型。

剪枝算法

输入:生成算法产生的树T,参数a

输出:剪枝后的树Ta

  1. 计算每个节点经验熵
  2. 递归的从叶节点向上回缩,设一组叶节点回缩到父节点前后的整体树分别为TB和TA,对应的损失函数为分别是Ca(TB)和Ca(TA),若Ca(TA) <= Ca(TB),则进行剪枝,将父节点变为新的叶节点。
  3. 返回2,知道不能继续,得到最小损失的树Ta

步骤2只涉及两个子树的损失函数,故可以用动态规划法。

 

CART 算法(classification and regression tree)

  • 可用于分类与回归
  • 是在给定输入X条件下输出Y的条件概率分布的学习算法
  • 假设决策树是二叉树,左分支代表“是”,右分支代表“否”
  • 依据训练集先尽可能大的生成决策树,以损失函数最小的标准用验证集对树进行剪枝
  • 对回归树用平方误差最小化策略(MMSE),对分类树采用基尼系数最小化策略。

CART回归树

设输入为X输出为Y,Y是连续变量,给定训练集

回归树对应输入空间的一份划分以及每个划分单元里的输出值。

设输入空间划分为M个单元R1,R2...RM,每个单元有固定输出值cm,回归树模型可以表示为:

输入空间划分确定时,可用平方误差 表示数对训练数据的预测误差,用平方误差最小原则求解每个单元上的输出值。

明显对于单元Rm上cm的最优值是Rm上所有实例xi对应输出yi的均值,即:

对于空间的划分,这里采用启发式方法,选择第j个变量 和它的取值s作为切分变量和切分点,定义两个区域:

 ,

要寻找最佳切分变量j和最佳切分点s,即求解:

对固定变量j 可得最优切分点s:

 ,

遍历所有输入变量,找到最优切分变量j,构造一个对(j,s),以此将输入空间划分为两个区域。重复以上过程直到满足条件,这样的回归树成为最小二乘回归树。

最小二乘回归树生成算法

输入:训练集D

输出:回归树f(x)

在训练集所在的输入空间中,递归的将每个区域划分为两个子区域,并计算其输出值

  1. 选择最优切变量j和最优切分点s,求解:

    遍历j,对固定的j扫描切分点s,找到使上式最小的(j,s)
  2. 用选定的(j,s)划分区域并决定输出值

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

CART分类树

用基尼系数选择最优特征,并决定最优分割点

基尼指数

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

对二分类问题,样本属于第一类概率为p,则基尼指数为:

样本集合D的基尼指数为:

Ck是D中属于第k类的样本子集,K是类别个数。

若样本D根据特征A是否取值为a分为D1和D2两部分,

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

基尼指数表示集合D的不确定性,基尼指数  表示D 经过A=a划分后的不确定性。基尼指数越大,不确定性越大

二分类中基尼指数Gini(D) 、熵的一半H(p)/2和分类误差率的关系

 

CART分类树生成算法

输入:训练集D,停止条件

输出:CART决策树

根据训练集从根节点开始,递归进行以下操作:

  1. 对训练集D,计算现有特征对其的基尼指数。对每个特征A的每个可能取值a,计算基尼指数:
  2. 选择基尼指数最小的特征及其切分点作为最优解,以此将当前节点划分为两个子节点,将训练集按照特征值划分进去。
  3. 对两个子节点递归调用步骤1,2,直到满足停止条件(节点中样本数少于阈值,或节点样本基尼指数小于阈值,或没有更多特征)
  4. 生成分类树

 

CART树剪枝

从生成的树底端减去一些子树,是的模型更简单,泛化能力更强。

  • 由两步组成,先从生成决策树T0底端不断剪枝,知道根节点,形成子树序列
  • 通过交叉验证法在验证集对子树进行测试,选择最优子树
  1. 剪枝,形成子树序列。每棵子树计算损失函数:,T为任意子树,C(T)为对训练集的预测误差,|T|为子树叶节点个数。为参数,为子树T的整体损失。对固定的 一定存在使损失函数最小的子树,将其表示为Ta,可证明这样的子树是唯一的 大时,最优子树偏小,反之偏大。 = 0时,整体树最优;当趋于无穷,只有根节点的子树最优。可用递归法对树进行剪枝,将 从小增大,  ,产生一系列区间。剪枝得到的子树 序列对应区间 的最优子树序列 ,序列中的子树是嵌套的。具体如下:
    1. 从整体树T0开始剪枝,对T0内部任意节点t,以t为单节点树的损失函数为:,以t为根节点的子树Tt的损失函数为:。当=0 或充分小时,有式子成立: 。当 增大时,在某个值有: 。继续增大,则不等式反向。而当,Tt与t具有相同损失,因t节点少,因此对Tt进行剪枝。
    2. 因此对T0任意内部节点,计算,表示剪枝后整体损失函数的减少程度。在T0中减去g(t)最小的Tt,得到的子树作为T1,同时将最小的g(t)设为。T1为区间  的最优子树。不断剪枝,不断增加值获得新区间。
  2. 在剪枝得到的子树序列 中通过交叉验证获得最优子树:利用独立的验证集,测试子树序列 的平方误差或基尼指数,值最小的决策树视作最优子树。因每棵子树 都对应一个参数,所以当子树确定,也确定了。

剪枝算法

输入:生成决策树T0

输出:最优决策树Ta

  1. 设k=0,T=T0
  2. 设 
  3. 自下而上对各内部节点t,计算 C(Tt),|Tt|以及


    Tt表示以t为根节点的子树,C(Tt)是对训练数据的预测误差。|Tt|是Tt的叶节点个数。
  4. 对g(t) = a的内部节点t进行剪枝,并对叶节点t以多数表决决定其类别,得到树T。
  5. 设k = k + 1,ak=a,Tk = T
  6. 若Tk不是由根节点和两个叶节点构成的树,则回到步骤2,否则令Tk=Tn
  7. 采用交叉验证法在子树序列T0,T1...Tn中选取最优子树Ta

 

转自《统计学习方法 第二版》

决策树算法介绍及应用 IBM Developer

机器学习笔记--决策树

决策树基础

深入浅出理解决策树算法(一)-核心思想

算法杂货铺——分类算法之决策树(Decision tree)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值