1. 概述

本节将介绍两类问题的不同解决方案。其一是通过随机的搜索算法对某一函数的取值进行比较,求取最大/最小值的过程;其二则和积分类似,是使得某一函数被最优化,这一部分内容的代表算法是EM算法。(书中章节名称为Optimization)

2. 随机搜索

对于优化,一本很有名的书是Stephen Boyd 的凸优化(Convex Optimization)。但看过的人可能思维会受到一点限制。最简单、最基本的求最大/最小值的算法,除了直接求解,就是把所有的可能值枚举出来,然后求最大/最小就可以了,而不是凸优化里面的下降方法。

当然,一个基本的条件是定义域有界,这样即使定义域连续,我们也可以求到足够近似的解。譬如如果要求解函数

在[0,1]之间的最大值,采用搜索算法可得到如下结果

MATLAB 代码

a = rand(,);

a = sort(a);

b = (cos(*a) + sin(*a)).^;

a = (:)./;

c = (cos(*a) + sin(*a)).^;

subplot(,,);

plot(a,c);xlabel('Function');

subplot(,,);

plot(a,b,'.','MarkerSize',4.5);xlabel('Evaluation');

max(b)

但问题是这种方法很有可能要花费很多资源,但即便如此,在低维的很多问题下,速度还是可以接受的。在这一方法中我没没有利用任何的需要求解函数的特征(除了映射关系),从这一角度上来看,搜索方法还是有很大改进的余地的。

3. 梯度方法

参考凸优化中的基本算法——梯度下降,我们构造了一序列进行搜索,序列满足

更一般的情况下,我们需要对上面的式子加上一些扰动。这是因为函数或是解空间不是那么规则(我的理解是凸性),此时算法变成了(Rubinstein)

其中,服从均匀分布且范数为1,的逼近。

4. 模拟退火   

另一类算法是模拟退火算法,这一算法最初被应用在有限集合最小化准则函数下(Metropolis et al),但后来也被用在最优化连续集合上。这一算法引入了温度来改变搜索的尺度。算法可描述如下

1. 按照指定分布仿真产生

2. 依概率接受,否则保持

3. 更新

同第一节中的例子,MATLAB代码

% 定义域[,]

for m = :

    x = zeros(,);

    y = (cos(*x) + sin(*x)).^;

    for k = :

        T_t = /log(k);

        a = max(,x(k-)-0.5);

        b = min(,x(k-)+0.5);

        x(k) = a+(b-a)*rand();

        y(k) = (cos(*x(k)) + sin(*x(k))).^;

        if(y(k) < y(k-))

            if(rand()>exp((y(k)-y(k-))/T_t))

                x(k) = x(k-);

                y(k) = (cos(*x(k)) + sin(*x(k))).^;

            end

        end

    end

    subplot(,,m);

    plot(x,y,'Marker','.');

end

    由于函数在[0,1]之间有两个最大值,最后模拟退火算法在两个值之间来回抖动。

5. Prior Feedback

没看懂(p169)

6. 随机近似(Stochastic Approximation)

We next turn to methods that work more directly with the objective function rather than being concerned with fast explorations of the space.

意思就是实际上之前的搜索算法解决的实际上是(以最大化为例)

也就是在的定义域上搜索最大值的过程。然而这里回到更本质的问题上去计算函数的最大/最小值在什么地方取得。

7. Missing Data Models(缺失数据模型)

文中提到这些近似方法多用在缺失数据模型中,此处先简要介绍缺失数据模型。数据的缺失往往会使得观测模型变得很复杂,譬如说Censored Data Model(观测范围有限,小于或大于某常数的观测值缺失了)以及混合模型(mixture models)。以下举例说明:

Censored Data Model Likewood:

假设我们观测到独立同分布的服从,假设前m没有被限制幅度,后n-m个被限制为a(最大值),那么似然函数可以表示为

如果假设我们得到了最后n-m的准确值,那么完整的似然函数应该是

同时有

这几个式子告诉我们,观测量似然函数和完整似然函数之间的关系,这一点在下一节将会用到。

8. EM算法

文中的EM算法介绍实在是晦涩难懂,而且各种似然函数和条件概率写法没有区别……

可以参考 http://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm或是 JerryLead的文章(EM算法)The EM Algorithm。(这两个的思想不一样)

下面是书本上的表示,感兴趣的还是去看WIKI上的吧,这个表示写得真的乱七八糟


从缺失数据模型考虑,对于缺失数据而言,条件概率可以表示为

完整似然函数和观测数据似然函数之间的关系可以表示为(对于任意的都成立)注意这里的L都代表似然函数。

为了最大化,我们先只关注右侧式子的第一项。

我们之后最大化,如果使得式子取值最大,那么更新,也就是说

此处EM算法具体表现为

1. E-step 计算(注意此处求解最后只是代入求条件概率去了,所以最后还是会有出现)

2. 最大化


EM算法的思想在于,由于都是未知的,此时不好求解,但是一旦其中一个固定,求另一个以最大化似然函数就变得简单了,而迭代进行这个过程,会得到最优值,有点类似坐标下降法。(EM算法是一种贪婪的算法,所以可能会收敛到局部最优)

对于EM算法收敛到最优值,可以证明,序列满足

单且仅当时等号成立。这是因为(定义)

和(Jensen不等式)

9. 其他

[MCSM]随机搜索和EM算法的更多相关文章

  1. 学习笔记——EM算法

    EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(expectation):M步,求 ...

  2. K-Means聚类和EM算法复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 k-means算法是一种得到最广泛使用的聚类算法. 它是将各个聚类子集内 ...

  3. EM算法总结

    EM算法总结 - The EM Algorithm EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用 ...

  4. GMM的EM算法实现

    转自:http://blog.csdn.net/abcjennifer/article/details/8198352 在聚类算法K-Means, K-Medoids, GMM, Spectral c ...

  5. EM算法(4):EM算法证明

    目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法运用 EM算法(4):EM算法证明 EM算法(4):EM算法证明 1. 概述 上一篇博客我们已经讲过 ...

  6. EM算法(3):EM算法运用

    目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法运用 EM算法(4):EM算法证明 EM算法(3):EM算法运用 1. 内容 EM算法全称为 Exp ...

  7. EM算法(2):GMM训练算法

    目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法运用 EM算法(4):EM算法证明 EM算法(2):GMM训练算法 1. 简介 GMM模型全称为Ga ...

  8. EM算法(1):K-means 算法

    目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法运用 EM算法(4):EM算法证明 EM算法(1) : K-means算法 1. 简介 K-mean ...

  9. EM算法

    EM算法的推导

随机推荐

  1. HTML基础(三)——css样式表

    CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/此为注释语法 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控制精确, ...

  2. 按要求编写Java应用程序。 (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。 创建第

    package com.hanqi.test; public class jidongche { private String chepaihao;//车牌号 private int speed;// ...

  3. MDX函数(官方顺序,带示例)

    MDX函数(官方顺序) 1.  AddCalculatedMembers (MDX) 返回通过将计算成员添加到指定集而生成的集. 语法: AddCalculatedMembers(Set_Expres ...

  4. C语言基本类型之long long int

    大家都知道int在linux系统下默认是占4个字节,数值表示范围是:-2147483648~2147483647.即使是无符号unsigned int类型表示范围:0-4294967295,大约42亿 ...

  5. 关于TreeView的选中事件

    在使用TreeView的选中事件时,发现,SelectAfter在第一次选中时触发,你再次点击时这个事件并不能引发它.所以找了找,发现有另两种解决办法. 最好的就是使用:NodeMouseClick, ...

  6. C语言中链表怎么删除结点?

    第一个方法: /*根据姓名删除链表的中的学生记录*/ void deleteByName(struct STUDENT * head) { struct STUDENT *p,*q; ]; if(he ...

  7. 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】

    综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZ ...

  8. 解决Qt在openSUSE上编译出现“cannot find -lGL”错误

    在openSUSE上编译QT5.4程序出现“cannot find -lGL”,就连example都无法通过编译.QT是在官网下的最新的安装包. 大体意思是,缺少qt运行时所需要的openGL库.决绝 ...

  9. 手机打开PDF文档中文英文支持(乱码问题)解决攻略

    电子书的优点很多,随时随地阅读,无论白天黑夜走路坐车都能阅读:想确认一下某句话是不是这本书里的,搜索一下就可以知道:搬家也不用发愁,几万本书带在身上,依然轻松步行.我买了一台平板主要动因就是为了看书, ...

  10. IntelliJ IDEA 将 Maven 构建的 Java 项目打包

    前言 IntelliJ IDEA 编译生成 Jar 包的方式与 Eclipse 不同,如何将此 Maven 构建 Java 推荐引擎项目生成 Jar 包确实搜索了不少资料,有成功的有失败的,特将此验证 ...