最大熵原理
当我们需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设。(不做主观假设这点很重要。)
在这种情况下,概率分布最均匀,预测的风险最小。因为这时概率分布的信息熵最大,所以人们称这种模型叫"最大熵模型"。
我们常说,不要把所有 的鸡蛋放在一个篮子里,其实就是最大熵原理的一个朴素的说法,因为当我们遇到不确定性时,就要保留各种可能性。[数学之美]
例子:
一个军事、政治和科技的3类文本分类问题,我们得知,出现“飞机”这个词的80%的文档属于军事类别,对于“飞机”这个词在其他两类中的分布未知”根据最大熵原则,如果给定一个包含“飞机”这个词文档,那么认为文档以0.8的概率属于军事类别,分别以0.1的概率属于其他两类;如果文档中不包含“飞机”这个词,那么认为文档分别以相同的1/3的概率属于每一个类”,即在符合已知约束的情况下,使未知事件的分布尽可能均匀。
模型定义:
目标函数就是给定特征X下该样本属于类别Y的条件概率,实际是一个条件熵H(P)。 我们要在约束条件下,最大化H(P)。
学习:
学习过程:(为了先求出拉格朗日乘子,我们要将原始问题变为 min问题)
1、将最大值问题改写成等价的最小值问题;
2、将约束最优化的原始问题转换成无约束最优化的对偶问题:
a、引入拉格朗日乘子,定义拉格朗日函数L(P,w)
b、
c、通过求偏导数,求出P、w。
d、w带入P的公式中,即可得到对偶问题的解,也是原始问题的解。
算法:
最大熵模型学习归结为以似然函数为目标函数的最优化问题。如果是光滑的凸函数,有:
1、改进的迭代尺度法 (IIS)
2、梯度下降法 (SGD)
3、牛顿法或拟牛顿法(一般收敛速度更快)L-BFGS
这些方法,保证可以找到全局最优解。
IIS:
思想:通过每次迭代新的参数向量w+a,使得模型的对数似然函数值增大(极大似然估计)。
1、建立对数似然函数该变量的下界:
如果能找到适合的迭代步长a,使得下界A(a|w)提高,那么对数似然函数也会提高。IIS试图一次只优化a向量的一个变量ai,而固定其他变量aj,i <> j
IIS对下界进一步优化:
实现:
Python:
工具包:http://ir.hit.edu.cn/~taozi/ME.htm
案例:
http://blog.csdn.net/on_1y/article/details/9769919
https://github.com/minixalpha/PyCWS/blob/master/src/cwsMaxEn-13f.py
R语言:
https://github.com/txHe/R-TextClassification
优缺点:
优点:模型形式简单
缺点:训练复杂
总结:
最大熵模型是一个概率模型,而且它对于未知数据有自己的假设,即未知情况的分布情况是均匀的。
特征工程之后,找到一些特征函数f,利用拉格朗日函数进行转换对偶问题求解,或者 利用极大似然函数转换为最大值优化问题。
机器学习算法很难说一个模型一定优于另一个模型,只能说某些任务上某个模型可能更加适合。然而,实际上很多系统的提升不在模型上而是在特征提取上,这也就是为何深度学习能突然火起来的原因之一吧,因为它能自主学习到抽象的特征表示,不再需要费劲的构建特征了。
参考文献:
http://homepages.inf.ed.ac.uk/lzhang10/maxent.html