作为2008年《数据挖掘十大算法》(Springer LNCS)位居榜首的分类决策树算法,C4.5具有较完备的处理流程,较全面得涵盖了决策树族算法特征。目前对于C4.5算法的简单应用较多,而本文主要总结其中的缺失值处理步骤,其余部分初略介绍。
(ps: 知识均来源了网络, 本文仅做总结,旨在供个人回顾学习)
(1)C4.5算法简介:
C4.5算法是由Ross Quilan开发的,是对ID3算法的扩展改进,为经典的 分类决策树算法。
具体改进点:
- 增加对连续特征属性的处理。
- 增加对训练数据属性值缺失的处理
- 应用信息增益率作为特征选择依据,替代ID3的信息增益。
- 提供剪枝方法。
(1.1)信息增益率
信息增益率 : G a i n R a t i o ( D , A ) = G a i n ( D , A ) H A ( D ) 训练数据集 D 关于特征值 A 的熵 : H A ( D ) = − ∑ i = 1 n D i D l o g 2 D i D 信息增益 : G a i n ( D , A ) = E n t ( D ) − ∑ v = 1 V D v D E n t ( D v ) 信息增益率: GainRatio(D,A) = \frac{Gain(D,A)}{H_A(D)}\\ 训练数据集D关于特征值A的熵:H_A(D)=-\sum^{n}_{i=1}\frac{D_i}{D}log_2\frac{D_i}{D}\\ 信息增益:Gain(D,A)=Ent(D)-\sum^V_{v=1}\frac{D^v}{D}Ent(D^v) 信息增益率:GainRatio(D,A)=HA(D)Gain(D,A)训练数据集D关于特征值A的熵:HA(D)=−i=1∑nDDilog2DDi信息增益:Gain(D,A)=Ent(D)−v=1∑VDDvEnt(Dv)
(1.2)连续特征属性处理
使用连续属性离散化,与CART回归树的连续值二分很类似。
给定样本集D和连续属性A,假定A在D上出现了n个不同的取值,将这些值从小到大进行排序,记为{a1, a2, …, an},寻求 划分点 t 可将D分为两个子集。其中 a i a_i ai 和 a i + 1 a_{i+1} ai+1 为相邻取值,t 在 [ a i , a i + 1 ) [a_i, a_{i+1}) [ai,ai+1) 中取任何值, 划分结果均相同,故取 t = a i + a i + 1 2 t=\frac{a_i+a_{i+1}}{2} t=2ai+ai+1 。即 w w w 个取值的连续属性,被抽象为选取 w − 1 w-1 w−1 个切分点中的最优切分点。
缺点为:对于多连续属性数据,计算量过大。
(1.3)剪枝
以下视频对常用的剪枝方法,均做了详细讲解(5.5节),请移步查看:
https://www.bilibili.com/video/BV1No4y1o7ac?p=41&vd_source=8b1d70c5247a5bc08f831cea66e74fba
(1.4)python代码实现
代码参考1.0:http://www.hzcourse.com/web/refbook/detail/9970/226
来自黄智濒老师的《现代决策树模型及其编程实践》一书,为简单的C4.5决策树实现,适用于对C4.5算法的初步认识学习。
(点击源代码,C4.5部分代码位于Chapter02)
不足点:未涉及缺失值处理, 无法处理离散属性和连续属性同时存在的数据。
(2)缺失值处理
出自Ross Quilan在 C4.5: Programms for Machine Learning 中提供的解决方案。本文仅讲解在模型建立阶段所涉及的缺失值处理,在测试数据中的缺失值应尽量避免,故不作叙述。
主要包含两部分:
- 选择特征属性时:在有缺失情况下,如何选择最优属性进行子树划分。
- 缺失样本的处理:选择好属性后,属性缺失样本划入哪个子节点。
名词补充:
- D ′ 表示 D 中属性 A 上无缺失的数据集; D'表示D中属性A上无缺失的数据集; D′表示D中属性A上无缺失的数据集;
- D v ′ 表示 D ’中属性 A 取值为 a v 的子集; {D^v}'表示D’中属性A取值为a^v的子集; Dv′表示D’中属性A取值为av的子集;
- D k ′ 表示 D ′ 中属于第 k 类的子集; D_k'表示D'中属于第k类的子集; Dk′表示D′中属于第k类的子集;
- w x 表示样本 x 的权重 w_x表示样本x的权重 wx表示样本x的权重
- 未缺失样本占全量样本比例: ρ = ∑ x ∈ D ′ w x ∑ x ∈ D w x \rho=\frac{\sum_{x\in{D'}}w_x}{\sum_{x\in{D}}w_x} ρ=∑x∈Dwx∑x∈D′wx
- 未缺失样本中A属性每类值的占比: γ v ′ = ∑ x ∈ D v ′ w x ∑ x ∈ D ′ w x \gamma_v'=\frac{{\sum_{x\in{{D^v}'}}w_x}}{{\sum_{x\in{D'}}w_x}} γv′=∑x∈D′wx∑x∈Dv′wx
(2.1)选择最优属性进行划分
对前述信息增益进行拓展,引入缺失值情况,求得拓展后信息增益率。故可计算各属性(属性切分点)的最优子集划分方式。
G
a
i
n
(
D
,
A
)
=
ρ
×
G
a
i
n
(
D
′
,
A
)
=
ρ
×
(
E
n
t
(
D
′
)
−
∑
v
=
1
V
γ
v
′
E
n
t
(
D
v
’
)
)
Gain(D,A)=\rho\times Gain(D',A)\\ =\rho\times (Ent(D') - \sum^V_{v=1}\gamma_v'Ent({D^v}’))\\
Gain(D,A)=ρ×Gain(D′,A)=ρ×(Ent(D′)−v=1∑Vγv′Ent(Dv’))
(2.2)含缺失样本划入子树节点
引入权重概念,并将含缺失值样本经权值计算后,划入所有子树节点。可理解为将同一个样本以不同的概率划入到不同的结点中。
权值迭代规则:
- 样本初始权值均为1
- 无缺失样本递归划入子树权值不变,仍为1
- 含缺失样本 w x = γ v ′ . w x w_x=\gamma_v'.w_x wx=γv′.wx
(2.3)例题计算
西瓜案例:https://blog.csdn.net/leaf_zizi/article/details/83503167
(2.4)python代码实现
代码参考2.0:https://download.csdn.net/download/leaf_zizi/10867159
引入了缺失值处理模块,且考虑了同时包含离散、连续属性的数据。
参考:
[机器学习算法推导&python手写实现] https://zhuanlan.zhihu.com/p/393071835
[机器学习笔记(7)——C4.5决策树中的缺失值处理] https://blog.csdn.net/leaf_zizi/article/details/83503167
[现代决策树模型及其编程实践] 黄智濒 编著