I D 3 用 信 息 增 益 , C 4.5 用 信 息 增 益 率 , C A R T 用 g i n i 系 数 。 {\color{Red}ID3用信息增益,C4.5用信息增益率,CART用gini系数。} ID3用信息增益,C4.5用信息增益率,CART用gini系数。
决策树之ID3算法
一种贪心算法,以自顶向下的递归方式。
信息熵(Information Entropy)
H
(
S
)
=
−
∑
k
=
1
n
p
i
l
o
g
2
p
i
H(S)=-\sum_{k=1}^n p_ilog_{2} p_i
H(S)=−∑k=1npilog2pi
S表示样本集,n表示样本集合中类别的个数,
p
i
p_i
pi表示第i个类的个数。
H(S) 描述S携带的信息量。 信息量越大(值变化越多),则越不确定,越不容易被预测。
信息熵特点:
a) 不同类别的概率分布越均匀,信息熵越大;
b) 类别个数越多,信息熵越大;
c) 信息熵越大,越不容易被预测;(变化个数多,变化之间区分小,则越不容易被预测)(对于确定性问题,信息熵为0;p=1; E=p*logp=0)
条件熵
当X条件下Y的信息熵
H
(
Y
∣
X
)
=
∑
i
P
(
X
=
x
i
)
H
(
Y
∣
X
=
x
i
)
H(Y|X)=\sum_{i}P(X=x_{i})H(Y|X=x_{i})
H(Y∣X)=∑iP(X=xi)H(Y∣X=xi)
信息增益(Information Gain)
是机器学习中
特
征
选
择
{\color{Red}特征选择}
特征选择的关键指标
衡量一个属性(x)区分样本(y)的能力。 当新增一个属性(x)时,信息熵H(Y)的变化大小即为信息增益。 IG(Y|X)越大表示x越重要。
I
G
(
Y
∣
X
)
=
H
(
Y
)
−
H
(
Y
∣
X
)
IG(Y|X)=H(Y)-H(Y|X)
IG(Y∣X)=H(Y)−H(Y∣X)
例题:学习目标是play还是no play
E
n
t
r
o
p
y
(
S
)
=
−
9
14
l
o
g
2
9
14
−
5
14
l
o
g
2
5
14
=
0.940286
Entropy(S)=-\frac{9}{14}log_2\frac{9}{14}-\frac{5}{14}log_2\frac{5}{14}=0.940286
Entropy(S)=−149log2149−145log2145=0.940286
在决策树分类问题中,信息增益就是决策树在进行属性选择划分前和划分后信息的差值。假设利用属性Outlook来分类,那么如下图
划分后,数据被分为三部分了,那么各个分支的信息熵计算如下:
E
n
t
r
o
p
y
(
s
u
n
n
y
)
=
−
2
5
l
o
g
2
2
5
−
3
5
l
o
g
2
3
5
=
0.970951
Entropy(sunny)=-\frac{2}{5}log_2\frac{2}{5}-\frac{3}{5}log_2\frac{3}{5}=0.970951
Entropy(sunny)=−52log252−53log253=0.970951
E
n
t
r
o
p
y
(
o
v
e
r
c
a
s
t
)
=
−
4
4
l
o
g
2
4
4
−
0
l
o
g
2
0
=
0
Entropy(overcast)=-\frac{4}{4}log_2\frac{4}{4}-0log_20=0
Entropy(overcast)=−44log244−0log20=0
E
n
t
r
o
p
y
(
r
a
i
n
y
)
=
−
3
5
l
o
g
2
3
5
−
2
5
l
o
g
2
2
5
=
0.970951
Entropy(rainy)=-\frac{3}{5}log_2\frac{3}{5}-\frac{2}{5}log_2\frac{2}{5}=0.970951
Entropy(rainy)=−53log253−52log252=0.970951
那么划分后的条件熵为:
E
n
t
r
o
p
y
(
S
∣
T
)
=
5
14
⋅
0.970951
+
4
14
⋅
0
+
5
14
⋅
0.970951
=
0.693536
Entropy(S|T)=\frac{5}{14}\cdot0.970951+\frac{4}{14}\cdot0+\frac{5}{14}\cdot0.970951=0.693536
Entropy(S∣T)=145⋅0.970951+144⋅0+145⋅0.970951=0.693536
E
n
t
r
o
p
y
(
S
∣
T
)
Entropy(S|T)
Entropy(S∣T)代表在特征属性的条件下样本的条件熵。那么最终得到特征属性带来的信息增益为
I
G
(
T
)
=
E
n
t
r
o
p
y
(
S
)
−
E
n
t
r
o
p
y
(
S
∣
T
)
=
0.24675
IG(T)=Entropy(S)-Entropy(S|T)=0.24675
IG(T)=Entropy(S)−Entropy(S∣T)=0.24675
在
决
策
树
的
每
一
个
非
叶
子
结
点
划
分
之
前
,
先
计
算
每
一
个
属
性
所
带
来
的
信
息
增
益
,
选
择
最
大
信
息
增
益
的
属
性
来
划
分
,
因
为
信
息
增
益
越
大
,
区
分
样
本
的
能
力
就
越
强
,
越
具
有
代
表
性
,
很
显
然
这
是
一
种
自
顶
向
下
的
贪
心
策
略
。
以
上
就
是
I
D
3
算
法
的
核
心
思
想
{\color{Red}在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,选择最大信息增益的属性来划分,因为信息增益越大,区分样本的能力就越强,越具有代表性,很显然这是一种自顶向下的贪心策略。以上就是ID3算法的核心思想}
在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,选择最大信息增益的属性来划分,因为信息增益越大,区分样本的能力就越强,越具有代表性,很显然这是一种自顶向下的贪心策略。以上就是ID3算法的核心思想
决策树之C4.5算法
分裂信息度量:
S
p
l
i
t
I
n
f
o
r
m
a
t
i
o
n
(
S
,
T
)
=
−
∑
i
c
∣
S
i
∣
∣
S
∣
l
o
g
2
∣
S
i
∣
∣
S
∣
SplitInformation(S,T)=-\sum_{i}^{c}\frac{|S_i|}{|S|}log_2\frac{|S_i|}{|S|}
SplitInformation(S,T)=−∑ic∣S∣∣Si∣log2∣S∣∣Si∣
信息增益率:
G
a
i
n
R
a
t
i
o
(
S
,
T
)
=
G
a
i
n
(
S
,
T
)
S
p
l
i
t
I
n
f
o
r
m
a
t
i
o
n
(
S
,
T
)
GainRatio(S,T)=\frac{Gain(S,T)}{SplitInformation(S,T)}
GainRatio(S,T)=SplitInformation(S,T)Gain(S,T)
为什么选择信息增益率,可以想象用加速度和速度衡量的意思
C4.5算法优缺点
优点:
(1)通过信息增益率选择分裂属性,克服了ID3算法中通过信息增益倾向于选择拥有多个属性值的属性作为分裂属性的不足;
(2)能够处理离散型和连续型的属性类型,即将连续型的属性进行离散化处理;
(3)构造决策树之后进行剪枝操作;
(4)能够处理具有缺失属性值的训练数据。
缺点:
(1)算法的计算效率较低,特别是针对含有连续属性值的训练样本时表现的尤为突出。
(2)算法在选择分裂属性时没有考虑到条件属性间的相关性,只计算数据集中每一个条件属性与决策属性之间的期望信息,有可能影响到属性选择的正确性。
例题:
1. 计算类别信息熵
I
n
f
o
(
D
)
=
−
9
14
l
o
g
2
9
14
−
5
14
l
o
g
2
5
14
=
0.94
Info(D)=-\frac{9}{14}log_2\frac{9}{14}-\frac{5}{14}log_2\frac{5}{14}=0.94
Info(D)=−149log2149−145log2145=0.94
类别信息熵表示的是所有样本中各种类别出现的不确定性之和。根据熵的概念,熵越大,不确定性就越大,把事情搞清楚所需要的信息量就越多。
2. 计算每个属性的信息熵
每个属性的信息熵相当于一种条件熵。他表示的是在某种属性的条件下,各种类别出现的不确定性之和。属性的信息熵越大,表示这个属性中拥有的样本类别越不“纯”。
3. 计算信息增益
信息增益的 = 熵 - 条件熵,在这里就是 类别信息熵 - 属性信息熵,它表示的是信息不确定性减少的程度。如果一个属性的信息增益越大,就表示用这个属性进行样本划分可以更好的减少划分后样本的不确定性,当然,选择该属性就可以更快更好地完成我们的分类目标。
信息增益就是ID3算法的特征选择指标。
但是我们假设这样的情况,每个属性中每种类别都只有一个样本,那这样属性信息熵就等于零,根据信息增益就无法选择出有效分类特征。所以,C4.5选择使用信息增益率对ID3进行改进。
4.计算属性分裂信息度量
用分裂信息度量来考虑某种属性进行分裂时分支的数量信息和尺寸信息,我们把这些信息称为属性的内在信息。信息增益率用信息增益 / 内在信息,会导致属性的重要性随着内在信息的增大而减小(也就是说,如果这个属性本身不确定性就很大,那我就越不倾向于选取它),这样算是对单纯用信息增益有所补偿。
5. 计算信息增益率
I
G
R
(
天
气
)
=
G
a
i
n
(
天
气
)
H
(
天
气
)
=
0.156
IGR(天气)=\frac{Gain(天气)}{H(天气)}=0.156
IGR(天气)=H(天气)Gain(天气)=0.156
I
G
R
(
温
度
)
=
G
a
i
n
(
温
度
)
H
(
温
度
)
=
0.0186
IGR(温度)=\frac{Gain(温度)}{H(温度)}=0.0186
IGR(温度)=H(温度)Gain(温度)=0.0186
I
G
R
(
湿
度
)
=
G
a
i
n
(
湿
度
)
H
(
湿
度
)
=
0.15
IGR(湿度)=\frac{Gain(湿度)}{H(湿度)}=0.15
IGR(湿度)=H(湿度)Gain(湿度)=0.15
I
G
R
(
风
速
)
=
G
a
i
n
(
天
气
)
H
(
天
气
)
=
0.0487
IGR(风速)=\frac{Gain(天气)}{H(天气)}=0.0487
IGR(风速)=H(天气)Gain(天气)=0.0487
天气的信息增益率最高,选择天气为分裂属性。发现分裂了之后,天气是“阴”的条件下,类别是”纯“的,所以把它定义为叶子节点,选择不“纯”的结点继续分裂。
在子结点当中重复过程1~5。
决策树之CART算法
基
尼
系
数
代
表
了
模
型
的
不
纯
度
,
基
尼
系
数
越
小
,
不
纯
度
越
低
,
特
征
越
好
。
这
和
信
息
增
益
(
比
)
相
反
。
{\color{Blue}基尼系数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(比)相反。}
基尼系数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(比)相反。
假设K个类别,第k个类别的概率为pk,概率分布的基尼系数表达式:
如果是二分类问题,第一个样本输出概率为p,概率分布的基尼系数表达式为:
对于样本D,个数为|D|,假设K个类别,第k个类别的数量为|Ck|,则样本D的基尼系数表达式:
对于样本D,个数为|D|,根据特征A的某个值a,把D分成|D1|和|D2|,则在特征A的条件下,样本D的基尼系数表达式为:
CART算法由以下两步组成:
1.决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;(
递
归
地
构
建
二
叉
决
策
树
的
过
程
{\color{Red}递归地构建二叉决策树的过程}
递归地构建二叉决策树的过程)
2.决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。
构建二叉决策树:
1、设结点的训练数据集为D,计算现有特征对该数据集的Gini系数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或 “否”将D分割成D1和D2两部分,计算A=a时的Gini系数。
2、在所有可能的特征A以及它们所有可能的切分点a中,选择
G
i
n
i
系
数
最
小
{\color{Red}Gini系数最小}
Gini系数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
3、对两个子结点递归地调用步骤l~2,直至满足停止条件。(结点中的样本个数小于预定阈值,或样本集的Gini系数小于预定阈值(样本基本属于同一类),或者没有更多特征。)
4、生成CART决策树。
eg
在上述图中,属性有3个,分别是有房情况,婚姻状况和年收入,其中有房情况和婚姻状况是离散的取值,而年收入是连续的取值。拖欠贷款者属于分类的结果。
假设现在来看有房情况这个属性,那么按照它划分后的Gini指数计算如下
而对于婚姻状况属性来说,它的取值有3种,按照每种属性值分裂后Gini指标计算如下
最后还有一个取值连续的属性,年收入,它的取值是连续的,那么连续的取值采用分裂点进行分裂。如下
CART树剪枝
预剪枝
在构造决策树的同时进行剪枝。所有决策树的构建方法,都是在无法进一步降低熵的情况下才会停止创建分支的过程,为了避免过拟合,可以设定一个阈值,熵减小的数量小于这个阈值,即使还可以继续降低熵,也停止继续创建分支。但是这种方法实际中的效果并不好,因为在实际中,面对不同问题,很难说有一个明确的阈值可以保证树模型足够好,当然在xgboost和lightGBM里面有一些参数例如min_child_weight也算是设置了分裂节点的权重值,像xgboost之类已经把过拟合写进损失函数中了,因此不需要有剪枝的过程。
后剪枝
后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,在剪枝过程中, 将一些子树删除而用叶节点代替,这个叶节点所标识的类别用这棵子树中大多数训练样本所属的类别来标识。决策树构造完成后进行剪枝。剪枝的过程是对拥有同样父节点的一组节点进行检查,判断如果将其合并,熵的增加量是否小于某一阈值。如果确实小,则这一组节点可以合并一个节点,其中包含了所有可能的结果。后剪枝是目前最普遍的做法。
剪枝的原因:生长完全的决策树其实是overfitting的,必须要通过剪枝来降低它的泛化误差。
其实在了解CART树剪枝之前应该先了解树剪枝