Machine Learning-L4-决策树

本文深入讲解决策树算法,包括信息熵、信息增益、增益率、基尼指数等概念,探讨不同算法如ID3、C4.5、CART的特点及应用。通过实例展示决策树构建过程,为读者提供全面的决策树知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 决策树简介

决策树算法从有类标号的训练元组中,根据数据属性采用树状结构建立决策模型。

决策树中每个内部节点表示在一个属性上的测试,每个分支代表该测试上的一个输出,每个树叶节点存放一个类标号,直观看上去就像判断模块和终止块组成的流程图,判断模块表示对一个特征取值的判断,终止块表示分类结果。

决策树分类器的构造不需要任何领域知识或参数设置,适合探索式知识发现,可处理高维数据,表示直观易被理解,是许多商业规则归纳系统的基础。

如下表记录已有的用户是否还贷的相关信息:
在这里插入图片描述

根据该数据,构建的决策树如下:


对于一个新用户:无房产,单身,年收入6.5万,根据上述决策树,可以判断无法还贷(红色路径)。从上面的决策树,还可以知道是否拥有房产可以很大程度决定用户是否可以偿还贷款,对借贷业务具有指导意义。

2 熵

信息熵

熵的概念首先由德国物理学家鲁道夫·克劳修在热力学中引入,用于度量一个热力学系统的无序程度。

  • 熵越大,系统越无序,意味着系统结构和运动的不确定和无规则;
  • 熵越小,系统越有序,意味着具有确定和有规则的运动状态。

    更多例子:
  • 热水的热量会传到空气中,最后使得温度一致
  • 整理好的耳机线放进口袋,下次再拿出来已经乱了。让耳机线乱掉的看不见的“力”就是熵力,耳机线喜欢变成更混乱
  • 一根弹簧的力,就是熵力。 胡克定律其实也是一种熵力的表现。万有引力也是熵力的一种

1948年,C.E. Shannon 在《A Mathematical Theory of Communication》第一次提出了信息熵。

  • **信息熵(Entropy)**是信息的不确定性(Uncertainty)的度量,不确定性越大,信息熵越大。
  • 信息用来消除事件的不确定性,即消除熵=获取信息。消除熵可以通过调整事件概率、排除干扰或直接确定来消除。

一条信息消除的事件的不确定性越大(熵减越大),它蕴含的信息量越大。

信息量的大小跟随机事件的概率有关:

  • 越小概率的事情(不确定性越大)发生了(熵减越大)产生的信息量越大,如湖南地震;
  • 越大概率的事情(不确定性越小)发生了(熵减越小)产生的信息量越小,如太阳从东边升起。

因此,信息的量度应该依赖于事件的概率分布 p ( x ) p(x) p(x)

(1)定义

H = − ∑ x p ( x ) log ⁡ p ( x ) H= -\sum\limits_{x} p(x)\log p(x) H=xp(x)logp(x)
其中, p ( x ) p(x) p(x)为随机变量 X X X的概率密度函数。使用以2为底的对数函数,单位为bit。

对于离散型随机变量:
H = − ∑ i = 1 n P ( x i ) log ⁡ P ( x i ) H= -\sum\limits_{i=1}^{n} P(x_{i})\log P(x_{i}) H=i=1nP(xi)logP(xi)
0 ≤ H ( X ) ≤ log ⁡ 2 N 0 \leq H(X) \leq \log_2N 0H(X)log2N N N N是系统 S S S中的事件总数,当且仅当 X X X均匀分布( p 1 = p 2 = . . . = p N p_1=p_2=...=p_N p1=p2=...=pN),系统的熵达到最大值 log ⁡ 2 N \log_2N log2N(不确定性最大)。

如对于两点分布, H = − p log ⁡ p − ( 1 − p ) log ⁡ ( 1 − p ) H=-p\log p - (1-p)\log(1-p) H=plogp(1p)log(1p),当 p = 0.5 p=0.5 p=0.5时, H H H取得最大值1bit。

(2)举例

  • e.g.1
    • 随机抛掷1枚硬币1次,有2种可能结果: H = − ∑ i = 1 2 1 2 log ⁡ 2 1 2 = 1 b i t H= -\sum\limits_{i=1}^{2} \frac{1}{2} \log_2 \frac{1}{2} = 1bit H=i=1221log221=1bit
    • 抛掷3次,有8中可能结果: H = − ∑ i = 1 8 1 8 log ⁡ 2 1 8 = 3 b i t H= -\sum\limits_{i=1}^{8} \frac{1}{8} \log_2 \frac{1}{8} = 3bit H=i=1881log281=3bit
  • e.g.2 A/B/C/D 四个选项:
    • 无法确定是哪个选项为正确选项,此时的熵: H = − ∑ i = 1 4 1 4 log ⁡ 2 1 4 = 2 b i t H= -\sum\limits_{i=1}^{4} \frac{1}{4} \log_2 \frac{1}{4} = 2bit H=i=1441log241=2bit
    • 知道A不是正确选项后的 H A = − ∑ i = 1 3 1 3 log ⁡ 2 1 3 = 1.585 b i t H_A= -\sum\limits_{i=1}^{3} \frac{1}{3} \log_2 \frac{1}{3} = 1.585 bit HA=i=1331log231=1.585bit
    • A不是正确选项提供的信息量 H − H A = 0.415 b i t H-H_A = 0.415 bit HHA=0.415bit

3. 构建决策树

决策树算法的基本思想是以信息熵为度量构造一颗熵值下降最快的树,叶子节点处熵值为零。属性的信息增益越大,对样本的熵减少的能力更强,使得数据由不确定性变确定性的能力越强。

采用自顶向下的递归方法,具体算法如下
输入:训练数据集D,属性列表A

def createTree(D,A):
    创建一个节点N
    if D中样本属于同一类别C:
        返回N作为C类叶节点
        return
    if A为空:
        返回N作为叶节点,标记为D中样本数最多的类
        return
    使用划分准侧选择最优划分属性a
    A_sub = 从属性集A中删除属性a
    for 属性a的每个取值a_v:
        D_v = D中在属性a取值为a_v的样本集
        if D_v 为空:
            增加一个叶节点到节点N,标记为D中样本数最多的类
        else:
            增加由createTree(D_v,A_sub)返回的节点到N
    return    

4. 划分准则

假设样本集合 D D D的属性 a a a v v v个可能取值 { a 1 , a 2 , . . . , a v } \{a_1,a_2,...,a_v\} {a1,a2,...,av},若使用属性 a a a D D D进行划分,可得到 v v v个子集 { D 1 , D 2 , . . . , D v } \{D_1,D_2,...,D_v\} {D1,D2,...,Dv},其中 D j D_j Dj中包含 D D D中属性 a a a取值为 a j a_j aj的数据。

4.1 信息增益(Information Gain)

选择具有最高信息增益的属性作为节点的分裂属性,信息增益准则对可取值数目较多的属性有所偏好。

代表算法:ID3 (Iterative Diochotomiser 3)

信息增益定义为原来的信息需求(仅基于各个类占比)与新的信息需求(对 A A A划分后)之间的差,使用属性 a a a对集合 D D D进行划分所获得信息增益计算如下:
G a i n ( D , a ) = E n t ( D ) − E n t a ( D ) = E n t ( D ) − ∑ j = 1 v ∣ D j ∣ ∣ D ∣ E n t ( D j ) Gain(D,a) = Ent(D)-Ent_a(D)=Ent(D)-\sum_{j=1}^v \frac{|D_j|}{|D|}Ent(D_j) Gain(D,a)=Ent(D)Enta(D)=Ent(D)j=1vDDjEnt(Dj)定义数据集 D D D如下:

dataSet = [[1,1,'Y'],
           [1,1,'Y'],
           [1,0,'N'],
           [0,1,'N'],
           [0,1,'N']]
data = pd.DataFrame(dataSet,columns=['Col1','Col2','label'])

E n t ( D ) = − 2 5 l o g 2 2 5 − 3 5 l o g 2 3 5 = 0.97 Ent(D) = -\frac{2}{5}log_2\frac{2}{5}-\frac{3}{5}log_2\frac{3}{5}=0.97 Ent(D)=52log25253log253=0.97
计算基于Col1和Col2的信息增益如下:

4.2 增益率(Gain Ratio)

选择具有最大增益率(Gain Ratio)的属性作为节点的分裂属性,增益率准则对可取值数目较少的属性有所偏好。

代表算法:C4.5(使用启发式算法,先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的)。

增益率使用分裂信息(Split Infomation)将信息增益规范化,定义如下:
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) S p l i t E n t a ( D ) Gain\_ratio(D,a) = \frac{Gain(D,a)}{SplitEnt_a(D)} Gain_ratio(D,a)=SplitEnta(D)Gain(D,a) 其 中 , S p l i t E n t a = − ∑ j = 1 v ∣ D j ∣ ∣ D ∣ l o g 2 ( ∣ D j ∣ ∣ D ∣ ) 其中, SplitEnt_a=-\sum_{j=1}^v \frac{|D_j|}{|D|}log_2(\frac{|D_j|}{|D|}) SplitEnta=j=1vDDjlog2(DDj)

4.3 基尼指数(Gini index)

选择最小基尼指数(Gini index)的属性作为节点的分裂属性。

代表算法:CART(Classification And Regression Tree)

基尼系数度量样本集合 D D D的不纯度,定义如下:
G i n i ( D ) = ∑ i = 1 k ∑ i ≠ i ′ p i p i ′ = 1 − ∑ i = 1 k p i 2 Gini(D)=\sum_{i=1}^k\sum_{i \neq i'}p_ip_i'= 1-\sum_{i=1}^k p_i^2 Gini(D)=i=1ki=ipipi=1i=1kpi2其中,数据集 D D D i i i类样本所占比例为 p i ( i = 1 , 2 , . . . , k ) p_i(i=1,2,...,k) pi(i=1,2,...,k)

G i n i ( D ) Gini(D) Gini(D)反映了从数据集 D D D中随机抽取两个样本,类别不一致的概率, G i n i ( D ) Gini(D) Gini(D)越小,数据集 D D D的纯度越高。在候选属性集合中,选择使划分后基尼指数最小的属性作为最有划分属性。

算法比较

算法特征选择树结构分类回归连续值缺失值剪枝
ID3信息增益多叉树
C4.5增益率多叉树
CART基尼系数二叉树
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐私无忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值