zoukankan      html  css  js  c++  java
  • 机器学习模型之最大熵模型

    1、最大熵模型

    最大熵模型描述的是这么一种情况,即在有约束条件的情况下,如何得到最好的模型。我们先来考虑如果没有约束的条件下,如何获得最好的模型,举个栗子,比如一个骰子,有6个面,转一次,求每个面的概率,根据经验,每个面的概率是1/6,这其实就是我们让整个系统熵最大。

    那么什么是在有约束条件下概率最大呢,比如这时告诉你其中点数为4的概率为1/3,那么现在这种情况下,每个面的概率是多少呢?(p(点数=4) = 1/ 3),(p(点数=1) = p(点数=2) = p(点数=3) = p(点数=5) = p(点数=6) = (2/3) / 5),这种就是在约束条件下熵最大。本文介绍将最大熵模型如何用于分类任务。

    给定一个训练数据集

    [ {(x_{1},y_{1}), (x_{2},y_{2}),(x_{3},y_{3}) .........(x_{n},y_{n})} ]

    我们的目标是得到条件概率(p(y|x))即我们对于给定未知的一个变量(X),我们会得到在每个标签上最大的概率值,我们取最大的概率值所对应的标签作为最终的标签。计算条件概率(p(y|x))的方法有很多,其中,朴素贝叶斯是一种方法,当然,我们也可以利用最大熵模型来得到这个概率值。首先,根据熵最大的模型是最好的模型,我们这里定义条件熵。即

    [ H(p(y|x)) = - sumlimits_{x,y} ilde{p}(x) p(y|x) log p(y|x) ag{1} ]

    如果在没有约束的条件下,我们直接求式子(1)即可,但是这样算下来所有的条件概率是均等的,没有意义,所以我们想有哪些约束条件呢?首先,我们肯定希望得到的模型和能够和数据集的整体分布是一样的。我们先定义一个特征函数

    [ f(x,y) = left { egin{array}{**lr**} 1 , x,y满足某些条件 & \ 0 否则 & end{array} ight. ]

    这里满足某些条件听起来不知道是在干什么,当我看来GIS用于文本分类的代码后,才发现,其实如果一条数据中,如果((x_{i},y_{j}))出现,那么f(x,y)就为1,不出现,则为0。我们的约束条件是希望得到的模型可以很好的表现数据集,那用什么表示呢,我们用特征函数关于经验分布( ilde{p}(X|Y))的期望值和特征函数关于模型(P(Y|X))的期望来表示,先给出特征函数关于经验分布( ilde{p}(X|Y))的期望值

    [ E_{ ilde{p}}(f) = sumlimits_{x,y} ilde{P}(y|x) f(x,y) ag{2} ]

    这个经验分布的数学期望是一个定值,我们可以根据数据集来求出,对于文本分类来说,$E_{ ilde{p}} (f_{i}) = $ x,y出现的个数/文档总数。接着我们给出特征函数关于模型的的期望值

    [ E_{p}(f) = sumlimits_{x,y} P(y|x) f(x,y) \ = sumlimits_{x,y} p(x,y)f(x,y) \ = sumlimits_{x,y} p(x)p(y|x) f(x,y) \ = sumlimits_{x,y} ilde{p}(x)p(y|x) f(x,y) ag{3} ]

    由于(p(x),p(x,y))不好求,所以用(p(x,y) = ilde{p}(x) p(y|x))来代替。那么,我们的期望是将两者划等号,即

    [ E_{ ilde{p}}(f) = E_{p}(f) ag{4} ]

    那么根据上述公式,我们可以得到最大熵模型的公式和其约束条件

    [ max limits_{P in C } H(p(y|x)) = - sumlimits_{x,y} ilde{p}(x) p(y|x) log p(y|x) \ s.t E_{ ilde{p}}(f) = E_{p}(f) i=1,2,3....n \ sumlimits_{y} p(y|x) = 1 ]

    至此我们得到最大熵模型的公式,接下来,我们就求解p(y|x)

    2、最大熵模型推导

    我们将公式进行转换,将最大值改为求最小值,这样我们就能引入拉格朗日乘子

    [ min limits_{P in C } - H(p(y|x)) = sumlimits_{x,y} ilde{p}(x) p(y|x) log p(y|x) \ s.t E_{ ilde{p}}(f) = E_{p}(f) i=1,2,3....n \ sumlimits_{y} p(y|x) = 1 ]

    引入拉格朗日乘子得到

    [ L(p,w) = sumlimits_{x,y} ilde{p}(x) p(y|x) log p(y|x) + w_{0}(sumlimits_{y} p(y|x) - 1) + sumlimits_{i=1}{n} w_{i}(E_{ ilde{p}}(f) - E_{p}(f)) ag{5} ]

    最优化的原始问题是

    [ min limits_{P in C } max limits_{w} L(p,w) ag{6} ]

    对偶问题是

    [ max limits_{w} min limits_{P in C } L(p,w) ag{7} ]

    首先对p(y|x)进行求导

    [ frac {partial L(p)}{p(y|x)} = sumlimits_{x,y} ilde{p}(x) (log p(y|x) + 1) + sumlimits_{y} w_{0} - sumlimits_{i=1}{n} w_{i} sum limits_{x,y} ilde{p}(x) f_{i}(x,y) ]

    由于(sumlimits_{x} ilde{p}(x) = 1),所以原式等于

    [ frac {partial L(p)}{p(y|x)} = sumlimits_{x,y} ilde{p}(x) (log p(y|x) + 1) + sumlimits_{x} ilde{p}(x) sumlimits_{y} w_{0} - sum limits_{x,y} ilde{p}(x) sumlimits_{i=1}^{n} w_{i} f_{i}(x,y) \ = sumlimits_{x,y} ilde{p}(x) ( log p(y|x) + 1 + w_{0} - sumlimits_{i=1}^{n} w_{i} f_{i}(x,y) ) ag{8} ]

    由于(sumlimits_{x,y} ilde{p}(x) > 0)那么我们令后面部分为0

    [ log p(y|x) + 1 + w_{0} - sumlimits_{i=1}^{n} w_{i} f_{i}(x,y) = 0 \ log p(y|x) = sumlimits_{i=1}^{n} w_{i} f_{i}(x,y) - w_{0} - 1 \ p(y|x) = frac {exp sumlimits_{i=1}^{n} w_{i} f_{i}(x,y)} {exp (w_{0} + 1)} \ 由于 sumlimits_{y} p(y|x) = 1 \ 所以 exp (w_{0} + 1) = sumlimits_{y} exp sumlimits_{i=1}^{n} w_{i} f_{i}(x,y) \ 带入得 \ p(y|x) = frac{1} {Z_{w}(x)} * exp sumlimits_{i=1}^{n} w_{i} f_{i}(x,y) \ Z_{w}(x) = sumlimits_{y} exp sumlimits_{i=1}^{n} w_{i} f_{i}(x,y) ]

  • 相关阅读:
    算法总结之 两个链表生成相加链表
    算法总结之 复制含有随机指针节点的链表
    算法总结之 将单向链表按某值划分成左边小、中间相等、右边大的形式
    在PHP5.3以上版本运行ecshop和ecmall出现的问题及解决方案
    windows下配置nginx+php环境
    ecmall程序结构图与数据库表分析
    ecmall数据字典
    Ecmall二次开发-增删改查操作
    PHP7:10件事情你需要知道的
    PHP命名空间规则解析及高级功能3
  • 原文地址:https://www.cnblogs.com/stephen-goodboy/p/12937587.html
Copyright © 2011-2022 走看看