简单易学的机器学习算法——EM算法

时间:2023-03-08 21:58:49
简单易学的机器学习算法——EM算法

简单易学的机器学习算法——EM算法

一、机器学习中的参数估计问题

在前面的博文中,如“简单易学的机器学习算法——Logistic回归”中,采用了极大似然函数对其模型中的参数进行估计,简单来讲即对于一系列样本简单易学的机器学习算法——EM算法,Logistic回归问题属于监督型学习问题,样本中含有训练的特征简单易学的机器学习算法——EM算法以及标签简单易学的机器学习算法——EM算法,在Logistic回归的参数求解中,通过构造样本属于类别简单易学的机器学习算法——EM算法和类别简单易学的机器学习算法——EM算法的概率:

简单易学的机器学习算法——EM算法

简单易学的机器学习算法——EM算法

这样便能得到Logistic回归的属于不同类别的概率函数:

简单易学的机器学习算法——EM算法

此时,使用极大似然估计便能够估计出模型中的参数。但是,如果此时的标签简单易学的机器学习算法——EM算法是未知的,称为隐变量,如无监督的学习问题,典型的如K-Means聚类算法,此时不能直接通过极大似然估计估计出模型中的参数。

二、EM算法简介

在上述存在隐变量的问题中,不能直接通过极大似然估计求出模型中的参数,EM算法是一种解决存在隐含变量优化问题的有效方法。EM算法是期望极大(Expectation Maximization)算法的简称,EM算法是一种迭代型的算法,在每一次的迭代过程中,主要分为两步:即求期望(Expectation)步骤和最大化(Maximization)步骤。

三、EM算法推导的准备

1、凸函数

简单易学的机器学习算法——EM算法是定义在实数域上的函数,如果对于任意的实数简单易学的机器学习算法——EM算法,都有

简单易学的机器学习算法——EM算法

那么简单易学的机器学习算法——EM算法是凸函数。若简单易学的机器学习算法——EM算法不是单个实数,而是由实数组成的向量,此时,如果函数简单易学的机器学习算法——EM算法的Hesse矩阵简单易学的机器学习算法——EM算法是半正定的,即

简单易学的机器学习算法——EM算法

那么简单易学的机器学习算法——EM算法是凸函数。特别地,如果简单易学的机器学习算法——EM算法或者简单易学的机器学习算法——EM算法,那么称简单易学的机器学习算法——EM算法为严格凸函数。

2、Jensen不等式

如果函数简单易学的机器学习算法——EM算法是凸函数,简单易学的机器学习算法——EM算法是随机变量,那么

简单易学的机器学习算法——EM算法

特别地,如果函数简单易学的机器学习算法——EM算法是严格凸函数,那么简单易学的机器学习算法——EM算法当且仅当

简单易学的机器学习算法——EM算法

即随机变量简单易学的机器学习算法——EM算法是常量。

简单易学的机器学习算法——EM算法

(图片来自参考文章1)

注:若函数简单易学的机器学习算法——EM算法是凹函数,上述的符号相反。

3、数学期望

3.1随机变量的期望

设离散型随机变量简单易学的机器学习算法——EM算法的概率分布为:

简单易学的机器学习算法——EM算法

其中,简单易学的机器学习算法——EM算法,如果简单易学的机器学习算法——EM算法绝对收敛,则称简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法的数学期望,记为简单易学的机器学习算法——EM算法,即:

简单易学的机器学习算法——EM算法

若连续型随机变量简单易学的机器学习算法——EM算法的概率密度函数为简单易学的机器学习算法——EM算法,则数学期望为:

简单易学的机器学习算法——EM算法

3.2随机变量函数的数学期望

简单易学的机器学习算法——EM算法是随机变量简单易学的机器学习算法——EM算法的函数,即简单易学的机器学习算法——EM算法,若简单易学的机器学习算法——EM算法是离散型随机变量,概率分布为:

简单易学的机器学习算法——EM算法

则:

简单易学的机器学习算法——EM算法

简单易学的机器学习算法——EM算法是连续型随机变量,概率密度函数为简单易学的机器学习算法——EM算法,则

简单易学的机器学习算法——EM算法

四、EM算法的求解过程

    假设简单易学的机器学习算法——EM算法表示观测变量,简单易学的机器学习算法——EM算法表示潜变量,则此时简单易学的机器学习算法——EM算法即为完全数据,简单易学的机器学习算法——EM算法的似然函数为简单易学的机器学习算法——EM算法,其中,简单易学的机器学习算法——EM算法为需要估计的参数,那么对于完全数据,简单易学的机器学习算法——EM算法的似然函数为简单易学的机器学习算法——EM算法
    构建好似然函数,对于给定的观测数据,为了估计参数简单易学的机器学习算法——EM算法,我们可以使用极大似然估计的方法对其进行估计。因为变量简单易学的机器学习算法——EM算法是未知的,我们只能对简单易学的机器学习算法——EM算法的似然函数为简单易学的机器学习算法——EM算法进行极大似然估计,即需要极大化:
简单易学的机器学习算法——EM算法
上述式子中无法直接对简单易学的机器学习算法——EM算法求极大值,因为在函数中存在隐变量简单易学的机器学习算法——EM算法,即未知变量。若此时,我们能够确定隐变量简单易学的机器学习算法——EM算法的值,便能够求出简单易学的机器学习算法——EM算法的极大值,可以用过不断的修改隐变量简单易学的机器学习算法——EM算法的值,得到新的简单易学的机器学习算法——EM算法的极大值。这便是EM算法的思路。通过迭代的方式求出参数简单易学的机器学习算法——EM算法
    首先我们需要对参数简单易学的机器学习算法——EM算法赋初值,进行迭代运算,假设第简单易学的机器学习算法——EM算法次迭代后参数简单易学的机器学习算法——EM算法的值为简单易学的机器学习算法——EM算法,此时的log似然函数为简单易学的机器学习算法——EM算法,即:
简单易学的机器学习算法——EM算法
在上式中,第二行到第三行使用到了Jensen不等式,由于log函数是凹函数,由Jensen不等式得到:
简单易学的机器学习算法——EM算法
简单易学的机器学习算法——EM算法
表示的是简单易学的机器学习算法——EM算法的期望,其中,简单易学的机器学习算法——EM算法表示的是隐变量简单易学的机器学习算法——EM算法满足的某种分布。这样,上式简单易学的机器学习算法——EM算法的值取决于简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法的概率。在迭代的过程中,调整这两个概率,使得下界不断的上升,这样就能求得简单易学的机器学习算法——EM算法的极大值。注意,当等式成立时,说明此时已经等价于简单易学的机器学习算法——EM算法。由Jensen不等式可知,等式成立的条件是随机变量是常数,即:
简单易学的机器学习算法——EM算法
已知:
简单易学的机器学习算法——EM算法
所以:
简单易学的机器学习算法——EM算法
则:
简单易学的机器学习算法——EM算法
至此,我们得出了隐变量简单易学的机器学习算法——EM算法满足的分布的形式简单易学的机器学习算法——EM算法。这就是EM算法中的E步。在确定了简单易学的机器学习算法——EM算法后,调整参数简单易学的机器学习算法——EM算法使得简单易学的机器学习算法——EM算法取得极大,这便是M步。EM算法的步骤为:
  1. 初始化参数简单易学的机器学习算法——EM算法,开始迭代;
  2. E步:假设简单易学的机器学习算法——EM算法为第简单易学的机器学习算法——EM算法次迭代参数简单易学的机器学习算法——EM算法的估计值,则在第简单易学的机器学习算法——EM算法次迭代中,计算简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法
  3. M步:求使简单易学的机器学习算法——EM算法极大化的简单易学的机器学习算法——EM算法,确定第简单易学的机器学习算法——EM算法次的参数的估计值简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法

五、EM算法的收敛性保证

迭代的过程能否保证最后找到的就是最大的似然函数值呢?即需要证明在整个迭代的过程中,极大似然估计是单调增加的。假定简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法是EM算法的第简单易学的机器学习算法——EM算法次和第简单易学的机器学习算法——EM算法次迭代后的结果,选定简单易学的机器学习算法——EM算法,进行迭代:
  1. E步:简单易学的机器学习算法——EM算法
  2. M步:简单易学的机器学习算法——EM算法

固定简单易学的机器学习算法——EM算法,将简单易学的机器学习算法——EM算法看成变量:

简单易学的机器学习算法——EM算法
上式中,第一个大于等于是因为:
简单易学的机器学习算法——EM算法

六、利用EM算法参数求解实例

假设有有一批数据简单易学的机器学习算法——EM算法分别是由两个正态分布:

简单易学的机器学习算法——EM算法

简单易学的机器学习算法——EM算法

产生,其中,简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法未知,简单易学的机器学习算法——EM算法。但是不知道具体的简单易学的机器学习算法——EM算法是第产生,即可以使用简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法表示。这是一个典型的涉及到隐藏变量的例子,隐藏变量为简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法。可以使用EM算法对参数进行估计。

  1. 首先是初始化简单易学的机器学习算法——EM算法简单易学的机器学习算法——EM算法
  2. E步:简单易学的机器学习算法——EM算法,即求数据简单易学的机器学习算法——EM算法是由第简单易学的机器学习算法——EM算法个分布产生的概率:简单易学的机器学习算法——EM算法
  3. M步:简单易学的机器学习算法——EM算法,即计算最大的期望值。然而我们要求的参数是均值,可以通过如下的方式估计:简单易学的机器学习算法——EM算法

Python代码

  1. #coding:UTF-8
  2. '''''
  3. Created on 2015年6月7日
  4. @author: zhaozhiyong
  5. '''
  6. from __future__ import division
  7. from numpy import *
  8. import math as mt
  9. #首先生成一些用于测试的样本
  10. #指定两个高斯分布的参数,这两个高斯分布的方差相同
  11. sigma = 6
  12. miu_1 = 40
  13. miu_2 = 20
  14. #随机均匀选择两个高斯分布,用于生成样本值
  15. N = 1000
  16. X = zeros((1, N))
  17. for i in xrange(N):
  18. if random.random() > 0.5:#使用的是numpy模块中的random
  19. X[0, i] = random.randn() * sigma + miu_1
  20. else:
  21. X[0, i] = random.randn() * sigma + miu_2
  22. #上述步骤已经生成样本
  23. #对生成的样本,使用EM算法计算其均值miu
  24. #取miu的初始值
  25. k = 2
  26. miu = random.random((1, k))
  27. #miu = mat([40.0, 20.0])
  28. Expectations = zeros((N, k))
  29. for step in xrange(1000):#设置迭代次数
  30. #步骤1,计算期望
  31. for i in xrange(N):
  32. #计算分母
  33. denominator = 0
  34. for j in xrange(k):
  35. denominator = denominator + mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
  36. #计算分子
  37. for j in xrange(k):
  38. numerator = mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
  39. Expectations[i, j] = numerator / denominator
  40. #步骤2,求期望的最大
  41. #oldMiu = miu
  42. oldMiu = zeros((1, k))
  43. for j in xrange(k):
  44. oldMiu[0, j] = miu[0, j]
  45. numerator = 0
  46. denominator = 0
  47. for i in xrange(N):
  48. numerator = numerator + Expectations[i, j] * X[0, i]
  49. denominator = denominator + Expectations[i, j]
  50. miu[0, j] = numerator / denominator
  51. #判断是否满足要求
  52. epsilon = 0.0001
  53. if sum(abs(miu - oldMiu)) < epsilon:
  54. break
  55. print step
  56. print miu
  57. print miu

最终结果

[[ 40.49487592  19.96497512]]

参考文章:

1、(EM算法)The EM Algorithm (http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html)

2、数学期望(http://wenku.baidu.com/view/915a9c1ec5da50e2524d7f08.html?re=view)