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