前言
首先关于什么是决策树,以及决策树的基本处理过程,如果有不熟悉的朋友,可以关注我之前的博客内容:
这是我见过讲解最详细最通俗易懂的决策树(一)
这是我见过讲解最详细最通俗易懂的决策树(二)
以上两篇博客涉及到了决策树的生成过程,讲解了包括信息熵、信息增益、剪枝等概念。但是没有涉及到连续值的处理办法。
连续值问题
那么什么是连续值问题呢?这里我们引用周志华的机器学习里面的相关概念:
给定样本集
D
D
D和连续属性
a
a
a,假定
a
a
a在
D
D
D上出现了
n
n
n个不同的取值,将这些值从小到大进行排序,记为{
a
1
a^{1}
a1,
a
2
a^{2}
a2,…
a
n
a^{n}
an}.基于划分点t可以将D分为子集
D
t
−
D_{t}^{-}
Dt−和
D
t
+
D_{t}^{+}
Dt+,其中
D
t
−
D_{t}^{-}
Dt−包含那些在属性
a
a
a上取值不大于
t
t
t的样本,而
D
t
−
D_{t}^{-}
Dt−则包含那些在属性a上取值大于t的样本。显然,对相邻属性取值
a
i
a^{i}
ai与
a
i
+
1
a^{i+1}
ai+1来说,t在区间【
a
i
a^{i}
ai,
a
i
+
1
a^{i+1}
ai+1】中取任意值所产生的划分结果相同,因此对于连续属性
a
a
a,我们可以考察包含
n
−
1
n-1
n−1个元素的候选划分集合:
T
a
=
a
i
+
a
i
+
1
2
∣
1
≤
i
≤
n
−
1
T_{a}={ \frac{a^{i}+a^{i+1}}{2}| 1\leq i\leq n-1}
Ta=2ai+ai+1∣1≤i≤n−1
把区间【
a
i
a^{i}
ai,
a
i
+
1
a^{i+1}
ai+1)的中位点
a
i
+
a
i
+
1
2
\frac{a^{i}+a^{i+1}}{2}
2ai+ai+1作为候选划分点。然后我们可以像离散属性值一样考虑这些划分点,选取最优的划分点进行样本集合的划分。
划分公式如下:
G
a
i
n
(
D
,
a
)
=
m
a
x
λ
ϵ
T
a
G
a
i
n
(
D
,
a
,
t
)
=
m
a
x
λ
ϵ
T
a
E
n
t
(
D
)
−
∑
λ
ϵ
(
−
,
+
)
∣
D
t
λ
∣
∣
D
∣
E
n
t
(
D
t
λ
)
Gain(D,a)=\underset{\lambda \epsilon T_{a}}{max}Gain(D,a,t)=\underset{\lambda \epsilon T_{a}}{max}Ent(D)-\sum_{\lambda \epsilon (-,+)}\frac{\left | D_{t}^{\lambda } \right |}{\left |D \right |}Ent(D_{t}^{\lambda })
Gain(D,a)=λϵTamaxGain(D,a,t)=λϵTamaxEnt(D)−∑λϵ(−,+)∣D∣∣Dtλ∣Ent(Dtλ)
其中,
G
a
i
n
(
D
,
a
,
t
)
Gain(D,a,t)
Gain(D,a,t)是样本集
D
D
D基于划分
t
t
t二分后的信息增益。于是,我们就可以选择
G
a
i
n
(
D
,
a
,
t
)
Gain(D,a,t)
Gain(D,a,t)最大化的划分点。
上面这个公式什么意思?和离散化的划分有什么区别?如何使用?我们看这个例子:
我们以密度这个属性为例。我们比较区别,我们会发现,密度包含17个不同的取值。(色泽、纹理、敲声这些传统的属性均只包含了3个取值)
现在我们捋一遍我们要做的事情及流程:
我们需要计算每个属性的信息增益,关于色泽、根蒂、敲声、纹理、脐部和触感我们在前面的博客已经详细说明了计算过程,现在我们要计算密度的信息增益。做法如下:
1,确定密度这个属性包含的可取值:
T
密
度
T_{密度}
T密度=
0.244
,
0.294
,
0.351
,
0.381
,
0.420
,
0.459
,
0.518
,
0.574
,
0.600
,
0.621
,
0.636
,
0.648
,
0.661
,
0.681
,
0.708
,
0.746
{0.244,0.294,0.351,0.381,0.420,0.459,0.518,0.574,0.600,0.621,0.636,0.648,0.661,0.681,0.708,0.746}
0.244,0.294,0.351,0.381,0.420,0.459,0.518,0.574,0.600,0.621,0.636,0.648,0.661,0.681,0.708,0.746这16个可取值就是把表格中的密度从小到大排序后,相邻两个数字的平均值。
2,计算根节点的信息熵:
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=12pklog2pk=−(178log2178+179log2179)=0.998
3,从
t
=
0.244
t=0.244
t=0.244开始,计算这16个可取值的信息熵:
E
n
t
(
D
t
−
)
=
−
(
0
∗
l
o
g
2
∗
0
+
1
∗
l
o
g
2
∗
1
)
=
0
Ent(D_{t}^{-})=-(0*log_{2}*0+1*log_{2}*1)=0
Ent(Dt−)=−(0∗log2∗0+1∗log2∗1)=0
E
n
t
(
D
t
+
)
=
−
(
8
16
∗
l
o
g
2
∗
8
16
+
8
16
∗
l
o
g
2
∗
8
16
)
=
1
Ent(D_{t}^{+})=-(\frac{8}{16}*log_{2}*\frac{8}{16}+\frac{8}{16}*log_{2}*\frac{8}{16})=1
Ent(Dt+)=−(168∗log2∗168+168∗log2∗168)=1
G
a
i
n
(
D
,
a
,
t
)
=
G
a
i
n
(
D
,
ρ
,
0.244
)
=
0.998
−
(
1
17
∗
0
+
16
17
∗
1
)
=
0.057
Gain(D,a,t)=Gain(D,\rho ,0.244)=0.998-(\frac{1}{17}*0+\frac{16}{17}*1)=0.057
Gain(D,a,t)=Gain(D,ρ,0.244)=0.998−(171∗0+1716∗1)=0.057
4,该属性的信息增益点:
通过同样的方法对其他15个值进行计算,我们可以得出,当
t
=
0.381
t=0.381
t=0.381时,信息增益最大为
0.263
0.263
0.263.
同理,对于含糖率,当t=0.126时,信息增益为:0.349.
**注意点:**有一点需要注意的是:与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。**如下图所示的一颗决策树,“含糖率”这个属性在根节点用了一次,后代结点也用了一次,只是两次划分点取值不同。