EM算法求高斯混合模型参数估计-python

#coding:gbk
import math
import copy
import numpy as np
import matplotlib.pyplot as plt

isdebug = False

# 指定k个高斯分布参数,这里指定k=2。注意2个高斯分布具有相同均方差Sigma,分别为Mu1,Mu2。
def ini_data(Sigma,Mu1,Mu2,k,N):
	global X
	global Mu
	global Expectations
	X = np.zeros((1,N))
	Mu = np.random.random(2)
	Expectations = np.zeros((N,k))
	for i in xrange(0,N):
		if np.random.random(1) > 0.5:
			X[0,i] = np.random.normal()*Sigma + Mu1
		else:
			X[0,i] = np.random.normal()*Sigma + Mu2
	if isdebug:
		print "***********"
		print u"初始观测数据X:"
		print X
# EM算法:步骤1,计算E[zij]
def e_step(Sigma,k,N):
	global Expectations
	global Mu
	global X
	for i in xrange(0,N):
		Denom = 0
		for j in xrange(0,k):
			Denom += math.exp((-1/(2*(float(Sigma**2))))*(float(X[0,i]-Mu[j]))**2)
		for j in xrange(0,k):
			Numer = math.exp((-1/(2*(float(Sigma**2))))*(float(X[0,i]-Mu[j]))**2)
			Expectations[i,j] = Numer / Denom
	if isdebug:
		print "***********"
		print u"隐藏变量E(Z):"
		print Expectations
# EM算法:步骤2,求最大化E[zij]的参数Mu
def m_step(k,N):
	global Expectations
	global X
	for j in xrange(0,k):
		Numer = 0
		Denom = 0
		for i in xrange(0,N):
			Numer += Expectations[i,j]*X[0,i]
			Denom +=Expectations[i,j]
		Mu[j] = Nume
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值