zoukankan      html  css  js  c++  java
  • 最大熵模型原理

      最大熵模型与逻辑回归类似,是对数线性分类模型。在损失函数优化过程中,使用和支持向量机类似的凸优化技术。对熵的使用,会想起决策树ID3和C4.5。

    1. 最大熵模型的定义

      将最大熵原理应用到分类得到最大熵模型。

      用最大熵模型选择一个最好的分类模型。训练集,其中x为n维特征向量,y为类别输出。

      训练集总体联合分布 P(X, Y)的经验分布,和边缘分布P(X)的经验分布即为训练集中X,Y同时出现次数除以样本总数m为训练集中X出现次数除以样本总数m

      用特征函数 f(x, y)描述 x 和 y 的关系。为:

      可以认为训练集只要出现 (x(i), y(i)),其 f(x(i), y(i))=1。同一个训练集可以有多个约束特征函数。

      特征函数 f(x, y)关于经验分布期望值,用表示为:

      特征函数 f(x, y)关于条件分布 P(Y|X) 和经验分布的期望值,用表示为:

      下式就是最大熵模型学习的约束条件,假如M个特征函数 fi(x, y)(i = 1,2,3...M) 就有M个约束条件。可以理解为如果训练集里有 m 个样本,就有和这 m 个样本对应的 M 个约束条件。

      

      最大熵模型定义如下:

      假设满足所有约束条件的模型集合为:

      定义在条件概率分布 P(Y|X)上的条件熵为:

      我们目的是求使 H(P) 最大时对应的 P(Y|X),这里对 H(P) 加负号求极小值,目的是为了使 -H(P) 为凸函数,方便用凸优化求极值。

    2. 最大熵模型损失函数优化

      最大熵模型损失函数 -H(P)定义为:

      约束条件为:

      用拉格朗日函数将约束最优化转化为无约束最优化对偶问题,此时损失函数对应的拉格朗日函数 L(P, ω)定义为:

      其中ωi(i=0,1,2,3...M)为拉格朗日乘子。这与支持向量机中用到的凸优化理论一样,用到了拉格朗日对偶。

      凸优化原始问题:

      其对应的拉格朗日对偶问题为:

      因此原始问题的解和对偶问题的解一致。可以通过求解对偶问题来求解原始问题。

      求解对偶问题的第一步是求,这可以通过求导得到。得到的是关于 ω 的函数。记为:

      Ψ(ω)为对偶函数,将其解记为:

      

      这样得到P(y|x)和ω的关系,从而把对偶函数Ψ(ω)里的所有P(y|x)替换成用ω表示,这样对偶函数Ψ(ω)就是全部用ω表示。接着对Ψ(ω)求极大化,得到极大化时对应ω向量的取值,带入P(y|x)和ω的关系式,从而也得到P(y|x)的最终结果。

    3. 最大熵模型实例

    例:假设随机变量 x 有5个取值{A,B,C,D,E},其中P(A)+P(B) = 3/10,根据最大熵模型估计各个值的概率 P(A),P(B),P(C),P(D),P(E)。

    解:用 y1,y2,y3,y4,y5 表示 A,B,C,D,E,于是最大熵模型的最优化问题是:

    引入拉格朗日乘子 w0,w1,则拉格朗日函数为:

    根据拉格朗日对偶性:

    首先求解 L(P, w) 关于 P 的极小化问题,为此,固定 w0, w1,求偏导数:

    令各偏导数等于0,得:

    于是

    再求解 L(Pw, w) 关于 w 的极大化问题:

    分别求 L(Pw, w) 对 w0, w1的偏导数并令其为0,得到

    则所求概率分布为:

    4. 最大熵模型小结

      它的约束函数的数目会随样本量的增大而增大,导致样本量很大的时候,对偶函数优化求解的迭代过程非常慢,scikit-learn都没有最大熵模型对应的库。

    来自:https://www.cnblogs.com/pinard/p/6093948.html

  • 相关阅读:
    java.sql.SQLException: Access denied for user 'root'@'10.1.0.2' (using password: YES)
    在eclipse中安装使用lombok插件
    Socket编程实践(5) --TCP粘包问题与解决
    Socket编程实践(8) --Select-I/O复用
    Socket编程实践(6) --TCP服务端注意事项
    Socket编程实践(4) --多进程并发server
    Socket编程实践(3) --Socket API
    Socket编程实践(2) --Socket编程导引
    Socket编程实践(1) --TCP/IP简述
    Socket编程实践(11) --epoll原理与封装
  • 原文地址:https://www.cnblogs.com/keye/p/10728878.html
Copyright © 2011-2022 走看看