文章目录一瞥
决策树是一种运用统计概率分析的机器学习方法。 是表示基于特征对实例进行分类的树形结构,它表示对象属性和对象值之间的一种映射,从给定的训练数据集中,依据特征选择的准则,递归的选择最优划分特征,并根据此特征将训练数据进行分割,使得各子数据集有一个最好的分类的过程。树中的每一个节点表示对象属性的判断条件,其分支表示符合节点条件的对象。树的叶子节点表示对象所属的预测结果,主要有ID3,C4.5和CART三种基础决策树
决策树算法3要素:
- 决策树生成
- 特征选择
- 决策树剪枝
1、关于决策树生成
决策树的生成过程就是 使用满足划分准则的特征不断的将数据集划分为纯度更高,不确定性更小的子集的过程。
对于当前数据集D的每一次的划分,都希望根据某特征划分之后的各个子集的纯度更高,不确定性更小。
而如何度量划分数据集前后的数据集的纯度以及不确定性呢?
答案:特征选择准则,比如:信息增益,信息增益率,基尼指数
2、特征选择准则:
目的:使用某特征对数据集划分之后,各数据子集的纯度要比划分前的数据集D的纯度高(不确定性要比划分前数据集D的不确定性低。)
注意:
1. 划分后的纯度为各数据子集的纯度的加和(子集占比*子集的经验熵)。
2. 度量划分前后的纯度变化 用子集的纯度之和与划分前的数据集D的纯度 进行对比。
特征选择的准则就是 度量样本集合不确定性以及纯度的方法。本质相同,定义不同而已。
特征选择的准则主要有以下三种:信息增益,信息增益率,基尼指数
这些概念我们在上一篇博客里面已经有讲到了,下面主要分析使用这三种特征选择的方法进行决策树的构建。
一、ID3算法
1、算法原理
定义: 以某特征划分数据集前后的熵的差值,在熵的理解那部分提到了,熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。
划分前样本集合D的熵是一定的 ,entroy(前),
使用某个特征A划分数据集D,计算划分后的数据子集的熵 entroy(后)
信息增益 = entroy(前) - entroy(后)
ID3是采用信息增益作为特征选择的标准,信息增益越大,说明此按此特征分类后越能消除信息的不确定性。信息增益上一篇博客有介绍,公式如下:
G
a
i
n
(
D
,
A
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
=
E
n
t
(
D
)
−
H
(
D
∣
A
)
Gain(D,A)=Ent(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v)=Ent(D)-H(D|A)
Gain(D,A)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−H(D∣A)
做法:计算使用所有特征划分数据集D,得到多个特征划分数据集D的信息增益,从这些信息增益中选择最大的,因而当前结点的划分特征便是使信息增益最大的划分所使用的特征。
信息增益的理解:
对于待划分的数据集D,其 entroy(前)是一定的,但是划分之后的熵 entroy(后)是不定的,entroy(后)越小说明使用此特征划分得到的子集的不确定性越小(也就是纯度越高),因此 entroy(前) - entroy(后)差异越大,说明使用当前特征划分数据集D的话,其纯度上升的更快。而我们在构建最优的决策树的时候总希望能更快速到达纯度更高的集合,这一点可以参考优化算法中的梯度下降算法,每一步沿着负梯度方法最小化损失函数的原因就是负梯度方向是函数值减小最快的方向。
同理:在决策树构建的过程中我们总是希望集合往最快到达纯度更高的子集合方向发展,因此我们总是选择使得信息增益最大的特征来划分当前数据集D。
ID3算法有2大缺点:
1。 是类别越多的特征计算出的信息增益越大,易导致生成的决策树广而浅;信息增益偏向取值较多的特征
2。是只能处理离散变量,不能处理连续变量。
原因:当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较 偏向取值较多的特征。
2、算法过程
① 计算训练集所有样本的信息熵
② 计算按每一特征分类后的信息增益
③ 选择信息增益最大的特征进行分类,得到子节点
④ 在还未被选择的特征中迭代②和③,直到无特征可分或信息增益已经无法达到要求的标准时,算法终止
二、C4.5算法
1、算法原理
信息增益比 = 信息增益* 惩罚参数
G
a
i
n
r
a
t
i
o
(
D
,
A
)
=
G
a
i
n
(
D
,
A
)
I
V
(
A
)
Gain_{ratio}(D,A)=\frac{Gain(D,A)}{IV(A)}
Gainratio(D,A)=IV(A)Gain(D,A)
I
V
(
A
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
IV(A)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2{\frac{|D^v|}{|D|}}
IV(A)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
注意:其中的IV(A),对于样本集合D,将当前特征A作为随机变量(取值是特征A的各个特征值),求得的经验熵。
(之前是把集合类别作为随机变量,现在把某个特征作为随机变量,按照此特征的特征取值对集合D进行划分,计算熵IV(A))
信息增益比本质: 是在信息增益的基础之上乘上一个惩罚参数。
特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。
惩罚参数:数据集D以特征A作为随机变量的熵的倒数,即:将特征A取值相同的样本划分到同一个子集中(之前所说数据集的熵是依据类别进行划分的)
缺点:信息增益比偏向取值较少的特征
原因: 当特征取值较少时HA(D)的值较小,因此其倒数较大,因而信息增益比较大。因而偏向取值较少的特征。
使用信息增益比:基于以上缺点,并不是直接选择信息增益率最大的特征,而是现在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中再选择信息增益率最高的特征。
C4.5是在ID3的算法基础上,采用信息增益率来做为特征选择,通过增加类别的惩罚因子,规避了类别越多信息增益越大的问题,同时也可以对连续变量通过均值离散化的方式,解决无法处理连续变量的问题。
2、算法过程
① 计算训练集所有样本的信息熵
② 计算按每一特征分类后的信息增益率
③ 选择信息增益率最大的特征进行分类,得到子节点
④ 在还未被选择的特征中迭代②和③,直到无特征可分或信息增益率已经无法达到要求的标准时,算法终止
三、CART算法
1、原理
C4.5虽然解决了ID3的两大问题,但是仍有自己的缺憾,那就是不能处理回归问题,CART因此诞生。CART不再通过信息熵的方式选取最优划分特征,而是采用基尼系数,也叫基尼不纯度,两者衡量信息量的作用相当,但是基尼系数由于没有对数运算,可大大减少计算开销。
定义:基尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。
注意: Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。
即 基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率
公式如下:
G
i
n
i
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
Gini(p)=\sum_{k=1}^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
-
pk表示选中的样本属于k类别的概率,则这个样本被分错的概率是(1-pk)
-
样本集合中有K个类别,一个随机选中的样本可以属于这k个类别中的任意一个,因而对类别就加和
-
当为二分类是, Gini§ = 2p(1-p)
集合中的基尼系数
G
i
n
i
(
D
)
=
1
−
∑
i
=
1
N
(
∣
D
i
∣
∣
D
∣
)
2
Gini(D)=1-\sum_{i=1}^{N}{(\frac{|D_i|}{|D|})^2}
Gini(D)=1−i=1∑N(∣D∣∣Di∣)2
基于特征A划分样本集合D之后的基尼指数:
G
i
n
i
(
D
,
A
)
=
∑
i
=
1
N
∣
D
i
∣
∣
D
∣
G
i
n
i
(
D
i
)
Gini(D,A)=\sum_{i=1}^{N}\frac{|D_i|}{|D|}Gini(D_i)
Gini(D,A)=i=1∑N∣D∣∣Di∣Gini(Di)
需要说明的是CART是个二叉树,也就是当使用某个特征划分样本集合只有两个集合:
- 等于给定的特征值 的样本集合D1 ,
- 不等于给定的特征值 的样本集合D2
实际上是对拥有多个取值的特征的二值处理。
举个例子:
假设现在有特征 “学历”,此特征有三个特征取值: “本科”,“硕士”, “博士”,当使用“学历”这个特征对样本集合D进行划分时,划分值分别有三个,因而有三种划分的可能集合,划分后的子集如下:
- 划分点: “本科”,划分后的子集合 : {本科},{硕士,博士}
- 划分点: “硕士”,划分后的子集合 : {硕士},{本科,博士}
- 划分点: “硕士”,划分后的子集合 : {博士},{本科,硕士}
对于上述的每一种划分,都可以计算出基于 划分特征= 某个特征值 将样本集合D划分为两个子集的纯度:因而对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值)然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。
CART算法处理分类问题时,以叶子节点上样本投票预测类别,处理回归问题时,以叶子节点的样本均值作为预测值
2、算法过程
① 计算训练集所有样本的基尼系数
② 计算某一特征下每一属性划分后左右两边的基尼系数,找到基尼系数和最小的划分属性
③ 将每一个特征均按②中的方法计算,得到每一个特征最佳的划分属性
④ 对比③中每一个特征的最优划分属性下的基尼系数和,最小的就是最优的划分特征
⑤ 按最优的特征及最优属性划分,得到子节点
⑥ 在还未被选择的特征中迭代②-⑤,直到无特征可分或信息增益率已经无法达到要求的标准时,算法终止
四、决策树应用场景
可以用于二元或多元分类,以及回归,下面是我想到的一些业务场景:
① 判断什么样的用户流失概率最高
② 根据用户的消费属性,判断是否可以打白条,以及白条金额上限设定
③ 如何预测未来一段时间内,哪些顾客会流失,哪些顾客最有可能成为VIP客户
④ 如何根据用户的历史相亲情况,匹配最佳相亲对象等
……
以下是决策树系列其它文章:
决策树①——信息熵&信息增益&基尼系数
决策树③——决策树参数介绍(分类和回归)
决策树④——决策树Sklearn调参(GridSearchCV调参及过程做图)
决策树⑤——Python代码实现决策树
决策树应用实例①——泰坦尼克号分类
决策树应用实例②——用户流失预测模型
决策树应用实例③——银行借贷模型