1. 首先,用MATLAB生成符合双峰正态分布的随机数。

r=0.5;
mu1=50;
sigma1=20;
mu2=200;
sigma2=20;
x=zeros(10000,1);
for i=1:10000
r1=rand;
x(i,1)=(mu2+sigma2*randn)*heaviside(r1-r)+(mu1+sigma1*randn)*heaviside(r-r1);
end
hist(x)

2. 然后就是废话少说,上代码。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class MatlabData {double[] d = new double[10005];double[] r = new double[10005];int N=10000;private double normal(double mu, double sigma, double x){double exp = -(x-mu)*(x-mu)/(2*sigma*sigma);return 1.0/(sigma*Math.sqrt(2*Math.PI))*Math.pow(Math.E, exp);}//http://blog.163.com/huai_jing@126/blog/static/17186198320119231094873/private void EM(double pai, double mu1, double mu2, double s1, double s2){int i,cnt=0;for(i=1;i<=N;i++)r[i] = 0;double eps = 1e-6;double opai=Integer.MIN_VALUE, omu1=Integer.MIN_VALUE, omu2=Integer.MIN_VALUE, os1=Integer.MIN_VALUE, os2=Integer.MIN_VALUE;do{prt("====================== " + (++cnt) + "\n");for(i=1;i<=N;i++){r[i] = pai*normal(mu2, s2, d[i])/((1-pai)*normal(mu1, s1, d[i])+pai*normal(mu2, s2, d[i]));}double up=0, down=0;for(i=1;i<=N;i++){up+=((1-r[i])*d[i]);down+=(1-r[i]);}omu1 = mu1;mu1 = up/down;up = 0;for(i=1;i<=N;i++){up+=((1-r[i])*(d[i]-omu1)*(d[i]-omu1));}os1 = s1;s1 = Math.sqrt(up/down);up=0; down=0;for(i=1;i<=N;i++){up+=((r[i])*d[i]);down+=(r[i]);}omu2 = mu2;mu2 = up/down;up = 0;for(i=1;i<=N;i++){up+=((r[i])*(d[i]-omu2)*(d[i]-omu2));}os2 = s2;s2 = Math.sqrt(up/down);opai = pai;pai = down / N;prt("mu1 : "+mu1+"\n");prt("mu2 : "+mu2+"\n");prt("s1  : "+s1+"\n");prt("s2  : "+s2+"\n");prt("pai : "+pai+"\n");}while(Math.abs(mu1-omu1)>=eps||Math.abs(mu2-omu2)>=eps||Math.abs(s1-os1)>=eps||Math.abs(s2-os2)>=eps||Math.abs(pai-opai)>=eps);}public static void main(String[] args) throws IOException{MatlabData m = new MatlabData();String iptPath = "data/data.txt";BufferedReader br = new BufferedReader(new FileReader(iptPath));String temp;int i = 0;while((temp = br.readLine())!=null){m.d[++i] = Double.parseDouble(temp);}br.close();prt("end of read : "+i+"!\n");m.EM(0.1, 125.2, 125.4, 6023.4, 6023.4);prt("end of the EM !\n");}private static void prt(String string){System.out.print(string);}
}

结果如下:

end of read : 10000!
====================== 1
...
====================== 9
mu1 : 50.04014214593736
mu2 : 199.9913405589886
s1  : 20.07997207253577
s2  : 19.995272104999646
pai : 0.5016524895149193
end of the EM !

可以跟第一步的参数对比一下,还是蛮准的嘛!

参考文献:

matlab中如何生成符合双峰正态分布的随机数

EM算法(expectation-maximization algorithm)

【the EM algorithm】自己动手,丰衣足食。相关推荐

  1. 【转载】(EM算法)The EM Algorithm

    (EM算法)The EM Algorithm EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了. ...

  2. 从0开始编写dapper核心功能、压榨性能、自己动手丰衣足食

    我偶然听说sqlsugar的性能比dapper强.对此我表示怀疑(由于我一直使用的dapper存在偏见吧),于是自己测试了sqlsugar.freesql.dapper发现他们的给我的结果是 sqls ...

  3. 第八讲:期望最大化算法(EM algorithm)

    在前面的若干讲义中,我们已经讲过了期望最大化算法(EM algorithm),使用场景是对一个高斯混合模型进行拟合(fitting a mixture of Gaussians).在本章里面,我们要给 ...

  4. 一键免费下载全网在线视频素材,自己动手丰衣足食

    最近经常分享一个下载视频和音乐的下载方法,今天看到这个震惊了. 一键免费下载全网在线视频素材,自己动手丰衣足食

  5. xlnt踩坑记2_自己动手丰衣足食

    可以参考鄙人上一篇博客 xlnt踩坑记1 然后就这样我爆肝一下午之后终于搞到了xlnt库,他的dll和lib 我开始认识到了--当我开始搞一些比较偏的Project的时候,真的就要靠 自己动手丰衣足食 ...

  6. dealunay triangulation 之 自己动手丰衣足食

    总算搞到了个简化的watson 算法.自己动手丰衣足食.这个是标准的2维watson算法,顺便介绍一下这个算法的特点.和delaunay三角化的定义.对于平面上任意给定的点集,存在一种唯一的三角化,满 ...

  7. (EM算法)The EM Algorithm

    EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了.在Mitchell的书中也提到EM可以用于贝叶 ...

  8. EM Algorithm

    (From yesterday to now, I have learning EM for 4 times, and each time I will gain some new ideas and ...

  9. 小白日志——扫灰、加内存条、装系统自己动手丰衣足食

    2015-4-4 周围女生的笔记本常常用着用着就很卡,卡了也忍着,实在忍不下去了,如我这个小白,就决定给电脑扫扫灰.小白没有经验,只有一颗"勇猛"的心,遂昨天在网上搜罗一筐资料后, ...

最新文章

  1. 通向未来:物联网+人工智能将成为人类的进化方向
  2. 如何查看方法在哪里被调用
  3. 买了又扔 戴尔放弃vworkspace虚拟桌面
  4. 统计字符串元素出现的个数_LeetCode 1295. 统计位数为偶数的数字
  5. Leetcode每日一题:204.count-primes(计数质数)
  6. Flutter视图基础简介--Widget、Element、RenderObject
  7. 商业数据可视化分析基础知识
  8. oracle中ipad是什么意思,Oracle中Ipad和Rpad函数的用法
  9. uni-app 简介
  10. linux如何监控网络流量,linux 下网络流量监控
  11. 地图下面的标尺是什么意思_【一点资讯】地图的主要类型有哪些? 何谓地图比例尺? 什么是地图注记? www.yidianzixun.com...
  12. WPS for Linux添加字体
  13. 中标麒麟Linux能运行wine吗,中标麒麟V6下wine完美运行通达信
  14. 【Python 3.7】熟食店:创建一个名为 sandwich_orders 的列表,在其中包含各种三明治的名 字;再创建一个名为 finished_sandwiches 的空列表……
  15. FGFA(Flow-Guided Feature Aggregation for Video Object Detection)论文详读
  16. 为什么说社群团购时代来临了?
  17. ChinaSoft 论坛巡礼 | 软件工程研究与实践
  18. 2007noip提高组初赛总结
  19. Linux学习——文件权限及文件查找
  20. 关于matlab中矩阵取值的方法

热门文章

  1. updater-script
  2. html兴趣测试生成图表源码,用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告
  3. IntelliJ IDEA查看一个类的类图结构 show diagrams,用图表的方式查看类的关系层次
  4. 无人驾驶、自动驾驶MDC、车联网技术报告
  5. 希希的多项式(推递推式)
  6. 高级软件工程第六次作业:“希希敬敬对”团队作业-3
  7. php不支持png图片裁剪,thinkphp5.1 图片处理类think-image的png 缩略,裁剪和添加水印透明度丢失的问题...
  8. 利用python爬取租房信息_Python爬虫实战(1)-爬取“房天下”租房信息(超详细)
  9. 英语语言能力测试软件,英语语言能力测试标准
  10. 2019年11月20日笔记