http://blog.csdn.net/wangxin110000/article/details/23655761
前面说了条件熵,对于AB两个变量,我们知道了B便可以缩小A的范围,B能给我们减少A的不确定性;
决策树就是这样一种规则,当我知道了向量的所有属性的时候,他的类别就确定了,每多知道一个属性,这个向量的所属范围便缩小一部分。
“决策树学习本质上是从训练数据集中归纳出一组分类规则,与训练数据集不相矛盾的决策树可能有多个,也可能一个都没有,我们需要找的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。”摘自《统计学习方法》
决策树主要分为三个步骤:
1)属性选择
2)节点生成
3)剪枝
在属性选择方面,主要有信息增益,与信息增益比
信息增益:
H(D)-H(D|A)表示在知道A以后,D的熵减少的量;
g(D , A)=H(D) - H(D|A)
用这种方法,存在选取那些取值较多的特征,为什么?最直观的解释是,当A的取值范围较多,每个取值对应的空间便很小,当知道了A的取值,那么便将整个搜索空间压缩到了一个很小的范围内去确定数据最后的分类,也就是知道A的值最能减少D的不确定性;
为改进这个问题提出了信息增益比
信息增益比:
我们知道一个分布便对应一个熵,一个分类号,一个属性都可以对应一个熵
g(D , A)/ H(A) = 信息增益比
当H(A)比较大,即A属性的取值较多,会使得信息增益比降低,这相当于一个正则因子,抑制选取“选取那些取值较多的特征”这样一个趋势;
ID3即选择信息增益作为节点选择的依据,而C4.5选择信息增益比;
决策树的核心除了属性选择,便是剪枝了!
当训练集合相容的时候,即训练集合中没有矛盾项,那么训练出的决策树在训练集中可以有很高的正确率,但是随着树的复杂度增加,树的泛化性便变弱,复杂性与泛化性总是一对矛盾体,在SVM中便有正则化因子来抑制模型的复杂度,以达到较好的泛化性;
决策树也是这么做的,在误差选项上加上一个正则因子:叶子节点数目(叶子节点越多说明树越复杂),利用动态规划的方法寻找在 决策误差与模型复杂度之间的最佳权衡;
决策误差与叶子节点(模型复杂度)之间是个矛盾的关系,决策误差小了,那么模型复杂度会上升,反之也是,通过调节正则化参数的系数,系数越大说明你越看重模型的泛化性,系数为0说明你只看重训练集上的正确率;
程序中通过从下到上剪枝,剪枝以后模型复杂度降低,但是误差上升,通过比较剪枝前后,总误差函数的大小决定是否剪枝;