机器学习算法学习笔记:决策树

文章目录

  • 一、理论篇
    • 1、概述
    • 2、基本流程
    • 3、划分选择
      • 3.1、信息熵和信息增益
      • 3.2、增益率
      • 3.3、基尼指数
      • 3.4、ID3,C4.5,CART三种算法的对比
    • 4、剪枝处理
    • 5、连续值处理
    • 6、缺失值处理

一、理论篇

1、概述

决策树是一种常见的分类模型,也可用于回归模型,在金融分控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法。例如在婚恋市场中,女方通常会先看男方是否有房产,如果有房产再看是否有车产,如果有车产再看是否有稳定工作……最后得出是否要深入了解的判断。
决策树的主要优点:
(1)具有很好的解释性,模型可以生成可以理解的规则;
(2)可以发现特征的重要程度;
(3)模型的计算复杂度较低。
决策树的主要缺点:
(1)模型容易过拟合,需要采用剪枝技术处理。
(2)不能很好利用连续型特征。
(3)预测能力有限,无法达到其他强监督模型效果。
(4)方差较高,数据分布的轻微改变很容易造成树结构完全不同。

2、基本流程

决策树基于“树”结构进行决策,它将算法组织成一颗树的形式,即将平时所说的if-then语句构建成了树的形式。如下图就是一颗简略版的决策树。
机器学习算法学习笔记:决策树_第1张图片
一般地,一棵决策树可以分成三个部分:一个根结点、若干个内部结点和若干个叶结点
每个“叶结点”对应于一个“预测/决策结果”,其他每个“结点”对应于某个属性上的“测试”。
每个分支对应于该测试的一种可能结果(即该属性的某个取值)。
基本流程:决策就是从根结点开始走到叶结点的过程。每经过一个节点的判定,数据集就按照答案(属性值)划分为若干子集,在子节点做判定时只需要考虑对应的数据子集就可以了。
决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
决策树的三种停止条件:
(1)当前结点包含的样本全属于同一类别,无需划分;
(2)当前属性集为空, 或是所有样本在所有属性上取值相同,无法划分;
(3)当前结点包含的样本集合为空,不能划分。

【例子】根据下面的数据集,构建一颗决策树。
(这里我们先不要考虑选择哪个属性进行优先划分的问题,后面会讲到!)
机器学习算法学习笔记:决策树_第2张图片
机器学习算法学习笔记:决策树_第3张图片

3、划分选择

如何选择最有划分属性是决策树学习的关键。一般而言,随着划分过程地不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。

3.1、信息熵和信息增益

信息熵是度量样本集合“纯度”最常用的一种指标。假定当前样本集合 D D D中第 k k k类样本所占的比例为 p k p_k pk信息熵定义为 E n t ( D ) = ∑ i = 1 ∣ Y ∣ − p k l o g 2 p k Ent(D)=\sum_{i=1}^{|Y|}-p_klog_2p_k Ent(D)=i=1Ypklog2pk
E n t ( D ) Ent(D) Ent(D)值越大,信息熵越大,表示样本集的混乱程度(不确定性)越高,纯度越低。反之, E n t ( D ) Ent(D) Ent(D)值越小,信息熵越小,表示样本集的混乱程度(不确定性)越低,纯度越高。

【例子】假如我们有下面A、B、C三个箱子,里面各装有小球30个,其中:
A:{“1、2、3、4、5、6”号球各5个};
B:{“1”号球15个,“2、3、4、5、6”号球各3个};
C:{“1”号球30个}。
接下来,我们根据上面的公式计算每个集合的信息熵:
A: − ( 1 6 × l o g 2 1 6 ) × 6 ≈ 2.585 -(\cfrac{1}{6}×log_2\cfrac{1}{6})×6≈2.585 (61×log261)×62.585
B: − ( 1 10 × l o g 2 1 10 ) × 5 − 1 2 × l o g 2 1 2 ≈ 2.161 -(\cfrac{1}{10}×log_2\cfrac{1}{10})×5-\cfrac{1}{2}×log_2\cfrac{1}{2}≈2.161 (101×log2101)×521×log2212.161
C: − 1 × l o g 2 1 = 0 -1×log_21=0 1×log21=0
从上面的例子可以看出, E n t ( A ) Ent(A) Ent(A)> E n t ( B ) Ent(B) Ent(B)> E n t ( C ) Ent(C) Ent(C),说明C集合样本纯度最高,B集合次之,A集合样本纯度最低。

信息增益:表示得知特征 X X X的信息而使得类 Y Y Y的信息的不确定性减小的程度。
假设离散属性 a a a V V V个可能的取值: { a 1 , a 2 , . . . . . . , a V } \{a^1,a^2,......,a^V\} {a1,a2,......,aV} D v D_v Dv表示 D D D中在 a a a上取值等于 a v a^v av的样本的集合。
以属性 a a a对数据集 D D D进行划分所获得的信息增益就是划分前的信息熵减去划分后的信息熵(条件熵),计算公式如下: G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\cfrac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)
信息增益是ID3算法采用的最优属性划分选择准则。划分后的信息熵越小,Gain(D)值越大,表示样本集的纯度越高。

【ID3算法的缺点】
(1)ID3没有剪枝策略,容易过拟合;
(2)信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;
(3)只能用于处理离散分布的特征;
(4)没有考虑缺失值。

3.2、增益率

实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,C4.5决策树算法没有直接使用信息增益,而是使用“增益率”来选择最优属划分属性。
C4.5 算法最大的特点就是克服了 ID3 对特征数目的偏重这一缺点,引入信息增益率来作为分类标准。
增益率的计算公式如下: G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ratio(D,a)=\cfrac{Gain(D,a)}{IV(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)
其中, I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^{V}\cfrac{|D^v|}{|D|}log_2\cfrac{|D^v|}{|D|} IV(a)=v=1VDDvlog2DDv称为属性 a a a的“固有值”。属性 a a a的可能取值数目越多(即 V V V越大),则 I V ( a ) IV(a) IV(a)的值通常会越大。
这里需要注意,信息增益率对可取值较少的特征有所偏好(分母越小,整体越大),因此 C4.5 并不是直接用增益率最大的特征进行划分,而是使用一个启发式方法:先从候选划分特征中找到信息增益高于平均值的特征,再从中选择增益率最高的。

C4.5 相对于 ID3 的缺点对应有以下改进方式
(1)引入悲观剪枝策略进行后剪枝
(2)引入信息增益率作为划分标准;
(3)将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
(4)对于缺失值的处理可以分为两个子问题:1. 在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)2. 选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
①针对问题一,C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
②针对问题二,C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。

【C4.5算法的缺点】
(1)剪枝策略可以再优化;
(2)C4.5 用的是多叉树,用二叉树效率更高;
(3)C4.5 只能用于分类;
(4)C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
(5)C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。

3.3、基尼指数

ID3 和 C4.5 虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但是其生成的决策树分支、规模都比较大,CART 算法的二分法可以简化决策树的规模,提高生成决策树的效率。

CART 包含的基本过程有分裂,剪枝和树选择。
(1)分裂:分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;
(2)剪枝:采用代价复杂度剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象,直到只剩下根节点。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;
(3)树选择:用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证)。

【CART 在 C4.5 的基础上进行了很多提升】
(1)C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
(2)C4.5 只能分类,CART 既可以分类也可以回归;
(3)CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
(4)CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
(5)CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。

熵模型拥有大量耗时的对数运算,基尼指数在简化模型的同时还保留了熵模型的优点。基尼指数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(率)正好相反。

CART决策树使用“基尼系数”来选择划分属性。数据集 D D D的纯度可用基尼值来衡量: G i n i ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 ∣ Y ∣ p k 2 Gini(D)=\sum_{k=1}^{|Y|}\sum_{k'≠k}^{}p_kp_{k'}=1-\sum_{k=1}^{|Y|}p^{2}_{k} Gini(D)=k=1Yk=kpkpk=1k=1Ypk2
G i n i ( D ) Gini(D) Gini(D)反映了从数据集 D D D中随机抽取两个样例,其类别标记不一致的概率。 G i n i ( D ) Gini(D) Gini(D)越小,数据集 D D D的纯度越高。
属性 a a a的基尼指数: G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini\_index(D,a)=\sum_{v=1}^{V}\cfrac{|D^v|}{|D|}Gini(D)=\cfrac{|D_1|}{|D|}Gini(D_1)+\cfrac{|D_2|}{|D|}Gini(D_2) Gini_index(D,a)=v=1VDDvGini(D)=DD1Gini(D1)+DD2Gini(D2)
在候选属性集合中,选取那个使划分后基尼指数最小的属性。

3.4、ID3,C4.5,CART三种算法的对比

机器学习算法学习笔记:决策树_第4张图片
【ID3、C4.5 和 CART 三者之间的差异】
除了之前列出来的划分标准、剪枝策略、连续值确实值处理方式等之外,还有一些其他差异:
(1)划分标准的差异:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺点,偏向于特征值小的特征,CART 使用基尼指数克服 C4.5 需要求 log 的巨大计算量,偏向于特征值较多的特征。
(2)使用场景的差异:ID3 和 C4.5 都只能用于分类问题,CART 可以用于分类和回归问题;ID3 和 C4.5 是多叉树,速度较慢,CART 是二叉树,计算速度很快;
(3)样本数据的差异:ID3 只能处理离散数据且缺失值敏感,C4.5 和 CART 可以处理连续性数据且有多种方式处理缺失值;从样本量考虑的话,小样本建议 C4.5、大样本建议 CART。C4.5 处理过程中需对数据集进行多次扫描排序,处理成本耗时较高,而 CART 本身是一种大样本的统计方法,小样本处理下泛化误差较大 ;
(4)样本特征的差异:ID3 和 C4.5 层级之间只使用一次特征,CART 可多次重复使用特征;
(5)剪枝策略的差异:ID3 没有剪枝策略,C4.5 是通过悲观剪枝策略来修正树的准确性,而 CART 是通过代价复杂度剪枝。

4、剪枝处理

为了尽可能正确分类训练样本,有可能造成分支过多,造成过拟合。因此,可通过主动去掉一些分支来降低过拟合的风险。
剪枝通常有两种基本策略:
(1)预剪枝 (pre-pruning):提前终止某些分支的生长。(“未雨绸缪”)

在节点划分前来确定是否继续增长,及早停止增长的主要方法有:
①节点内数据样本低于某一阈值;
②所有节点特征都已分裂;
③节点划分前准确率比划分后准确率高。

(2)后剪枝 (post-pruning): 生成一棵完全树,再“回头”剪枝。(“亡羊补牢”)

C4.5 采用的悲观剪枝方法,用递归的方式从低往上针对每一个非叶子节点,评估用一个最佳叶子节点去代替这课子树是否有益。如果剪枝后与剪枝前相比其错误率是保持或者下降,则这棵子树就可以被替换掉。C4.5 通过训练数据集上的错误分类数量来估算未知样本上的错误率。

预剪枝VS后剪枝:
机器学习算法学习笔记:决策树_第5张图片
机器学习算法学习笔记:决策树_第6张图片

5、连续值处理

由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可能取值来对结点进行划分。我们将采用“二分法”对连续属性进行离散化处理。
二分法计算公式如下: a i + a i + 1 2 \cfrac{a_i+a_{i+1}}{2} 2ai+ai+1
假设我们有下面连续属性 a a a的10个属性值:

属性 a a a 125 100 70 120 95 60 220 85 75 90

首先,将10个数按照“从小到大”进行排列:

属性 a a a 60 70 75 85 90 95 100 120 125 220

划分点的计算:

划分点 65 72.5 80 87.5 92.5 97.5 110 122.5 172.5

这样,我们就可以像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分。

【需要注意的是,与离散属性值不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性】

6、缺失值处理

前面我们讨论的决策树的生成和修剪都是基于完整的数据集的。但实际情况中,数据缺失很普遍,可能是训练集数据的某些特征缺失,也有可能是测试集数据的某些特征缺失。缺失数据的处理方式通常有3种:删除、推算和归类。
(1)删除法
删除数据最简单,有两种方式:
①删除行(数据点)。
②删除列(特征)。
删除法的优点
①操作简单。
②可以用在任何模型中。
删除法的缺点
①删除的数据可能包含重要信息。
②不知道删除行还是删除列好。
③对缺失数据的测试集没用。
(2)推算法
根据特征值是分类型变量还是数值型变量,有两种推算方法:
①用众数来推算分类型变量。
②用平均数来推算数值型变量。
推算法的优点
①操作简单。
②可以用在任何模型中。
③对缺失数据的测试集有用。
推算法的缺点
可能会造成系统性误差。
(3)归类法
归类法的核心思想是把缺失值也当作一种特征值。
当某个特征的特征值确缺失时,在最开始我们无法利用决策树来做出决策。我们只需要把该特征的缺失值归为某一类,就可以得出决策。
将缺失值归为哪一类其实是由最小错误率决定的。
比如对于特征“长相”对应的三个特征值“好看”,“一般”和“难看”,该特征出现了缺失值。那么我们就分别计算将缺失值分别划分到“好看”,“一般”和“难看”三个类别的错误率,哪个错误率最小就将缺失值划分到对应的那个类别。
归类法的优点
①比删除法和推算法的预测更准。
②对有缺失数据的训练集和测试集都有用。
归类法的缺点
每次归类时都需要运行决策树的分裂算法,效率比其他两种方法低。

你可能感兴趣的:(机器学习,机器学习,决策树)