【机器学习笔记】《统计学习方法》第五章 决策树+ID3算法+C4.5+CART算法(未完结)

主要参考书目《统计学习方法》第2版,清华大学出版社
参考书目 Machine Learning in Action, Peter Harrington
用于考研复试笔记,所以写的很简洁,自己能看懂就行。有学习需求请绕道,参考吴恩达机器学习或以上书籍,讲得比大多数博客好。

概念

定义 5.1 决策树(decision tree) 分类决策树模型时一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶节点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。
在这里插入图片描述
熵(Entropy)的定义
H ( x ) = − ∑ i = 1 n p i l o g p i H(x)=-\sum\limits_{i=1}^np_ilogp_i H(x)=i=1npilogpi

一件事情概率发生的越小,包含的信息量越大,熵就越大。
信息熵越大,从而样本纯度越低,因为信息量大了。
对于某种属性,因为这种属性的条件下,信息量比较大,说明包含了不同的种类,这个时候就需要进行划分。

条件熵(conditional entropy)
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)=\sum\limits_{i=1}^np_iH(Y|X=x_i) H(YX)=i=1npiH(YX=xi)
用频率估计概率时,熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)

信息增益(information gain) 特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
也成为互信息(mutual information)

信息增益比
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)
其中 H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum\limits_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi,n是特征值A取值的个数

原理

ID3算法

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

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

C4.5算法

将ID3中的信息增益换成信息增益比

剪枝

决策树的损失函数 C α ( T ) C_\alpha(T) Cα(T)
设树T的叶节点个数为|T|,该叶结点由 N t N_t Nt个样本点,其中k类的样本点有 N t k N_{tk} Ntk个, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_\alpha (T)=\sum\limits_{t=1}^{|T|}N_tH_t(T)+\alpha |T| Cα(T)=t=1TNtHt(T)+αT
其中 α ⩾ 0 \alpha \geqslant 0 α0为参数
H t ( T ) = − ∑ k N t k N t l o g N t k N t H_t(T)=-\sum\limits_k \frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t} Ht(T)=kNtNtklogNtNtk
较大的 α \alpha α促使选择较简单的模型,较小的 α \alpha α促使选择较复杂的模型

树的剪枝算法
设一组叶结点回缩到其父结点之前与之后的整体树分别为 T B T_B TB T A T_A TA,其对应的损失函数值分别是 C α ( T B ) C_\alpha(T_B) Cα(TB) C α ( T A ) C_\alpha(T_A) Cα(TA),如果 C α ( T A ) ⩽ C α ( T B ) C_\alpha(T_A) \leqslant C_\alpha(T _B) Cα(TA)Cα(TB)则进行剪枝。

注:可以用动态规划实现

这个方法是一种悲观剪枝的方法, 如果不要这棵树子树分类效果还会更好,就减掉。

猜你喜欢

转载自blog.csdn.net/weixin_43269437/article/details/113155989