您的位置:首页 > 其它

金融工程---最大熵模型(MaxEnt)

2017-11-03 23:20 411 查看

导语

该模型是为了理解HMM的学习而准备的。

最大熵原理

这是一个很有意思的思想并非定理或者公式:

Model all that is known and assume nothing about that which is unknown.

让建立的模型满足假设条件而不要再去满足其他的假设

有趣吧,例如,这里有一个问题

一个骰子1点朝上的概率是多少?

大部分人会回答16,是因为我们在不知觉中用了最大熵原理即我们认为假设它每一面朝上的概率相等是最安全的做法。

接着再问一个问题

现在这个骰子经过我的特殊处理,1点朝上的概率为13,那么它2点朝上的概率是多少?

最安全的做法是让剩余5个面平分23的概率,即215,以上的两个回答,即充分地体现了最大熵原理的思想,这些回答虽然不一定是正确的,但是在主观上来说,我们认为他们是最安全的。

那么严谨来总结一下我们刚才所做的事:我们刚才已知了1朝上的概率是13,现在要求其他面朝上的概率,而我们对此一无所知,那么我们该如何对我们一无所知的信息作出合理的假设呢?这个最合理的假设就是符合已知最不确定或者最随机的推断就是我们能够作出的最合理的假设。

另外我们也可以从几何的角度来理解最大熵原理:

假设现在有一个三角形ABC,且这个三角形的每一个顶点距离对边的距离都是1,如果符号p(A)表示p点到BC边的距离之和且满足约束:p到三条边的距离之和为 1,那么给定P(A)=1之后的p点按照最大熵原理应该在哪里呢?

但是p就与A重合啦~

那如果P(A)=13,p最应该在哪里?

那么就假设P(B)和P(C)平分剩下的概率即可,即:P(A)=P(B)=P(C)=13,画出图像就是



另外我们来看随着限制条件Ci的不断增多,按照最大熵原理所取的p应该如何变化?



在平面中,两个约束条件即可将p点固定,即第3幅图,也有可能没有解即第4幅图,但是在第二幅图的时候,我们则要找到在这种情况下使得熵最大的点。我们可以定义熵为p点到各边距离的方差的倒数(也就是差距越大,熵就越小),所以这样得到的p点就会尽可能保证p点到各个边的距离不要差距太大。

那么接下来我们再看看最大熵原理用数学语言的表示,即最大熵模型

最大熵模型

约束部分

搞懂了最大熵原理的基本思路,那我们如何将该思路用于分类问题?这样得到的就是最大熵模型。

先定义什么叫做分类问题,现在我们手里有一些训练集

T={(x1,y1),(x2,y2),⋅⋅⋅,(xn,yn)}

并且再设其中xi是属于输入空间X,yi是属于输出空间Y,我们来考虑能否利用最大熵原理的思想找到一个最好的分类模型,使得我们在任意输入一个不再训练集范围内的x,他能够以输出这个特征向量是各个标签的概率。

问题定义了之后,我们如何将最大熵原理结合进去呢?

首先给出最终的使用说明,然后再来解释这个使用说明。

从训练集中抽取若干对分类问题有用的特征,然后让这些特征在T上关于经验分布p~(x,y)的数学期望,与他在模型中关于p(x,y)的数学期望相等。

那么,显然“特征关于概率分布p~(x,y)的数学期望”是让人看了会一脸懵逼的一句话。但其实如果这时把这个数学期望写出来,可能唤醒某些学过概率论的同学的记忆:

Ep~(f)=∑x,yp~(x,y)f(x,y)

等式的右边就是特征在训练集上关于p~(x,y)的数学期望,其中f(x,y)被称为特征函数,表示(x,y)出现的概率,p~(x,y)被称为经验分布,其计算方式就是

p~(x,y)=count(x,y)N

即在训练集中(x,y)出现的频率。

f(x,y)={1,若x,y满足某个事实0,else

所以,直觉总结一下Ep~(f)的含义就是在训练集中,随意从训练集中抽取一个样本,这个样本满足某个事实的概率。

不知道这样说大家有没有理解“特征关于概率分布p~(x,y)的数学期望这句话。

再来说说为什么这样来约束,我们之前所述的最大熵原理:在满足已知条件的情况下,其他要符合已知最不确定或者最随机的推断

当我们在将其转化为数学模型的时候,我们要想,约束条件是啥?

现在我们手里面的只有一堆样本,比如(1,2),(2,4),(3,6),那么这时我们定义特征函数为

f(x,y)={1,当y是x的两倍0,else

那么我们就可以计算出Ep~(f)的值为1,因为训练集中的所有样本都满足我们的特征方程。

然后现在程序的目标是判断另外一堆测试集,比如(1,1.5),(2,4),(3,5),那么按照我们现有的特征函数去分类的话,就会自动分类成(1,2),(2,4),(3,6),正确率只有1/3,即Ep(f)=1/3,这个结果显然是不够理想的,这说明我们自己臆想出来的特征函数y是x的两倍即为1这个说法不够准确。

那么什么时候是最准确的呢?

比如我们手中有一个训练集(1,1),(2,0),(3,1),我们观察出来的特征函数当x时奇数的时候,f为1,否则f为0

然后我们计算出Ep~=23,现在还有一个测试集(4,0),(5,1),(6,0),计算出Ep=13,这时他们的期望相等了,我们就说这个特征函数是不错的。

注:你们可能会觉得疑惑,就是训练集和测试集的数值都是我自己设的,我想让他们的期望相等就能让他们相等,但是要注意,在真实的机器学习中,我们是默认训练集和测试集是随机的,而并非训练集就是具有一个测试集没有的特征,所以,在训练集上特征函数的成功率被我们认为这也是测试集上的成功率,这就是最大熵原理具体应用于分类问题时候的方式

说到这里,我们的约束条件总结一下就是

Ep~(f)=Ep(f)

其中:

Ep~(f)=∑x,yp~(x,y)f(x,y)

Ep(f)=∑x,yp(x,y)f(x,y)

得到了约束之后我们想想我们的目标是啥?我们不就是要输入一个x,然后程序输出结果是y的概率吗?也就是p(y|x),刚刚好我们还发现p(x,y)这个东西我们未知,且它可以被估计成p(x,y)=p~(x)p(y|x)

于是我们的约束就可以变成:

∑x,yp~(x)p(y|x)f(x,y)=∑x,yp~(x,y)f(x,y)

其中一个(x,y)被称为一个特征,我们可以从数据集里面抽取n个特征,根据这n个特征我们可以得到n个特征函数,要求他们都要满足上面这条约束,我们就有n个约束条件,即:

Ci:Ep(fi)=Ep~(fi)

以上是这个最大熵模型的约束部分,接下来我们来思考这个模型的目标函数。

目标函数部分

最大熵模型,目标函数当然是要使得熵最大啦~但是,什么是熵呢?

官方的定义是这样的:

假设X是可能有n个取值的离散随机变量,其概率分布为p(X=xi)=pi,i=1,2,⋅⋅⋅,n,则X的熵为:

H(X)=−∑i=1npilogpi

且特别说明,当pi=0时,定义0log0=0

对数函数log的低通常以2或者以e为底,对应不同的熵的单位,这里我们为了方便就以e为底,我们来理解一下这个熵:

如果X的取值只有1种可能,X=1,那么

H(X)=−1⋅ln1=0

如果X的取值有两种可能,X=1,2,且概率相同,则

H(X)=−2⋅(0.5⋅ln0.5)=0.6931471806

如果有3种可能,X=1,2,3,且概率相同,则

H(X)=−3⋅(13⋅ln13)=1.098612289

可见随着取值越分散,熵值越大,虽然不明白熵的表达式是如何设计出来的,不过我们大概知道这个表达式的功能就好~

接下来定义条件熵

现在是由两个离散随机变量空间X和Y,在已知X的条件下,Y的条件上可以定义为:

H(Y|X)=∑i=1np(xi)H(Y|X=xi)=−∑i=1np(xi)∑j=1mp(yj|xi)logp(yj|xi)

这个举例子比较麻烦我就不说啦~

我们在这里所使用的是条件熵,结合约束条件,最后的模型就是:

maxH(p(y|x))=−∑i=1np(xi)∑j=1mp(yj|xi)logp(yj|xi)

s.t.∑yp(y|x)=1Ep(fi)=Ep~(fi)

关于这个模型的讲述到这里就暂时告一段落了,也算是最后给出了最大熵模型的形式吧,但是却远远没有达到自己想要的效果,即直观的体会到最大熵模型的思想。最后还是沦为复杂枯燥的数学推导过程。

文末附上本文的参考阅读:

参考文献1参考文献2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: