决策树基本流程
决策树是基于树结构来进行决策的。西瓜问题的决策树如下图所示。
通过一系列的判断得到最终的决策:这是个好瓜。
可以看出,
决策过程的最终结论对应了我们所希望的判定结果。
决策过程中提出的每个判定问题都是对某个属性的“测试”。如“色泽=?”
每个测试的结果或是导出最终结论或是导出进一步的判定问题,考虑范围在上次决策结果的限定范围内。如图中判断根蒂,仅考虑青绿色瓜的根蒂。
一个决策树包含一个根节点、若干个内部节点和若干个叶节点;叶节点对应于决策结果,其他每个节点对应于一个属性测试。
决策树学习的目的是为了产生一颗泛化能力强的决策树,基本流程遵循简单直观的“分而治之”
训练集 D={
(x1,y1),(x2,y2),…,(xm,ym)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) }
属性集 A={
a1,a2,…,ad} A = { a 1 , a 2 , … , a d }
TreeGenerate(D,A)
生成节点node
if D中样本全属于同一类别C then
将node标记为C类叶节点;return
end if
if A=∅ OR D中样本在A上取值相同 then
将node标记为叶节点,类别标记为D中样本数目最多的类;return
end if
从A中选择最优划分属性a∗;
for a* 的每一个值a*_v do
为node生成一个分支;令D_v表示D中在a*上取值为a*_v的样本子集
if D_v=∅ then
将分支节点标记为叶节点,分类标记为D中样本最多的类;return
else
以 TreeGenerate(D_v,A\{
a*})为分支节点
end if
end for
显然,决策树生成是一个递归过程,在上述算法中有三种情况可以导致递归返回:
- 当前节点包含的样本全属于同一类别,无需划分
- 当前属性集为空,或是当前所有样本在当前所有属性集上取值相同,无法划分
- 当前节点包含的样本集合为空,不能划分
注意第2和第3种情形,都把当前节点标记为叶节点,第2种情形是将类别标记为该节点所含样本最多的类别,是在利用当前节点的后验分布,第3种情形则是将类别标记为父节点所含样本最多的类别,是把父节点的样本分布作为当前节点的先验分布
划分选择
决策树学习的关键是从A中选择最优划分属性a∗,根据什么来进行划分呢?一般来说随着划分过程不断进行,希望决策树的分支节点所包含的样本尽可能属于同一个类别,即节点的纯度越来越高。
信息增益
信息熵是度量样本集合纯度最常用的一种指标。信息熵越小,纯度越高。
假设当前集合D种第k类样本所占比例为 pk(k=1,2,…|Y|) p k ( k = 1 , 2 , … | Y | ) ,则D的信息熵定义为:
假定属性a有V个可能取值 { a1,a2,…,aV} { a 1 , a 2 , … , a V } ,若使用a对样本集D进行划分,就会产生V个分支节点,其中第v个分支节点包含了D中所有在属性a上取值为 av a v 的样本,记为 Dv D v .
给分支节点赋予权重 |Dv||D| | D v