统计学习方法:决策树
由于时间关系我没有实现决策树的剪枝与CART
算法.
原理
熵
熵度量了不确定性,具体参考书中给出例子进行理解. H(x)=−n∑i=1pilogpi
条件熵
既然熵度量了不确定性,引用条件概率后,可以得到条件熵,即给定条件下的不确定性.
注意: 公式第二行对应实际计算的情况,因为分类问题中Y的类别必然大于1.
H(Y|X)=n∑i=1P(X=xi)H(Y|X=xi)=n∑i=1[P(X=xi)k∑j=1[P(Y=yj|X=xi)logP(Y=yj|X=xi)]]
信息增益
在极大似然估计中的得到的熵与条件熵称为经验熵
与经验条件熵
.将经验熵
减去经验条件熵
即可表示得知到X后对分类Y的不确定性减少的程度,也就是信息增益.一般地H(Y)−H(Y|X)被称为互信息,决策树中的信息增益等价于最大化特征与标签的互信息,只不过这里的概率都是统计出来的,结合到深度学习中还是有很大用武之地的,我个人觉得比如可以用互信息做度量代替attention
机制选择特征的激活概率,当然互信息的估计没有attention
那么方便.
g(D,A)=H(D)−H(D|A)
实现过程
实现过程中我还是依据朴素贝叶斯的思路,先统计出多项式分布的概率再逐一求熵与条件熵.这样做比较麻烦,我其实是为了制作P(Y=yj|X=xi)的概率分布动画...对于条件概率分布差距越大的特征表明他的熵越小,那么信息增益就越大.
这里我还踩了个小坑,朴素贝叶斯的条件概率是P(X|Y),这里的条件概率是P(Y|X)...由于时间关系也没有实现高斯分布的条件概率计算,如果需要可以参考我在朴素贝叶斯的实现.
后面考虑了下,这种概率方法的编程模型还是先弄个distribution
类,然后继承各种分布,输入数据后可以计算概率分布函数和熵.这样后续实现会比较方便.
简单的做法是直接把算熵和条件熵就好了.可以看ID3
的实现.