机器学习入门之简单易学的机器学习算法——EM算法
小标 2018-10-15 来源 : 阅读 1596 评论 0

摘要:本文主要向大家介绍了机器学习入门之简单易学的机器学习算法——EM算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。

本文主要向大家介绍了机器学习入门之简单易学的机器学习算法——EM算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。

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


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

此时,使用极大似然估计便能够估计出模型中的参数。但是,如果此时的标签是未知的,称为隐变量,如无监督的学习问题,典型的如K-Means聚类算法,此时不能直接通过极大似然估计估计出模型中的参数。
二、EM算法简介
    在上述存在隐变量的问题中,不能直接通过极大似然估计求出模型中的参数,EM算法是一种解决存在隐含变量优化问题的有效方法。EM算法是期望极大(Expectation Maximization)算法的简称,EM算法是一种迭代型的算法,在每一次的迭代过程中,主要分为两步:即求期望(Expectation)步骤和最大化(Maximization)步骤。
三、EM算法推导的准备
1、凸函数
    设是定义在实数域上的函数,如果对于任意的实数,都有

那么是凸函数。若不是单个实数,而是由实数组成的向量,此时,如果函数的Hesse矩阵是半正定的,即

那么是凸函数。特别地,如果或者,那么称为严格凸函数。
2、Jensen不等式
    如果函数是凸函数,是随机变量,那么

特别地,如果函数是严格凸函数,那么当且仅当

即随机变量是常量。

(图片来自参考文章1)
注:若函数是凹函数,上述的符号相反。
3、数学期望
3.1随机变量的期望
   设离散型随机变量的概率分布为:

其中,,如果绝对收敛,则称为的数学期望,记为,即:

   若连续型随机变量的概率密度函数为,则数学期望为:

3.2随机变量函数的数学期望
   设是随机变量的函数,即,若是离散型随机变量,概率分布为:

则:

   若是连续型随机变量,概率密度函数为,则

四、EM算法的求解过程
    假设表示观测变量,表示潜变量,则此时即为完全数据,的似然函数为,其中,为需要估计的参数,那么对于完全数据,的似然函数为。
    构建好似然函数,对于给定的观测数据,为了估计参数,我们可以使用极大似然估计的方法对其进行估计。因为变量是未知的,我们只能对的似然函数为进行极大似然估计,即需要极大化:

上述式子中无法直接对求极大值,因为在函数中存在隐变量,即未知变量。若此时,我们能够确定隐变量的值,便能够求出的极大值,可以用过不断的修改隐变量的值,得到新的的极大值。这便是EM算法的思路。通过迭代的方式求出参数。
    首先我们需要对参数赋初值,进行迭代运算,假设第次迭代后参数的值为,此时的log似然函数为,即:

在上式中,第二行到第三行使用到了Jensen不等式,由于log函数是凹函数,由Jensen不等式得到:
 

 


表示的是的期望,其中,表示的是隐变量满足的某种分布。这样,上式的值取决于和的概率。在迭代的过程中,调整这两个概率,使得下界不断的上升,这样就能求得的极大值。注意,当等式成立时,说明此时已经等价于。由Jensen不等式可知,等式成立的条件是随机变量是常数,即:

已知:

所以:

则:

至此,我们得出了隐变量满足的分布的形式。这就是EM算法中的E步。在确定了后,调整参数使得取得极大,这便是M步。EM算法的步骤为:

初始化参数,开始迭代;
E步:假设为第次迭代参数的估计值,则在第次迭代中,计算:
M步:求使极大化的,确定第次的参数的估计值:

五、EM算法的收敛性保证
迭代的过程能否保证最后找到的就是最大的似然函数值呢?即需要证明在整个迭代的过程中,极大似然估计是单调增加的。假定和是EM算法的第次和第次迭代后的结果,选定,进行迭代:

E步:
M步:
固定,将看成变量:

上式中,第一个大于等于是因为:

六、利用EM算法参数求解实例
    假设有有一批数据分别是由两个正态分布:


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

首先是初始化和;
E步:,即求数据是由第个分布产生的概率:
M步:,即计算最大的期望值。然而我们要求的参数是均值,可以通过如下的方式估计:

 
Python代码
 


[python] view plaincopy
 





#coding:UTF-8  
‘‘‘‘‘ 
Created on 2015年6月7日 
 
@author: zhaozhiyong 
‘‘‘  
from __future__ import division  
from numpy import *  
import math as mt  
#首先生成一些用于测试的样本  
#指定两个高斯分布的参数,这两个高斯分布的方差相同  
sigma = 6  
miu_1 = 40  
miu_2 = 20  
  
#随机均匀选择两个高斯分布,用于生成样本值  
N = 1000  
X = zeros((1, N))  
for i in xrange(N):  
    if random.random() > 0.5:#使用的是numpy模块中的random  
        X[0, i] = random.randn() * sigma + miu_1  
    else:  
        X[0, i] = random.randn() * sigma + miu_2  
  
#上述步骤已经生成样本  
#对生成的样本,使用EM算法计算其均值miu  
  
#取miu的初始值  
k = 2  
miu = random.random((1, k))  
#miu = mat([40.0, 20.0])  
Expectations = zeros((N, k))  
  
for step in xrange(1000):#设置迭代次数  
    #步骤1,计算期望  
    for i in xrange(N):  
        #计算分母  
        denominator = 0  
        for j in xrange(k):  
            denominator = denominator + mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)  
          
        #计算分子  
        for j in xrange(k):  
            numerator = mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)  
            Expectations[i, j] = numerator / denominator  
      
    #步骤2,求期望的最大  
    #oldMiu = miu  
    oldMiu = zeros((1, k))  
    for j in xrange(k):  
        oldMiu[0, j] = miu[0, j]  
        numerator = 0  
        denominator = 0  
        for i in xrange(N):  
            numerator = numerator + Expectations[i, j] * X[0, i]  
            denominator = denominator + Expectations[i, j]  
        miu[0, j] = numerator / denominator  
          
      
    #判断是否满足要求  
    epsilon = 0.0001  
    if sum(abs(miu - oldMiu)) < epsilon:  
        break  
      
    print step  
    print miu  
      
print miu  



最终结果
 
[[ 40.49487592  19.96497512]]
 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能机器学习频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved