`

EM算法与高斯混合分布

阅读更多

作为机器学习的十大算法之一,EM算法可谓是风头出尽,尤其是EM算法在聚类等方面的优越表现,让EM算法备受瞩目,这个星期对EM算法进行了一番了解,说实话EM算法光从教科书上的那些公式说导我觉得很难理解,在七月算法的一节关于EM算法的公开课上慢慢的对EM算法有了算是入门的了解,今天就来说说EM算法与其典型的应用:高斯混合分布

 

首先简略介绍一个高斯混合分布:

 

在一个随机分布里面,可能存在着很多的分布类型,我们假设每个类的分布都符合高斯混合模型,那么一个随机值集合里面就会有多个高斯分布,举个简单的例子,在一群男女生中,我们统计每个人的身高数据,因为男女生的身高存在差异,我们显然不能讲两者的身高都做一样的处理,那么对于这个身高数据而言,男生的身高符合一个高斯分布,女生的身高符合一个高斯分布,这就是一个数据集里面的两个高斯分布,高斯分布的数学描述是:


                       

其中phi表示一个高斯分布,alpha表示该高斯分布占的比例

 

回到男女身高问题本身,现在的问题是如何求解男女身高的均值和方差(标准差)

 

当然我们可以使用极大似然估计来求解,但这只是理论上可行,实际并不可行

因此我们需要使用一种新的办法来求解,当然,这里自然指的是:EM算法

 

EM算法该如何理解,这是一个问题,七月算法的公开课讲的非常给力,这里给出链接地址 http://www.julyedu.com/video/play/?id=79&course=18

 

这里我不准备对EM进行理论推导,对于上述的男女身高问题这里仅给出一个结论,然后我们使用python将这个问题解决,当然,具体的推导过程见附件的pdf文件

 

每次迭代过程的公式是:



 

最后我们使用python代码来实现以下男女身高问题的求解过程,我给出了一个男生占50人女生占70人的数据集,其中男生均值为175,标准差为2,女生均值是160,方标准差为2,并加以0~1的随机噪声,然后通过代码求解EM算法运算的准确性

 

# -*- coding: cp936 -*-
"""
EM算法与混合高斯分布
author:luchi
date:2015/12/6

description:假如有一堆人,包括男的和女的,现在不知道
其比例只能统计身高信息,现在要求男的和女的的身高的均值
方差已经在人群中占得比例,使用EM算法的混合高斯模型可以
解决
"""
from numpy import *
from random import *
import math

#计算高斯值
def calcGauss(x,mu,sigma):
    return exp(-1*(x-mu)**2/2/(sigma**2))/sigma/sqrt(2*math.pi)
    
#计算均值
def averageHeight(height,gamma,n):
    sumHeight=0.0
    for i in range(len(height)):
        sumHeight+=height[i]*gamma[i]
    return float(sumHeight)/n
#计算标准差
def varianceHeight(height,gamma,mu,n):
    sumVariance=0.0
    for i in range(len(height)):
        sumVariance+=gamma[i]*(height[i]-mu)**2
    return sqrt(float(sumVariance)/n)

#终止条件gp,bp,gmu,gsigma,bmu,bsigma
def isEqual(cur,now):
    cur=mat(cur).T
    now=mat(now).T
    temp=cur-now
    if temp.T*temp<0.001:
        return True
    return False
    
#计算的主要函数,height为人群的身高分布
def calcEM(height):
    N=len(height)
    gp=0.5  #女孩的初始比例
    bp=0.5  #男孩的初始比例
    gmu,gsigma=min(height),1  #初始值的女孩身高均值和标准差
    bmu,bsigma=max(height),1  #初始值的男孩身高均值和标准差
    
    ggamma=range(N)  #计算女孩在迭代过程中的gamma值
    bgamma=range(N)  #计算女孩在迭代过程中的gamma值
    
    cur=[gp,bp,gmu,gsigma,bmu,bsigma] #初始的方差矩阵
    now=[]
    
    times=0  #迭代次数
    while times<100:
        i=0
        for x in height:
           ggamma[i]= gp*calcGauss(x,gmu,gsigma)
           bgamma[i]= bp*calcGauss(x,bmu,bsigma)
           s= ggamma[i]+bgamma[i]
           ggamma[i]/=s
           bgamma[i]/=s
           i+=1
        
        gn=sum(ggamma)  #计算比例
        gp=float(gn)/float(N)
        bn=sum(bgamma)
        bp=float(bn)/float(N)
        gmu=averageHeight(height,ggamma,gn)
        gsigma=varianceHeight(height,ggamma,gmu,gn)
        bmu=averageHeight(height,bgamma,bn)
        bsigma=varianceHeight(height,bgamma,bmu,bn)

        now=[gp,bp,gmu,gsigma,bmu,bsigma]
        if isEqual(cur,now):
            break
        cur=now

        print "迭代次数是:\t",times
        print "女孩的身高平均值和标准差是:\t",gmu,gsigma
        print "男孩的身高平均值和标准差是:\t",bmu,bsigma
        print "男孩女孩的比例是:\t",bn,gn,bn+gn
        times+=1
    return now

def test():
    #产生随机测试集
    height=[]
    #产生男生的身高数据
    for i in range(50):
        height.append(gauss(175,2)+5*random()*pow(-1,i))
    for i in range(70):
        height.append(gauss(160,2)+5*random()*pow(-1,i))
    
    calcEM(height)

if __name__=='__main__':
    test()
    
        




        

  计算结果如下:

 

 

迭代次数是:	2
女孩的身高平均值和标准差是:	160.368555386 3.56047601722
男孩的身高平均值和标准差是:	174.782518706 3.52040845881
男孩女孩的比例是:	52.5771905209 67.4228094791 120.0

 

 需要说明的是,EM算法对初值很敏感,而且EM算法是局部最优解,而不是全局最优解,但是在选定的初值偏差不是太大的情况下,EM算法还是有很好的准确度

  • 大小: 4.9 KB
  • 大小: 67.1 KB
2
2
分享到:
评论

相关推荐

    EM算法在混合高斯分布中的应用MATLAB代码

    对两个一维高斯分布产生的无先验知识样本进行分类最终得到样本属于哪个高斯分布的概率和各分布的均值方差

    EM算法进行高斯混合模型聚类

    在高斯混合模型(Gaussian Mixture Model,GMM)中,EM算法被广泛用于聚类任务,特别是对于N维数据的处理。GMM是一种概率模型,假设数据是由多个高斯分布(正态分布)混合而成,每个高斯分布代表一个聚类。 GMM的...

    EM算法混合高斯模型应用的matalb代码

    5. **Matlab实现**:在Matlab中,你可以用结构体来存储高斯混合模型的参数,包括均值、协方差矩阵和权重。`GMM+EM`可能是代码文件的名字,它可能包含了EM算法的主函数,以及用于可视化和评估结果的辅助函数。代码中...

    em算法 高斯混合模型

    在高斯混合模型(Gaussian Mixture Model, GMM)中,EM算法发挥着关键作用。GMM是一种概率密度函数的组合形式,它假设数据是由多个高斯分布(正态分布)生成的。 在GMM中,每个数据点可能属于一个或多个高斯分布,...

    EM算法求高斯混合分布java代码

    总的来说,这个Java项目提供了EM算法求解高斯混合模型的实现,对于理解GMM和EM算法以及在实际项目中应用这些概念具有实践价值。通过阅读和运行代码,可以加深对这些概念的理解,并且能为自己的项目提供参考。

    基于python的高斯混合模型(GMM 聚类)的 EM 算法实现

    高斯混合模型是概率模型,假设数据由多个高斯分布混合而成。每个观测值属于某个高斯分布的概率由一个权重(或称为混合系数)决定。GMM通过估计这些权重、均值和方差来对数据进行建模。 Python中的`scikit-learn`库...

    EM算法在高斯混合模型中的应用有matlab 代码

    ### EM算法在高斯混合模型中的应用详解 #### 一、引言 EM算法(Expectation-Maximization Algorithm)是一种广泛应用于统计建模中的优化算法,尤其在处理含有隐变量的模型时表现突出。本文主要介绍EM算法在高斯混合...

    通过EM算法估计高斯混合模型参数的MATLAB仿真+代码操作视频

    1.领域:matlab,EM算法估计高斯混合模型参数算法 2.内容:通过EM算法估计高斯混合模型参数的MATLAB仿真+代码操作视频 3.用处:用于EM算法估计高斯混合模型参数算法编程学习 4.指向人群:本硕博等教研学习使用 ...

    高斯混合模型的EM算法(文档及python代码)

    在提供的压缩包文件"**GMM**"中,可能包含的文件有文档(可能是PDF或Markdown格式),详细解释了高斯混合模型和EM算法的原理,以及相关的Python代码实现,用于演示如何训练和使用GMM。阅读这些文档和代码,可以帮助...

    高斯混合模型GMM与EM算法的matlab实现

    高斯混合模型GMM与EM算法的matlab实现,用户可直接运行代码,观看结果,欢迎下载,进行进一步讨论

    二维混合高斯分布的EM算法(matlab)

    ### 二维混合高斯分布的EM算法解析及MATLAB实现 #### 一、知识点概览 本文将深入探讨二维混合高斯分布(2D Mixture of Gaussians, 2D MoG)及其在MATLAB环境下的期望最大化算法(Expectation-Maximization ...

    高斯混合模型EM算法

    总结来说,高斯混合模型结合EM算法提供了一种强大的工具,能够处理具有复杂分布的数据,并在各种任务中展现出良好的性能。理解并掌握这一方法对于深入理解和应用机器学习中的概率建模至关重要。

    EM算法用于混合高斯模型的参数估计

    对于高斯混合模型,这意味着更新每个高斯分量的均值、方差和混合系数,使得数据点的联合似然性最大化。 4. **重复EM步骤**:继续执行E步和M步,直到模型参数收敛或达到预设的最大迭代次数。 在实际应用中,EM算法常...

    EM算法用于高斯混合模型.rar_EM_EM算法_busyigw_em参数估计_高斯混合模型

    提供的"EM算法用于高斯混合模型.pdf"文件可能包含详细的理论解释和Matlab代码示例,可以帮助读者深入理解和应用EM算法与GMM。 总结起来,EM算法在高斯混合模型中用于估计模型参数,它通过迭代的E和M步骤,处理数据...

    高斯混合模型(EM算法)Matlab代码

    总结来说,高斯混合模型结合EM算法是一种强大的工具,用于处理多元数据的建模和分析。在Matlab环境中,我们可以方便地实现和调整该模型,以适应各种实际问题。通过理解和应用这一技术,我们可以提升数据分析和机器...

    EM算法求解高斯混合模型1

    EM 算法求解高斯混合模型 EM 算法是一种处理含有隐变量的概率模型参数估计的极大似然法。它广泛应用于机器学习、计算机视觉、自然语言处理等领域。 在高斯混合模型中,每个样本点都是通过选择某个高斯分布生成的,...

    EM算法混合高斯模型

    在本例中,混合高斯模型(Mixture of Gaussians)是EM算法的一个经典应用,它用于建模复杂的、多模态的数据分布。 混合高斯模型可以看作是多个高斯分布的线性组合,每个高斯分布代表数据的一个模式或簇。在实际应用...

    EM算法用于高斯混合模型

    ### EM算法用于高斯混合模型 #### 极大似然估计与EM算法的基本概念 **极大似然估计**是一种常用的参数估计方法,它基于这样的思想:我们希望找到一组参数值,使得观察到的数据出现的概率最大。设有一个随机变量\( ...

    高斯混合模型EM算法MATLAB程序.rar_em 混合高斯_混合算法MATLAB_混合高斯模型_高斯混合模型_高斯混合聚类

    在MATLAB程序的文档中,`高斯混合模型EM算法MATLAB程序.docx`,可能包含详细的算法实现步骤、代码解释、示例数据以及如何运行和解释结果的说明。通过阅读这份文档,你可以更深入地理解GMM和EM算法在MATLAB环境中的...

Global site tag (gtag.js) - Google Analytics