1.熵的定义熵最早是物理学中的一个概念。由克劳修斯于1854年提出,是描述事物无序性的参数。它仅次于热力学。它与规律的宏观方向性有关:在没有外力作用的情况下,总是向混沌状态转变。熵增是宇宙的基本规律,自然有序的状态会自发地逐渐向混沌状态转变。1948年,香农将熵的概念扩展到信道通信过程中,从而创立了“信息论”学科。香农用“信息熵”来描述随机变量的不确定程度,即对信息量的数学期望。信息熵、条件熵、联合熵、互信息、相对熵、交叉熵请点蓝字直接进入。在预测随机事件的概率分布时,我们的预测应该满足所有已知条件,而不是对未知情况做出任何主观假设。在这种情况下,概率分布最均匀,预测风险最小。因为此时概率分布的信息熵最大,所以人们称这种模型为“最大熵模型”。要理解最大熵原理,最简单的例子就是掷骰子。假设每一面朝上的概率是相等的,即每一点出现的概率都是1/6。这保留了最大的不确定性,即最大化了熵。当我们假设这个骰子属于韦小宝时,六个面朝上的概率是1/2,那么其他面朝上的概率是多少?在没有其他信息的情况下,其他面朝上的概率是1/10。在满足已知条件的前提下,如果没有更多的信息,那些不确定的部分是“等概率”的。等势性的特征在于熵最大化。最大熵模型要解决的问题是知道X,计算Y的概率,尽可能的最大化Y的概率。由此可以推导出最大熵模型的定义:最大熵模型假设分类模型是一个条件概率分布$P(Y|X)$,X是特征,Y是输出。给定训练集${(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})}$,其中x为n维特征向量,y为类别输出。我们的目标是使用最大熵模型选择最佳分类类型。给定训练集,我们可以得到整体联合分布$P(X,Y)$的经验分布$\overline{P}(X,Y)$,以及边缘分布的经验$P(X)$分布$\overline{P}(X)$。$\overline{P}(X,Y)$是训练集中X和Y同时出现的次数除以样本总数m,$\overline{P}(X)$是次数训练集中出现的X除以样本总数m。使用特征函数$f(x,y)$来描述输入x和输出y之间的关系。定义为:$$f(x,y)=
\begin{cases}
1&{x和y满足一定关系}\\
0&{otherwise}\end{cases}$$只要$(x^{(i)},y^{(i)})$出现在训练集中就可以考虑,其$f(x^{(i)},y^{(i)})=1$。同一个训练样本可以有多个约束特征函数。关于经验分布$\overline{P}(X,Y)$的特征函数$f(x,y)$的期望值用$E_{\overline{P}}(f)$表示为: $$E_{\overline{P}}(f)=\sum\limits_{x,y}\overline{P}(x,y)f(x,y)$$ 特征函数$f(x,y)$关于条件分布$P(Y|X)$和经验分布$\overline{P}(X)$的期望值,$E_{P}(f)$表示为:$$E_{P}(f)=sumlimits_{x,y}overline{P}(x)P(y|x)f(x,y)$$如果模型可以从训练集中学习,我们可以假设这两个期望是相等的。即:$$E_{overline{P}}(f)=E_{P}(f)$$上式是最大熵模型学习的约束条件,如果我们有M个特征函数$f_i(x,y)(i=1,2...,M)$有M个约束条件。可以这样理解,如果我们在训练集中有m个样本,那么这m个样本对应的约束就有M个。这样,我们得到最大熵模型的定义如下:假设满足所有约束的模型集为:$$E_{\overline{P}}(f_i)=E_{P}(f_i)(i=1,2,...M)$$在条件概率分布$P(Y|X)$上定义的条件熵为:$$H(P)=-sumlimits_{x,y}overline{P}(x)P(y|x)logP(y|x)$$我们的目标是得到$H(P)$最大时对应的$P(y|x)$,这里可以加负值$H(P)$这样做的目的是让$-H(P)$成为一个凸函数,方便使用凸优化的方法求极值。学习最大熵模型最大熵模型的学习等价于约束优化问题:$$begin{eqnarray}maxlimits_{pinmathcal{C}}&H(P)=-sum_{x,y}assign{P}(x)P(y|x)logP(y|x)nonumber\4E_P(f_k)=E_assign{P}(f_k),k=1,2,cdots,Knonumber\&&sum_yP(y|x)=1equation$$对应的最小化问题为:$$begin{equation}&minlimits_{Pinmathcal{C}}&-H(P)=sum_{x,y}assign{P}(x)P(y|x)logP(y|x)nonumber\&s.t.&E_P(f_k)-E_assign{P}(f_k)=0,k=1,2,cdots,Knonumber\&&sum_yP(y|x)=1nonumbered{eqnarray}$$引入拉格朗日乘子$\beta_0,\beta_1,\cdots,\beta_K$,定义拉格朗日函数$L(P,\beta)$$$begin{eqnarray}L(P,beta)&=&-H(P)+beta_0(1-sum_yP(y|x))+sum_{k=1}^Kbeta_k(E_assignment{P}(f_i)-E_P(f_i))nonumber\&=&sum{x,y}allocate{P}(x)P(y|x)logP(y|x)+beta_0(1-sum_yP(y|x))nonumber\&+&sum_{k=1}^Kbeta_k(sums{x,y}表示{P}(x,y)f(x,y)-sumlimits_{x,y}assign{P}(x)P(y|x)f(x,y))nonnumberable{equation}$$为:$P_\beta=\arg\min\limits_{P\in\mathcal{C}}L(P,\beta)=P_\beta(y|x)$求$L(P,β)$对$P(y|x)的偏导数).)$为0$$begin{equation}frac{partlL(P,beta)}{partialP(y|x)}&=&sum_{x,y}tilde{P}(x)(logP(y|x)+1)-sum_ybeta_0-sum_{x,y}(tilde{P}(x)sum_{k=1}^Kbeta_kf_k(x,y))nonumber\&=&sum_{x,y}tilde{P}(x)Big{(}logP(y|x)+1-beta_0-sum_{k=1}^Kbeta_kf_k(x,y)Big{)}nonumber\&=&0nonumberend{eqnarray}$$得到:$$P(y|x)=exp(sumlimits_{k=1}^Kbeta_kf_k(x,y)+beta_0-1)=frac{exp(sumlimits_{k=1}^Kbeta_kf_k(x,y))}{exp(1-beta_0)}$$by$\sum_yP(y|x)=1$So$$P_beta(y|x)=frac{1}{Z_beta(x)}exp(sumlimits_{k=1}^Kbeta_kf_k(x,y))$$其中$Z_\beta(x)=\sum\limits_y\exp(\sum\limits_{k=1}^k\beta_kf_k(x,y))$在选择适当的特征函数时,最大熵模型可以得出多个逻辑模型,这个很明显但是两者不等价,最大熵可以选择其他的特征函数。Itisobviousthatthemaximumentropymodelcanleadtoamultinomiallogisticmodelwhenanappropriatecharacteristicfunctionisselected.但两者并不等价,最大熵可以选择其他特征函数。记对偶函数为$\Psi(\beta)=\min\limits_{P\in\mathcal{C}}L(P,\beta)=L(P_\beta,\beta)$,然后最大化$\Psi(\beta)$得到它的解$\beta^*$。那么最大熵模型为:$$P^=P_{beta^}(y|x)$$可以证明对偶函数等价于条件概率对数似然函数$$L_tilde{P}(P_beta)=sumlimits_{x,y}tilde{P}(x,y)logP(y|x)$$分布$P(Y|X)$则对偶函数在学习中的最大化最大熵模型等价于最大熵模型的最大似然估计。3.2模型比较最大熵模型与LR模型的关系:最大熵模型和LR模型都是对数线性模型,LR和最大熵模型的学习一般采用最大似然估计或正则化最大似然估计。LR和最大熵模型学习可以形式化为无约束优化问题,有改进的迭代缩放法、梯度下降法、拟牛顿法求解。逻辑回归和最大熵模型没有本质区别。逻辑回归是最大熵对应第二类时的特例,即当逻辑回归类别扩展到多个类别时,就是最大熵模型。最大熵模型与决策树模型的关系:最大熵原则选择熵最大的模型,决策树的划分目标选择熵最小的划分。原因是:最大熵原理认为,在满足已知条件后,选择不确定性最大(即不确定部分均等可能)的模型。也就是说,不应施加额外的约束。因此,这是一个求最大不确定性的过程,所以选择熵最大的模型。决策树的划分目标是通过不断划分,不断降低实例所属类的不确定性,最终给实例一个合适的分类。因此,这是一个不确定性递减的过程,所以选择熵最小的划分。3.4关于最大熵和朴素贝叶斯的联系最大熵和朴素贝叶斯的联系都是用P(y|x),不同的是朴素贝叶斯用先验概率求解,最大熵用最大化条件熵求解器。朴素贝叶斯倾向于从基本信息中抽取新的信息,而最大熵量化了信息抽取的程度(好像强迫自己获得一个概率必须均匀分布)。**最大熵模型的Python实现**我不会在这里贴出代码。网上有很多优秀的博主分享过。这里推荐大家看一下SmirkCaohttps://github.com/SmirkCao/Lihang具体案例是Dod-o使用最大熵模型进行手写数字识别,正确率96.9%,运行时间:8.8hhttps://github.com/Dod-o/Statistical-Learning-Method_Code参考:李航《统计学习方法》6.2最大熵模型https://www.cnblogs.com/pinard/p/6093948.htmlhttps://www.cnblogs.com/ooon/p/5677098.htmlhttps://blog.csdn.net/ltc844139730/article/details/92011520http://www.huaxiaozhuan.com/statisticallearning/chapters/14_maxent.html>本文发表由博客发布平台[OpenWrite](https://openwrite.cn?from=article_bottom)!
