机器学习——决策树

一,决策树

决策树是一种基于树形结构的分类算法,包括一个根节点,若干个叶子结点和内部节点。其中

  1. 根节点包含所有的数据集
  2. 内部节点对应当前节点数据集,以及使节点划分后纯度提升最大的划分属性
  3. 叶子节点:最终的分类结果

决策树的生成过程
首先从根节点开始,将所有数据放在根节点,选择一个最优特征,按照该特征将训练数据集分割成子集,使得该子集有一个在当前条件下最好的分类。如果该子集已经能够被基本正确分类,那么构造叶节点,将子集分到所对应的叶节点中;如果还有子集不能被正确分类,那么重复以上步骤,直至所有数据被基本正确分类或者没有可以选择的特征为止。

1. 节点划分属性选择依据

  • 熵(entropy)表示随机变量不确定性度量。设 X X X是一个取有限个值得离散随机变量,其概率分布为
    P ( X = x i ) = p i , i = 1 , 2 , ⋯   , n P(X=x_{i})=p_{i},i=1,2,\cdots,n P(X=xi)=pi,i=1,2,,n
    则随机变量的熵 H ( p ) H(p) H(p)
    H ( p ) = − ∑ i = 1 n p i l o g p i H(p)=-\sum_{i=1}^{n}p_{i}logp_{i} H(p)=i=1npilogpi
    熵越大,表明不确定性也就越大,当随机变量服从均匀分布是,熵最大 H ( p ) = l o g n H(p)=logn H(p)=logn

  • 条件熵:随机变量 X X X给定的条件下,随机变量 Y Y Y的条件熵 H ( Y ∣ X ) H(Y|X) H(YX)
    H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)=\sum_{i=1}^{n}p_{i}H(Y|X=x_{i}) H(YX)=i=1npiH(YX=xi)

在划分时期望能够使当前节点的不纯度下降最大,度量节点不纯度的依据有

设训练数据集为 D D D, ∣ D ∣ |D| D表示其样本容量,即样本个数。设有 K K K个类 C k , k = 1 , 2 , ⋯   , K C_{k},k=1,2,\cdots, K Ck,k=1,2,,K ∣ C k ∣ |C_{k}| Ck表示类 C k C_{k} Ck的样本个数。设特征 A A A n n n个不同的取值 { a 1 , a 2 , ⋯   , a n } \{a_{1},a_{2},\cdots,a_{n}\} {a1,a2,,an},根据特征 A A A的取值将数据 D D D划分为 n n n个子集 D 1 , D 2 , ⋯   , D n D_{1},D_{2},\cdots,D_{n} D1,D2,,Dn ∣ D i ∣ |D_{i}| Di D i D_{i} Di的样本个数, ∑ i = 1 n ∣ D i ∣ = ∣ D ∣ \sum_{i=1}^{n}|D_{i}|=|D| i=1nDi=D。记子集 D i D_{i} Di中属于类 C k C_{k} Ck的样本集合为 D i k D_{ik} Dik。即 D i k = D i ∩ C k D_{ik}=D_{i}\cap C_{k} Dik=DiCk ∣ D i k ∣ |D_{ik}| Dik D i k D_{ik} Dik的样本个数。

1.1 信息增益

输入:训练数据集 D D D 和特征 A A A
输出:特征 A A A对训练数据集 D D D的信息增益 g ( D , A ) g(D,A) g(D,A)
(1)计算数据集 D D D的信息熵 H ( D ) H(D) H(D)
H ( D ) = − ∑ i = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{i=1}^{K}\frac{|C_{k}|}{|D|}log_{2}\frac{|C_{k}|}{|D|} H(D)=i=1KDCklog2DCk
(2)计算特征 A A A对训练集 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA)
H ( D ∣ A ) = ∑ k = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ k = 1 n ∣ D i ∣ ∣ D ∣ ( ∑ i = 1 K ∣ D i k ∣ ∣ D i ∣ l o g 2 ∣ D i k ∣ ∣ D i ∣ ) H(D|A)=\sum_{k=1}^{n}\frac{|D_{i}|}{|D|}H(D_{i})=-\sum_{k=1}^{n}\frac{|D_{i}|}{|D|}(\sum_{i=1}^{K}\frac{|D_{ik}|}{|D_{i}|}log_{2}\frac{|D_{ik}|}{|D_{i}|}) H(DA)=k=1nDDiH(Di)=k=1nDDi(i=1KDiDiklog2DiDik)
(3)计算信息增益
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
信息增益偏向于取具有取值较多的特征,因此考虑信息增益率

1.2 信息增益率

基于特征 A A A的值的熵 H A ( D ) H_{A}(D) HA(D)为:
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_{A}(D)=-\sum_{i=1}^{n}\frac{|D_{i}|}{|D|}log_{2}\frac{|D_{i}|}{|D|} HA(D)=i=1nDDilog2DDi
因此特征 A A A对训练数据集的信息增益比 g R ( D , A ) g_{R}(D,A) gR(D,A)为:
g R ( D , A ) = g ( D , A ) H A ( D ) g_{R}(D,A)=\frac{g(D,A)}{H_{A}(D)} gR(D,A)=HA(D)g(D,A)

1.3 Gini指数

对于给定样本集合 D D D
G i n i ( D ) = 1 − ∑ i = 1 K ( ∣ C i ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{i=1}^{K}(\frac{|C_{i}|}{|D|})^{2} Gini(D)=1i=1K(DCi)2

2.1 ID3算法

核心:在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树
具体方法:从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归调用以上方法,构建决策树;直到所有特征的信息增益均很小或者没有特征可以选择为止,最后得到一颗决策树。

输入:训练数据集 D D D,特征集 A A A阈值 ε \varepsilon ε
输出:决策树 T T T
(1)若 D D D中所有实例属于同一类 C k C_{k} Ck,则 T T T为单节点数
(2)若 A = ∅ A=\varnothing A=,则 T T T为单节点树,并将 D D D中实例数最大的类 C k C_{k} Ck作为该节点的类标记,返回 T T T
(3)否则,计算 A A A中各特征对 D D D信息增益,选择信息增益最大的特征 A g A_{g} Ag
(4)如果 A g A_{g} Ag的信息增益小于阈值 ε \varepsilon ε,则置 T T T为单节点树,并将 D D D中实例数最大的类 C k C_{k} Ck作为该节点的类标记,返回 T T T
(5)否则,对 A g A_{g} Ag的每一可能值 a i a_{i} ai,依 A g = a i A_{g}=a_{i} Ag=ai D D D分割成若干非空子集 D i D_{i} Di,将 D i D_{i} Di中是隶属最大的类作为类标记,构建子结点,由结点及其子结点构成树 T T T,返回 T T T
(6)对第 i i i个子结点,以 D i D_{i} Di为训练集,以 A − { A g } A-\{A_{g}\} A{Ag}为特征集,递归地调用步骤(1)-(5),得到子树 T i T_{i} Ti,返回 T i T_{i} Ti

2.2 C4.5算法

如上所示,选择信息增益比最大的特征进行分割

2.3 CART算法

递归构建二叉决策树的过程
选择基尼指数最小的特征进行分割

二、过拟合的处理方法

决策树的剪枝通过极小化决策树整体的损失函数或代价函数。设树的叶结点个数为 ∣ T ∣ |T| T t t t是树 T T T的叶结点,该叶结点有 N t N_{t} Nt个样本,其中 k k k类的样本有 N t k N_{tk} Ntk个, k = 1 , 2 , ⋯   , K k=1,2,\cdots, K k=1,2,,K H t ( T ) H_{t}(T) Ht(T)为叶结点 t t t的经验熵, α ≥ 0 \alpha \ge 0 α0为参数,则决策树学习的损失函数可以定义为:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ = C ( T ) + α ∣ T ∣ C_{\alpha}(T)=\sum_{t=1}^{|T|}N_{t}H_{t}(T)+\alpha |T|=C(T)+\alpha |T| Cα(T)=t=1TNtHt(T)+αT=C(T)+αT
其中,
H t ( T ) = − ∑ k N t k N t l o g 2 N t k N t C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ N t ∑ k K N t k N t l o g N t k N t = − ∑ t = 1 ∣ T ∣ ∑ k K N t k l o g N t k N t H_{t}(T)=-\sum_{k}\frac{N_{tk}}{N_{t}}log_{2}\frac{N_{tk}}{N_{t}}\\ C(T)=\sum_{t=1}^{|T|}N_{t}H_{t}(T)=-\sum_{t=1}^{|T|}N_{t}\sum_{k}^{K}\frac{N_{tk}}{N_{t}}log\frac{N_{tk}}{N_{t}}=-\sum_{t=1}^{|T|}\sum_{k}^{K}N_{tk}log\frac{N_{tk}}{N_{t}} Ht(T)=kNtNtklog2NtNtkC(T)=t=1TNtHt(T)=t=1TNtkKNtNtklogNtNtk=t=1TkKNtklogNtNtk
C α ( T ) C_{\alpha}(T) Cα(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, ∣ T ∣ |T| T表示模型复杂度,参数 α \alpha α控制两者的影响

  1. 预剪枝
  2. 后剪枝
    树的后剪枝算法:
    (1)计算每个结点的经验熵
    (2)递归从树的叶结点向上回缩
    计算结点回缩前的树 T B T_{B} TB和回缩后的树 T A T_{A} TA,分别计算其损失函数 C α ( T B ) , C α ( T A ) C_{\alpha}(T_{B}),C_{\alpha}(T_{A}) Cα(TB),Cα(TA),如果 C α ( T B ) ≤ C α ( T A ) C_{\alpha}(T_{B})\le C_{\alpha}(T_{A}) Cα(TB)Cα(TA)
    则进行剪枝,将父节点变为新的叶结点
    (3)返回步骤(2),直至不能继续为止,得到损失函数最小的子树 T α T_{\alpha} Tα

三、连续属性处理

将连续属性在数据集中的取值分别取出为 a 1 , a 2 , ⋯   , a n a_{1},a_{2},\cdots,a_{n} a1,a2,,an,然后取属性值分别为取值的中点值,即 t i = a i + a i + 1 2 t_{i}=\frac{a_{i}+a_{i+1}}{2} ti=2ai+ai+1,将 a ≤ t i a\le t_{i} ati归为同一取值, a > t i a> t_{i} a>ti归为另一取值,然后分别计算结点依据 t i t_{i} ti划分后的子结点的不纯度,选择结点不纯度下降最大的 t i t_{i} ti值作为当前结点的划分属性

四、属性缺失值处理

以ID3为例
计算当前结点的信息增益时,忽略特征属性缺失的样本,然后分别计算各个属性对数据集的信息增益,选择信息增益最大的样本进行划分,同时将属性缺失的样本保留到子结点中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值