作者:張張張張
github地址:https://github.com/zhanghekai
【转载请注明出处,谢谢!】
【机器学习系列】之“西瓜数据集”决策树构建数学公式计算过程
【机器学习系列】之决策树剪枝和连续值、缺失值处理数学公式计算
【机器学习系列】之ID3、C4.5、CART决策树构建代码
文章目录
一、决策树概述
决策树(Decision Tree)算法是一种基本的分类与回归方法,是最经常使用的数据挖掘算法之一。决策树是一种非线性有监督分类模型必须将已有的数据进行离散化,即:从字符串变成数值。构造决策树的基本思想是随着树深度的增加,节点的“熵”迅速降低,熵降低的速度越快越好,这样我们有望得到一棵高度最矮的决策树。
决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是 if-then 规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。
决策树的定义:分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性(features),叶结点表示一个类(labels)。
用决策树对需要测试的实例进行分类:从根节点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每一个子结点对应着该特征的一个取值。如此递归地对实例进行测试并分配,直至达到叶结点。最后将实例分配到叶结点的类中。
决策树学习通常包括 3 个步骤:特征选择、决策树的生成和决策树的修剪。
二、决策树场景
-
一个叫做 “二十个问题” 的游戏,游戏的规则很简单:参与游戏的一方在脑海中想某个事物,其他参与者向他提问,只允许提 20 个问题,问题的答案也只能用对或错回答。问问题的人通过推断分解,逐步缩小待猜测事物的范围,最后得到游戏的答案。
-
一个邮件分类系统,大致工作流程如下:
首先检测发送邮件域名地址。如果地址为 myEmployer.com, 则将其放在分类 "无聊时需要阅读的邮件"中。
如果邮件不是来自这个域名,则检测邮件内容里是否包含单词 “曲棍球” , 如果包含则将邮件归类到 “需要及时处理的朋友邮件”, 如果不包含则将邮件归类到 “无需阅读的垃圾邮件” 。
三、决策树概念须知
1.名词定义
熵(entropy):指体系的混乱的程度,在不同的学科中也有引申出的更为具体的定义,是各领域十分重要的参量。
信息熵(information theory):使度量样本集合纯度最常用的一种指标。信息熵度量了事物的不确定性,越不确定的事物,它的熵就越大。
信息增益(information gain):在划分数据集前后信息熵发生的变化称为信息增益。信息增益越大,表明数据“纯度”提升越大。
信息增益率(infor gain ratio):正信息增益的基础上,解决过拟合问题的方法。
基尼系数(Gini index):CART决策树划分属性的指标,数据集的纯度可以用基尼值来度量,基尼值越小,数据集的纯度越高。
纯度(purity):叶子节点中正确分类的标签所占该叶子节点中包含数据的比例。
2.构建“树”时的基本要求
- 决策树的生成是一个递归过程,即决策树以深度优先遍历进行构建。
- 每个节点可选择的特征为:除该节点的父节点和祖父节点之外的所有特征。
- 若当前节点为空集,对应的处理措施为:将其设置为叶节点,类别设置为其父节点,所含样本最多的类别。
四、三种决策树对比
支持模型 | 树结构 | 特征选择 | 连续值处理 | |
---|---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益 | 不支持 |
C4.5 | 分类 | 多叉树 | 信息增益率 | 支持 |
CART | 分类、多回归 | 二叉树 | 基尼系数、均方差 | 支持 |
五、 划分选择
我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即节点的“纯度”越来越高。
我们使用周志华一书《机器学习》中的“西瓜数据集”进行计算:
1.ID3信息增益
信 息 熵 : E n t ( D ) = − ∑ k = 1 ∣ Y ∣ p k l o g 2 p k 信息熵:Ent(D) = - \sum_{k = 1}^{|Y|}p_k log_2 p_k 信息熵:Ent(D)=−k=1∑∣Y∣pklog2pk
信 息 增 益 : G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) 信息增益:Gain(D,a) = Ent(D) - \sum_{v = 1}^{V}\frac{|D^v|}{|D|}Ent(D^v) 信息增益:Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
- |Y|:代表分类标签的数量,“好瓜”、“坏瓜”,所以|Y|=2
- a:代表数据集所包含的特征,a={色泽,根蒂,敲声,纹理,脐部,触感}
- v:代表每一个特征下所包含的属性,例如特征“色泽“下v={青绿,乌黑,浅白}
- 正例:”是“好瓜
- 反例:”否“好瓜
- ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} ∣D∣∣Dv∣:代表该节点所包含的数据数量占其父节点数据数量的比例
-
根节点包含D中所有数据,数据总数:17,正例占p1=8/17,反例占p2=9/17。
根节点的信息熵为:
E n t ( D ) = − ∑ k = 1 2 p k l o g 2 p k = − ( 8 17 l o g 2 8 17 + 9 17 l o g 2 9 17 ) = 0.998 Ent(D)=-\sum_{k=1}^{2}p_k log_2 p_k=-(\frac{8}{17}log_2 \frac{8}{17}+\frac{9}{17}log_2 \frac{9}{17})=0.998 Ent(D)=−k=1∑2pklog2pk=−(178log2178+179log2179)=0.998
然后,我们要计算出当前特征集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个特征的信息熵和信息增益。
★特征”色泽“:
D 1 D^1 D1(色泽=青绿):{1,4,6,10,13,17},正例p1=3/6,反例p2=3/6
E n t ( D 1 ) = − ( 3 6 l o g 2 3 6 + 3 6 l o g 2 3 6 ) = 1.000 Ent(D^1)=-(\frac{3}{6}log_2 \frac{3}{6} + \frac{3}{6}log_2 \frac{3}{6}) = 1.000 Ent(D1)=−(63log263+63log263)=1.000
D 2 D^2 D2(色泽=乌黑):{2,3,7,8,9,15},正例p1=4/6,反例p2=2/6
E n t ( D 2 ) = − ( 4 6 l o g 2 4 6 + 2 6 l o g 2 2 6 ) = 0.918 Ent(D^2)=-(\frac{4}{6}log_2 \frac{4}{6} + \frac{2}{6}log_2 \frac{2}{6}) = 0.918 Ent(D2)=−(64log264+62log262)=0.918
D 3 D^3 D3(色泽=浅白):{5,11,12,14,16},正例p1=1/5,反例p2=4/5
E n t ( D 3 ) = − ( 1 5 l o g 2 1 5 + 4 5 l o g 2 4 5 ) = 0.722 Ent(D^3)=-(\frac{1}{5}log_2 \frac{1}{5} + \frac{4}{5}log_2 \frac{4}{5}) = 0.722 Ent(D3)=−(51log251+54log254)=0.722
"色泽"特征的信息增益:
G a i n ( D , 色 泽 ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) = 0.998 − ( 6 17 × 1 + 6 17 × 0.918 + 5 17 × 0.722 ) = 0.109 Gain(D,色泽)=Ent(D) - \sum_{v = 1}^{V}\frac{|D^v|}{|D|}Ent(D^v)\\ =0.998-(\frac{6}{17}\times 1 +\frac{6}{17}\times 0.918 + \frac{5}{17}\times 0.722)=0.109 Gain(D,色泽)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)=0.998−(176×1+176×0.918+175×0.722)=0.109
类似的,计算出其他特征的信息增益:
Gain(D,根蒂)=0.143 \quad Gain(D,敲声)=0.141 \quad Gain(D,纹理)=0.381
Gain(D,脐部)=0.289 \quad Gain(D,触感)=0.006
特征”纹理”的信息增益最大,选他作为划分属性。
其中节点上方红色字体表示:创建该node节点时可选择的特征。
- D 1 D^1 D1中有编号为{1,2,3,4,5,6,8,10,15},可用特征集合为{色泽,根蒂,敲声,脐部,触感},其中正例p1=7/9,反例p2=2/9。
D 1 D^1 D1节点的信息熵为:
E n t ( D 1 ) = − ∑ k = 1 2 p k l o g 2 p k = − ( 7 9 l o g 2 7 9 + 2 9 l o g 2 2 9 ) = 0.763 Ent(D^1)=-\sum_{k=1}^{2}p_k log_2 p_k=-(\frac{7}{9}log_2 \frac{7}{9}+\frac{2}{9}log_2 \frac{2}{9})=0.763 Ent(D1)=−k=1∑2pklog2pk=−(97log297+92log292)=0.763
★特征”色泽“:
D 11 D^{11} D11(色泽=青绿):{1,4,6,10},正例p1=3/4,反例p2=1/4
E n t ( D 11 ) = − ( 3 4 l o g 2 3 4 + 1 4 l o g 2 1 4 ) = 0.811 Ent(D^{11})=-(\frac{3}{4}log_2 \frac{3}{4} + \frac{1}{4}log_2 \frac{1}{4}) = 0.811 Ent(D11)=−(43log243+41log241)=0.811
D 12 D^{12} D12(色泽=乌黑):{2,3,8,15},正例p1=3/4,反例p2=1/4
E n t ( D 12 ) = − ( 3 4 l o g 2 3 4 + 1 4 l o g 2 1 4 ) = 0.811 Ent(D^{12})=-(\frac{3}{4}log_2 \frac{3}{4} + \frac{1}{4}log_2 \frac{1}{4}) = 0.811 Ent(D12)=−(43log243+41log241)=0.811
D 13 D^{13} D13(色泽=浅白):{5},正例p1=1,反例p2=0
E n t ( D 13 ) = − ( 1 l o g 2 1 + 0 l o g 2 0 ) = 0 Ent(D^{13})=-(1log_2 1 + 0log_2 0) =0 Ent(D13)=−(1log21+0log20)=0
"色泽"特征的信息增益:
G a i n ( D 1 , 色 泽 ) = E n t ( D 1 ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) = 0.763 − ( 4 9 × 0.811 + 4 9 × 0.811 + 1 9 × 0 ) = 0.043 Gain(D^1,色泽)=Ent(D^1) - \sum_{v = 1}^{V}\frac{|D^v|}{|D|}Ent(D^v)\\ =0.763-(\frac{4}{9}\times 0.811 +\frac{4}{9}\times 0.811 + \frac{1}{9}\times 0)=0.043 Gain(D1,色泽)=Ent(D1)−v=1∑V