决策树简介

一. 决策树算法简介

决策树是一种常见的机器学习算法,通过模拟人类思考的树状模式,通过对特征值的一次次判断划分最终得到想要的答案。因此本算法的重点就在于选取最优特征值对目标进行划分,而后递归地进行这一步,直到最后仅剩下同一类型的目标或者目标不可再分。

决策树算法中常见的选取特征值方法有三种:

  • ID3算法
  • C4.5算法
  • CART算法

本文将对这三种方法进行简要介绍

二. ID3算法

2.1 算法简介

ID3算法全称Iterative Dichotomiser 3,即迭代二叉树算法第三代,是通过计算信息增益选出最优特征值。并以此递归地进行分类直到完成决策树地构建。

2.2 信息增益

信息增益(Information Gain)是用于特征选择的一个重要指标,其衡量了知道信息特征后类别不确定性减少的程度。信息增益即原始数据的熵与条件熵之差,计算公式是

G a i n ( T , A ) = H ( T ) − H ( T ∣ A ) Gain(T,A) = H(T) - H(T|A) Gain(T,A)=H(T)H(TA)
此处的Gain(T,A) 就是集合T基于条件A的信息增益,H则表示熵,H(T) 表示原始数据的熵,H(T|A) 表示条件熵

2.2.1 熵

熵描述了一个系统中的混乱程度高低,当熵的数值高时,系统的混乱程度高,反之则有序程度高。其计算公式通常表示为
H ( X ) = − ∑ i = 1 n p ( x i ) ⋅ l o g 2 p ( x i ) H(X) = -\sum\limits_{i=1}^np(x_i)\cdot log_2p(x_i) H(X)=i=1np(xi)log2p(xi)
简单来说,这个公式是在计算每个可能事件发生所带来的信息量的期望值。此处的**p(xi)表示的是X条件下第i个事件发生的概率,则熵的计算公式即该条件下各个事件发生的期望值的和的取反。如下表,如要计算条件温度的熵,则需要计算热、温暖、冷三个事件的期望值。

天气温度湿度风速是否下雨
晴朗
阴天温暖
雨天正常
晴朗温暖
晴朗正常

而当我们根据上述公式计算得到每个事件的熵,我们可以根据下列公式得到该条件的条件熵
H ( T ∣ X ) = ∑ x ∈ X p ( x ) H ( T ∣ X = x ) H(T|X) = \sum\limits_{x\in X}p(x)H(T|X=x) H(TX)=xXp(x)H(TX=x)
即每个事件的熵的和乘上发生的额概率,最后求和即可得到条件X的条件熵

2.2.2 例子

接下来我们以上面的表格为例子,进行计算的示例。

在这个数据集中,总共有四个条件,目的是判断是否下雨,首先我们需要计算整个数据集的熵。在这个数据集中,五天里有三天下雨,两天不下雨,根据公式可得
H ( T ) = − ( 3 5 l o g 2 3 5 + 2 5 l o g 2 2 5 ) ≈ 1.351 H(T) = -(\dfrac{3}{5}log_2\dfrac{3}{5} +\dfrac{2}{5}log_2\dfrac{2}{5})\approx1.351 H(T)=(53log253+52log252)1.351
则可得整个数据集的熵为1.351,之后我们需要依此计算每个条件的条件熵,以风速为例,风速条件有两个事件,依次用H1和H2表示风速强和弱的熵。首先数据集中有两天是强风,其中两天都下雨,则有
H 1 = − 1 l o g 2 1 = 0 H_1 = -1log_21 = 0 H1=1log21=0
因为只要风速是强的,就一定会下雨,则此处的熵为0,根据上述式子的计算也可得这一结论,接下来计算风速弱的条件熵,共有三天风速弱,其中两天没有下雨一天下雨,则有
H 2 = − ( 2 3 l o g 2 2 3 + 1 3 l o g 2 1 3 ) ≈ 0.918 H_2 = -(\dfrac{2}{3}log_2\dfrac{2}{3}+\dfrac{1}{3}log_2\dfrac{1}{3})\approx0.918 H2=(32log232+31log231)0.918
此时便能计算条件风速的条件熵
H ( T ∣ 风速 ) = 2 5 ⋅ H 1 + 3 5 ⋅ H 2 = 0.551 H(T|风速) = \dfrac{2}{5}\cdot H_1+\dfrac{3}{5}\cdot H_2 = 0.551 H(T风速)=52H1+53H2=0.551
则有条件风速下的信息增益
G a i n ( T ∣ 风速 ) = H ( T ) − H ( T ∣ 风速 ) = 1.351 − 0.551 = 0.8 Gain(T|风速) = H(T)-H(T|风速)=1.351-0.551=0.8 Gain(T风速)=H(T)H(T风速)=1.3510.551=0.8

2.3 决策树构建

前面已经提到过,ID3法是通过选取最佳特征值作为划分的节点,而此处的最佳特征值的选取标准就是信息增益的高低,当我们计算完各个条件的信息增益后,我们选取信息增益最大的那个条件作为第一次划分的条件

仍以上面的数据集为例子,由计算可得

条件信息增益
天气0.8002
温度0.551
湿度0.8002
风速0.8

此时可得天气和湿度的信息增益最大,二者都可作为第一次划分的条件,这里我们选择天气,则可得

晴朗
阴天
雨天
开始
天气
不下雨
下雨
下雨

由此即可构成一个简单的决策树,但我们发现在晴朗中并不是一定不下雨,由此我们可以考虑对其进行深化,但是当晴朗条件下,有

温度湿度风速是否下雨
晴朗
晴朗温暖
晴朗正常

根据计算得

条件信息增益
温度0
风速0
湿度0

可知信息增益皆为0,无法继续深化。

由于数据集比较小,较为容易出现这种情况,但当数据集较大时,我们可以依照上述流程继续深化,直到

  • 信息增益低于一定阈值
  • 叶子结点达到一定纯度

三. C4.5算法

3.1 算法简介

C4.5算法是ID3算法的改良版,区别于ID3算法使用信息增益选取最优项,C4.5算法使用信息增益率来作为选取的指标。

3.2 信息增益率

3.2.1 固有值

首先我们需要知道,在计算中,当一个条件下有多个取值,就会导致数据集分割成较多个子集,因而使得每个自己会相对的纯净,由此整个条件的熵就会变小,使信息增益率变大。这便让信息增益成为选取最优值得指标时会偏向于选取值多的选项,而这在一定程度上是不公平的。

而信息增益率相较于信息增益的提升,就在于**固有值(SplitInfo)**这一概念的引入。

固有值反映了属性分裂后各子集的均匀性,固有值越大,说明属性的值越分散、分裂后的子集大小差异越大。在信息增益率的计算中,将固有值作为分母,可以平衡信息增益的结果,避免选择那些可能导致非均匀分裂的属性。这样,信息增益率就能够更公平地评估不同属性的有效性,帮助我们构建更平衡的决策树。

其计算公式为
S p l i t I n f o = − ∑ v ∈ V ∣ v ∣ ∣ V ∣ l o g 2 ∣ v ∣ ∣ V ∣ SplitInfo=-\sum\limits_{v\in V}\dfrac{|v|}{|V|}log_2\dfrac{|v|}{|V|} SplitInfo=vVVvlog2Vv
其中V代指整个数据集,v代指V的子集, ∣ v ∣ ∣ V ∣ \frac{|v|}{|V|} Vv即该条件下某个取值的子集占总集的多少。

3.2.2 公式

信息增益率即在信息增益的基础上,除以固有值,公式如下
G a i n R a t i o ( S , A ) = G a i n ( S , A ) S p l i t I n f o ( S , A ) GainRatio(S,A) =\dfrac{Gain(S,A)}{SplitInfo(S,A)} GainRatio(S,A)=SplitInfo(S,A)Gain(S,A)

3.3 相较于信息增益的优化

  • 减少偏向:减少了对多属性取值的偏好,在选取属性上更加公平
  • 平衡分裂:属性分裂的集合大小差距很大时会导致固有值很高,使得信息增益率变小,这促使算法选取能分裂更加均匀的子集的属性
  • 提高泛化能力:信息增益率减少了对多值属性的偏好,有助于构建更加平衡的决策树,这样的决策树通常具有更好的泛化能力,能够更好地适应未见过的数据。
  • 防止过拟合:信息增益率有助于避免过度分裂的情况,这种情况通常会导致模型过于复杂,从而过拟合训练数据。通过选择信息增益率高的属性,C4.5算法能够构建出更简洁、更有效的决策树。

四. CART算法

4.1 算法简介

该算法通过**基尼指数(Gini Index)**选取特征值,由该算法的最大特点是生成的决策树都为二叉树,这意味着在每一步的决策中,CART算法只考虑“是”或“否”的分支,即使一个特征有多个取值,也会将数据分为两部分。

4.2 基尼指数

在决策树中,基尼指数用于衡量数据集的不纯度,它表示随机选择一个样本,该样本被错误分类的概率,基尼指数越小,数据集的纯度越高。其计算公式如下
G i n i ( S ) = 1 − ∑ k = 1 n p k 2 Gini(S)=1-\sum\limits_{k=1}^np_k^2 Gini(S)=1k=1npk2
此处的n是数据集中类别的个数,pk是第k种类别所占比例。

4.3 依据基尼指数选取特征值

就如同上面提到的那样,基尼指数越低表示数据集越纯,分类效果也就越好,因此,我们需要选择基尼指数最低的值作为最优特征值。

公式为
G i n i ( S , A ) = ∑ v ∣ s ∣ ∣ S ∣ G i n i ( S v ) Gini(S,A)=\sum\limits_{v}\dfrac{|s|}{|S|}Gini(S_v) Gini(S,A)=vSsGini(Sv)
此处的s为S的子集

由于基尼指数是进行二分,所以,在取值只有两个的属性中,我们可以只进行以此计算;而当取值大于两个时,我们需要对取值进行单独计算。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值