EM算法学习:推荐几篇文章

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://zhuyulab.blog.csdn.net/article/details/86751191

寒假Day2: EM算法学习

主要看了
https://zhuanlan.zhihu.com/p/36331115
https://zhuanlan.zhihu.com/p/25799397
两篇的详解,非常浅显易懂,值得学习。

其实核心思路可以概括一下:

  1. 所有的样本可能分别属于n个类,因此服从n种分布中的一种。 因此,第一步中我们先给出这n种分布的参数。比如高斯分布,就随便给出一组均值和方差作为初始点。 显然,这样的初始点肯定和最优点相去甚远,因此就需要后续的迭代。 初始点的给出一般不会是随机乱给的,比如半监督学习中,一小部分样本是有标签的,因此可以通过这一小部分来计算分布,作为所有样本的初始点。 K-means等方法也可以用于得到初始点。

  2. 因为在步骤1中我们已经给出了这n个类的分布,因此,我们可以得到每一个样本属于某个类的概率。这样这个问题就变成了没有隐变量的问题了,同时,我们也可以给出只与分布参数有关的似然函数。

  3. 第二步之后,第三步只需通过求导=0的方式,和传统极大似然算法一样,来最大化极大似然函数即可。 从而更新了分布参数。

  4. 重复 2,3 两步, 也即 E,M 两步。 即可。

这样的解释非常抽象,接下来用https://zhuanlan.zhihu.com/p/36331115给出的男生女生的例子来对应上述四步说明:

目前有100个学生的样本,这100个学生也不知道男女,只有他们的身高数据。现在要求该学校男女生分别的身高分布 (假设为高斯分布),也就是说要求其均值与方差。

  1. 没有其他信息的情况下,可以随机假设, 比如假设男生均值为172, 方差为5。女生为165,方差为5。作为初始点。
  2. 接下来拿这100个学生的身高,根据刚刚的分布来分为男女。 如身高为180那就大概率为男生,但注意这里的概率不是1,因为还有一点点概率为女生。 比如某个人0.9为男生,0.1为女生。
  3. 获得100个学生分别为男生或者女生的概率之后,依照概率计算极大似然函数。也就是说,调整男女生的分布参数,使得似然函数最大化。
  4. 重复2,3。 不断更新分布。

这里和https://zhuanlan.zhihu.com/p/36331115有一点不一样,他本来描述里,180的直接就是男生,也就是说概率为1,只参与到计算男生的分布参数中。 但这样是不对的,虽然解释起来更清晰(强烈推荐看一下他的例子),因为根据后续的算法推导及投掷硬币的例子,更应该是0.9为男生,0.1为女生的情况。但是根据概率,这个样本对男生分布参数的确定影响更大,而对女生分布参数的影响会很小。

硬币的例子非常生动,也很符合个人的思路。看完这个算法之后的想法就是,这个算法就应该是这样才是合理的。 只是恰好,又可以从凸优化等角度证明了其收敛性以及每一步的意义。

最后在https://zhuanlan.zhihu.com/p/25799397提到了其对半监督学习的作用,算是EM算法的用途。 步骤如下:

  1. 仅利用有标签的数据,训练一个朴素贝叶斯分类器。
  2. 利用训练好的分类器给无类别标签的数据打上标签,顺便记下分类器对该标签的把握。然后将所有标签的把握求和,得到值sum。
  3. 利用全部数据重新训练朴素贝叶斯分类器。
  4. 重复2、3步,直到sum不再变化(或者说近似于不再变化)。

其实这里的第一步就是利用一些已知信息给出一个更好的初始点,而不是随机初始化,来提升性能。

文章给出了EM算法的几大用途:
EM算法在工程上有很多应用场景,例如:

  1. 半监督学习:即利用包含缺失类别标签的数据的混合数据集训练分类器。

  2. 数据预处理:给缺失某一维特征的值的数据补上缺失值。

  3. 聚类:对,聚类。

  4. 隐马尔科夫模型:训练隐马尔科夫模型中的参数。

目前个人把他看做是: K-means算法的加强版

展开阅读全文

没有更多推荐了,返回首页