决策树归纳:
概念: 每个节点表示一个测试, 是则拐至右子节点,否则拐至左子结点,继续进行子节点测试。。。
1)ID3:
同理: outlook=overcast,entropy=0 outlook=rainy, entropy=0.971
2)计算outlook的信息熵(当前不稳定因素是outlook的)
outlook=sunny 5/14 overcast 4/14 rainy 5/14,
此时的信息熵为 5/14 × 0.971 + 4/14 × 0 + 5/14 × 0.971 = 0.693
3)计算变化量(信息增溢 gain)
gain(outlook) = 原来的信息熵 - 当前的信息熵 = 0.940 - 0.693 = 0.247
同理算出 gain(temperature) = 0.029, gain(humidity)=0.152, gain(windy)=0.048. 即outlook变化最大,即在当前情况下,outlook属性对决策(yes/no)的影响最大, 故当前测试应该是对于outlook的取值分支判断:(同时在属性列表中删除outlook属性)
同理在sunny情况下不同属性(temperature、humidity、windy)在不同取值下的Yes/no情况,计算最终的信息熵,跟当前的信息熵(0.693)进行比较
在overcast情况下。。。。rainy。。。。。
最后的结果为:
注:
1)关于entropy计算可以用Matlab实现:
>>f = inline('-x*log(x)/log(2) - y*log(y)/log(2)', 'x', 'y');
>> f(9/14, 5/14) 2)关于删掉的选中属性A,在A所处的节点的所有子树都不可能出现这个属性(决策已经是在A属性下分析了), 但是对于与该节点的兄弟节点由于还没考虑到A,所以在A的“侄子”节点可能会出现A。
3)关于结束条件: 首先,当此时的所有元组的结果都一致,即信息熵为0(处理时,用|x|<e-7等等),此时的节点即为叶子节点(overcast)。 其次, 如果当前没有剩余的属性,此节点亦为叶节点,决策采取的方式是 多数表决,少数服从多数。
以上主要参考: http://blog.csdn.net/zhangchaoyangsun/article/details/8470195,详细代码在此网址,就不赘余了
总结:
决策树的思想是 当前状态下,最能影响决策的因素为当前决策的判定条件,再进一步细分,所选取的因素永远是当前条件下最能影响决策的属性(贪心算法)
同时由于结束条件(1),也可以在剩余属性不为空的时候结束决策(属性之间有可能出现冗余, 属性A的值与属性B的值可能有线性关系等等,比如所有户籍是广州A的广东人B,广东这个属性就冗余了,对决策无影响(在数学上表现为信息熵为0 或小到忽略不计),如果此时的属性集只剩余B属性, 这个时候就可以结束这一子树的继续搜索),一定意义上剪枝(树剪枝中的先剪枝)?
重复, 复制的困扰:
2219

被折叠的 条评论
为什么被折叠?



