初探决策树

决策树是机器学习中非常重要的一个算法,是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是IF-THEN规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪
接下来主要从以下三个方面开始介绍:

1. 特征选择
2. 决策树生成
3. 决策树剪枝

决策树学习本质上是从训练数据集中归纳出一组分类规则,与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个也没有,我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。从另一个角度看,决策树的学习是由训练数据集估计条件概率模型。

决策树的损失函数通常是正则化的极大似然函数,决策树的学习的策略是以损失函数为目标函数的最小化。当损失函数确定以后,学习问题就变为在损失函数意义下选择最优决策树的问题。因为从所有可能的决策树中选择最优决策树是NP完全问题,所以现实中决策树学习算法采用启发式方法,近似求解这一最优化问题,这样得到的决策树是次最优的。

决策树学习的算法通常是一个递归的选择最有特征,并根据该特征对训练数据进行分割,是的对各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。

特征选择
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。特征选择也是决策树学习的关键。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。通常特征选择的准则是信息增益或信息增益比

1. 信息增益
“信息熵”是度量样本集合纯度最常用的一种指标,是表示随机变量不确定性的度量。
假定当前样本集合D中第 k k 类样本所占的比例为pk,则D的信息熵定义为

Ent(D)=i=0npklog2pk E n t ( D ) = − ∑ i = 0 n p k l o g 2 p k

Ent(D)的值越小,则D的纯度越高。熵越大,随机变量的不确定性越大。
当p=0.5时,H(p) = 1,熵取值最大,随机变量不确定性最大。
“信息增益”表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。特征A对训练数据集D的信息增益 g(D,A) g ( D , A ) ,定义为集合D的经验熵 H(D) H ( D ) 与特征A给定条件下D的经验条件熵H(D|A)之差,即
g(D,A)=H(D)H(D|A) g ( D , A ) = H ( D ) − H ( D | A )

一般的,熵和条件熵之差称为互信息,决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
显然,对于数据集D而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益,信息增益大的特征具有更强的分类能力。

信息增益的计算方法:
输入:训练数据集D和特征A
输出:特征A对训练数据集D的信息增益g(D,A)
(1)计算数据集D的经验熵H(D)

H(D)=k=1K|Ck||D|log2|Ck||D| H ( D ) = − ∑ k = 1 K | C k | | D | l o g 2 | C k | | D |

(2)计算特征A对数据集D的经验条件熵H(D|A)
H(D|A)=I=1N|Di||D|H(Di)=i=1n|Di||D|k=1K|Dik||Di|log2|Dik||Di| 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 | l o g 2 | D i k | | D i |

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

以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,为减少这种偏好可能带来的影响,著名的C4.5决策树算法不直接使用信息增益,而是使用”增益率“

2. 信息增益比
特征A对训练数据集D的信息增益比定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵 HA(D) H A ( D ) 之比,即

gR(D,A)=g(D,A)HA(D) g R ( D , A ) = g ( D , A ) H A ( D )

其中, HA(D)=ni=1|Di||D|log2|Di||D| H A ( D ) = − ∑ i = 1 n | D i | | D | l o g 2 | D i | | D |
n 是特征A取值的个数
决策树的生成
根据不同的特征选择的方法,决策树的生成算法一般分为ID3算法和C4.5算法。

  1. ID3算法
    核心是在决策树各个节点上应用信息增益准则选择特征,递归的构建决策树。
    输入:训练数据集D,特征集A,阈值 ε ε
    输出:决策树T
    (1)若D中所有实例属于同一类 Ck C k ,则 T T 为单节点树,并将类Ck作为该节点的类标记,返回 T T
    (2) 若A=,则 T T 为单节点树,并将D中实例数最大的类 Ck C k 作为该节点的类标记,返回 T T
    (3)否则,计算A中各特征对D的信息增益,选择信息增益最大的特征Ag
    (4)如果 Ag A g 的信息增益小于阈值 ε ε ,则置 T T 为单节点树,并将D中实例数最大的类Ck作为该节点的类标记,返回 T T
    (5)否则,对Ag的每一个可能值 ai a i ,依 Ag=ai A g = a i 将D分割为若干非空子集 Di D i ,将 Di D i 中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树 T T ,返回T
    (6)对第 i i 个子节点,以Di为训练集,以 AAg A − A g 为特征集,递归的调用(1)-(5),得到子树 Ti T i ,返回 Ti T i
  2. C4.5算法
    C4.5和ID3相似,只是在选择特征时依据的是信息增益比。所以就不再详细描述了

决策树生成算法递归地产生决策树,知道不能继续下去为止,这样产生的树往往对训练数据的分类很准确,但对于未知的测试数据的分类却没有那么准确,即出现过拟合现象。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构造出复杂的决策树,解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。

3. 决策树的剪枝
剪枝是决策树处理”过拟合“的重要手段,是通过极小化决策树整体的损失函数或代价函数来实现的。决策树剪枝的基本策略有”预剪枝“和”后剪枝“
预剪枝就是在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶节点;
“预剪枝的几种停止条件”:

  1. 节点中样本为同一类
  2. 特征不足返回多类
  3. 如果某个分支没有值则返回父节点中的多类
  4. 样本个数小于阈值返回多类

    后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升,则将该子树替换成叶节点。
    决策树学习的损失函数可以定义为:

    Ca(T)=t=1|T|NtHt(T)+α|T| C a ( T ) = ∑ t = 1 | T | N t H t ( T ) + α | T |

    其中经验熵为
    Ht(T)=kNtkNtlogNtkNt H t ( T ) = − ∑ k N t k N t l o g N t k N t

    损失函数中的第一项表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, |T| | T | 表示模型复杂度,参数 α>0 α > 0 控制两者之间的影响,较大的 α α 促使选择较简单的模型,较小的 α α 促使选择较复杂的模型, α=0 α = 0 意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度

损失函数的极小化等价于正则化的极大似然估计,所以,利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。

详细介绍一下后剪枝算法:
输入:生成算法产生的整个树 T T ,参数α
输出:修剪后的子树 Ta T a
(1) 计算每个节点的经验熵
(2)递归地从树的叶节点向上回缩
设一组叶节点回缩到其父节点之前与之后的整体树分别为 Tb T b Ta T a ,其对应的损失函数值分别为 Ca(Tb) C a ( T b ) Ca(Ta) C a ( T a ) ,如果 Ca(Ta)Ca(Tb) C a ( T a ) ≤ C a ( T b ) ,则进行剪枝,即将父节点变为新的叶节点
(3)返回(2),直到不能继续为止,得到损失函数最小的子树 Ta T a


CART算法

分类回归树(CART),CART假设决策树是二叉树,内部节点特征的取值为”是“和”否“,左分支是取值为”是“的分支,右分支是取值为“否”的分支,这样的决策树等价于递归地二分每一个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布

1. CART生成
对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。
1.1 回归树的生成
输入:训练数据集D
输出:回归树 f(x) f ( x )
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树
(1) 选择最优切分变量 j j 与切分点s,求解

minj,s[minc1x1R1(j,s)(yic1)2+minc2x2R2(j,s)(yic2)2] m i n j , s [ m i n c 1 ∑ x 1 ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x 2 ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ]

遍历变量j,对固定的切分变量 j j 扫描切分点s,选择使得上式达到最小值的对 (j,s) ( j , s )
(2)用选定的对 (j,s) ( j , s ) 划分区域并决定相应的输出值
R1(j,s)=x|xjs,R2(j,s)=x|xjs R 1 ( j , s ) = x | x j ≤ s , R 2 ( j , s ) = x | x j ≥ s
cm=1Nmyi c m = 1 N m ∑ y i

(3)继续对两个字区域调用(1),(2),直至满足停止条件
(4) 将输入空间划分为M个区域,生成决策树
f(x)=m=1McmI(xRm) f ( x ) = ∑ m = 1 M c m I ( x ∈ R m )

1.2 分类树的生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
对于给定的样本集合D,基尼指数为
Gini(D)=1k=1K(|Ck||D|)2 G i n i ( D ) = 1 − ∑ k = 1 K ( | C k | | D | ) 2

这里 Ck C k 是D中属于第k类的样本子集,k是类的个数
输入:训练数据集D,停止计算的条件
输出:CART决策树
根据训练数据集,从根节点开始,递归地对每个节点进行以下操作,构建二叉决策树:
(1)设节点的训练数据集为D,计算现有特征对该数据集的基尼指数,此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割为 D1D2 D 1 和 D 2 两部分,计算 A=a A = a 时的基尼指数
(2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点,依最优特征与最优切分点,从现节点生成两个子节点,将训练数据集依特征分配到两个子节点中。
(3)对两个子节点递归地调用(1)(2),直至满足停止条件
(4) 生成CART决策树
算法停止计算的条件是节点中样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

2. CART剪枝
CART剪枝算法:首先从生成算法产生的决策树 Ta T a 地段开始不断剪枝,直到 T0 T 0 根节点,形成一个子树序列 (T0,T1,T2....) ( T 0 , T 1 , T 2 . . . . ) ,然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

决策树的优点:

  1. 易于理解和实现
  2. 对于决策树,数据的准备往往要简单或者不必要,其他的算法一般要求先把数据归一化。因为概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率。像SVM,线性回归之类的最优化问题就需要归一化。
  3. 能够同时处理数据型和常规型属性。
  4. 对缺失值不敏感
  5. 效率高,决策树只需要一次厚茧,反复使用,每一次预测的最大计算次数不超购决策树的深度

先写这么多,大部分的东西是参考李航的《统计学习方法》,后期会慢慢补上关于决策树的面试题目,有不正确的地方欢迎大家指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值