相亲决策树生成(类似于这样,网上还有更多很形象的例子):
提出问题:
决策树谁最优先分割(如何排序的)?
决策树是如何分割的(定量数据/定性数据)?
带着问题接着往下看
4.2.1 信息增益
- 信息熵:
最早是香农从热力学中借用过来的。热力学中的热熵是表示分子状态混乱程度的物理量。香农用信息熵的概念来描述信源的不确定度。
公式: E n t ( D ) = − ∑ i = 1 m p i l o g 2 p i Ent(D) = -\sum_{i=1}^{m}p_ilog_2p_i Ent(D)=−∑i=1mpilog2pi
Ent(D)越小说明信息的混乱程度小,也就是纯度高。 - 信息增益:
如果你看不懂这个公式不要担心.你可以把它理解成这样的公式:
G a i n ( X , Y ) = E n t ( Y ) − E n t ( Y ∣ X ) Gain(X,Y) = Ent(Y)-Ent(Y|X) Gain(X,Y)=Ent(Y)−Ent(Y∣X)
意思就是说当Y的信息熵-当X情况下Y的信息熵。ok我们引入数据。这是一个关于出不出去玩的样本数据.我们想根据外面的天气如温度湿度是不是下雨等来预测是否出去玩.
-
play的信息熵(14条数据,9个出去玩,5个不出去玩):
E n t r o p y ( p l a y ) = − 9 14 ∗ l o g 9 14 − 5 14 ∗ l o g 5 14 Entropy(play) = -\frac{9}{14}*log\frac{9}{14}-\frac{5}{14}*log\frac{5}{14} Entropy(play)=−149∗log149−145∗log145
-
wind关于是否出去玩的信息增益:
G a i n ( w i n d ) = E n t ( p l a y ) − e n t ( w i n d ) = 0.048 Gain(wind) = Ent(play)-ent(wind)=0.048 Gain(wind)=Ent(play)−ent(wind)=0.048
如果你先求一下风大出去玩的信息增益在求风小出去玩的信息增益在求和也是可以的,我会觉得这样比较好理解一些。试想象当他的信息熵越小他的纯度就越大,风小就出去玩,风大就不出去玩这种规律的可能就会越大。
-
ok,我们已经知道了信息熵,以及熵增益都是怎么计算的,也可以求出其他三个特征的信息增益.
G
a
i
n
(
H
u
m
i
d
i
t
y
)
=
0.151
Gain(Humidity) = 0.151
Gain(Humidity)=0.151
G
a
i
n
(
O
u
t
l
o
o
k
)
=
0.247
Gain(Outlook) = 0.247
Gain(Outlook)=0.247
G
a
i
n
(
T
e
m
p
e
r
a
t
u
r
e
)
=
0.029
Gain(Temperature) = 0.029
Gain(Temperature)=0.029
- 构建决策树
那么我们尝试构建一下决策树,构建决策树的原理很简单,即在当前情况下谁的信息增益大谁作为节点划分.
例如最早看到的相亲树:
根节点 :见与不见的情况下,年龄的信息增益最大。所以作为根节点。
2节点 : 在根节点的情况下,收入的信息增益最大。所以作为2节点。
其他节点同理。
(如果是回归问题,也就是说数据是连续的那怎么解决呢? 是用gini系数代替信息增益。后面涉及到了再展开说)
4.2.2 增益率
在构建树的过程中,下面分支越来越细(数据越来越少),就好比男人很多,但是你又要求在年龄30以下,收入很高,长得很帅,情商高,没谈过恋爱。 层层筛选下来这样的男人就很少了,且他不能够代表大多数男人,显然不具有泛化能力。无法对新样本进行有效的预测。
著名的C4.5决策树:考虑到信息增益准则对数目取值是有较大影响,使用增益率(gain ratio) 来选择最优划分属性。
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=1V∣D∣∣Dv∣log2∣D∣∣Dv∣
在本书中IV也叫固有值(intrinsic value),在其他书中可能会被叫做分裂信息度量(splitInformation)名字不一样但是内容是相同的(度量数据的分布情况)
4.2.3 基尼指数
下面举一个例子来说明上面的公式:
如下,是一个包含30个学生的样本,其包含三种特征,分别是:性别(男/女)、班级(IX/X)和高度(5到6ft)。其中30个学生里面有15个学生喜欢在闲暇时间玩板球。那么要如何选择第一个要划分的特征呢,我们通过上面的公式来进行计算。
CART算法实现:
输入:训练数据集D,停止计算的条件
输出:CART决策树
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉树:
Step1:设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时,对每一个特征A,对其可能取的每个值a,根据样本点A=a的测试为“是”或“否”将D分割为D1和D2两部分,利用上式Gini(D,A)来计算A=a时的基尼指数。
Step2:在所有可能的特征A以及他们所有可能的切分点a中,选择基尼指数最小的特征及其对应可能的切分点作为最有特征与最优切分点。依最优特征与最有切分点,从现结点生成两个子节点,将训练数据集依特征分配到两个子节点中去。
Step3:对两个子结点递归地调用Step1、Step2,直至满足条件。
Step4:生成CART决策树
算法停止计算的条件是节点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值,或者没有更多特征。
我们已经学过了ID3决策树,C4.5决策树,CART决策树。他们分别用信息增益,信心增益率,基尼指数作为分割准则。他们之间有什么区别呢? 在李航的《统计学习方法》中有详细的介绍。
4.3 剪枝处理
前面说过,越到后面决策树的分支越细,泛化能力越差。剪枝(剪掉它)是决策树学习算法对付"过拟合"的主要手段。
- 预剪枝:在决策树生成过程中,对每个节点在划分前进行预估,若当前节点的划分不能带来决策树泛化能力提升,则停止划分。
- 后剪枝:先从训练集生成一颗完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化能力提升,则将该子树替换为叶节点。
很容易能够看出 后剪枝的预测能力要比预剪枝强,但是他的运算速度也会有所牺牲。
4.4.1 连续值处理
寻找最佳阈值:
把连续值数据排序,并把找到n-1个候选阈值
a
i
+
a
i
+
1
2
\frac{a_i+a_{i+1}}{2}
2ai+ai+1。如数据为[1,3,5,7,9] 那么候选阈值为[2,4,6,8],分别计算信息增益。取最大的信息增益所用的划分阈值为最佳阈值,其他与离散数据相同。
4.4.2 缺失值处理
套用无缺失值所占比例得上述公式。