机器学习第四章:决策树
1.基本流程
决策树是基于树结构来进行决策的。
例如,我们要对“这是好瓜吗?”进行决策时,通常要进行一系列的判断或子决定:首先看“它是什么颜色?”,如果是青绿色,那么再看“它的根蒂是什么形态?”,如果是蜷缩,则…以此类推,最终得到最终决策:这是好瓜。
决策过程中提出的每个判定问题都是对某个属性的“测试”;
每个测试的结果要么导出最终结论,要么导出进一步的判定问题;
一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶节点;叶节点对应于决策结果,其他结点各对应一个属性测试;每个结点包括的样本集合根据属性测试的结果被划分到子节点中;根节点包含样本全集;从根节点到每个叶节点的路径对应了一个判定测试序列。
决策树学习的目的是为了产生一棵泛化能力强(处理未见示例能力强的决策树),其基本流程遵循“分而治之”的策略。
决策树学习基本算法:
输入:训练集D={
(x1,y1),(x2,y2),...,(xm,ym)}
属性集A={
a1,a2,...,ad}
过程:函数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生成一个分支;
令Dv表示D中在a*上取值为a*v的样本子集;
if Dv为空 then
将分支节点标记为叶节点,其类别标记为D中样本最多的类;return
else
以TreeGenerate(Dv,A\{
a*})为分支节点
end if
end for
输出:以node为根节点的一棵决策树
决策树的生成时一个递归过程;
在算法中,有三种情形会导致递归返回:
(1)当前节点包含的样本全属于同一类别,无需划分;
(2)当前属性集为空/所有样本在所有属性上取值相同,无法划分;
(3)当前节点包含样本集合为空,不能划分。
2.划分选择
决策树学习的关键在于如何选择最优划分属性;
随着划分过程的不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别(结点的“纯度”越来越高)。
2.1 ID3决策树
“信息熵”是度量样本集合纯度最常用的一种指标;
假设当前样本集合D中第k类样本所占比例为 p k ( k = 1 , 2 , . . . , ∣ Y ∣ ) p_{k}(k=1,2,...,|Y|) pk(k=1,2,...,∣Y∣),则 信息熵定义为:
E n t ( D ) = − ∑ i = 1 ∣ Y ∣ p k log 2 p k Ent\left( D\right) =-\sum ^{|Y|}_{i=1}p_{k}\log _{2}p_{k} Ent(D)=−i=1∑∣Y∣pklog