# GMM model
# //
library(mvtnorm) set.seed()
n1 =
n2 =
mu1 = c(,)
mu2 = c(-,-)
sigma1 = matrix(c(,.,.,),nrow=)
sigma2 = matrix(c(,.,.,),nrow=)
y1 = rep(,n1)
y2 = rep(,n2)
x1 = rmvnorm(n1, mean=mu1, sigma=sigma1)
x2 = rmvnorm(n2, mean=mu2, sigma=sigma2) x = rbind(x1,x2)
y = rbind(y1,y2) ns =
ngrid = mv.gauss = function(x,y,mu,sigma)
{
nx = length(x)
ny = length(y)
z = matrix(,nrow=ny, ncol=nx)
sigma_inv = solve(sigma)
det_sigma = det(sigma)
for (i in :nx){
for (j in :ny){
z[i,j] = /(*pi*sqrt(det_sigma)) * exp(-t(c(x[i], y[j]) - mu) %*% sigma_inv %*% t(t(c(x[i], y[j]) - mu)))
}
}
return(z)
}
gauss_density = function(x,mu,sigma)
{
nx = length(x)
ny = length(y)
z = matrix(,nrow=ny, ncol=nx)
sigma_inv = solve(sigma)
det_sigma = det(sigma)
value = /(*pi*sqrt(det_sigma)) * exp(-/* t(x - mu) %*% sigma_inv %*% t(t(x - mu))) return(value)
}
plot_contour = function(ngrid, ns, mv.gauss, mu1,sigma1,mu2,sigma2){
x.range1 = seq(mu1[]-ns*sigma1[],mu1[]+ns*sigma1[],length.out=ngrid)
y.range1 = seq(mu1[]-ns*sigma1[],mu1[]+ns*sigma1[],length.out=ngrid) x.range2 = seq(mu2[]-ns*sigma2[],mu2[]+ns*sigma2[],length.out=ngrid)
y.range2 = seq(mu2[]-ns*sigma2[],mu1[]+ns*sigma2[],length.out=ngrid) z1 = mv.gauss(x.range1, y.range1, mu1, sigma1)
z2 = mv.gauss(x.range2, y.range2, mu2, sigma2)
contour(x.range1, y.range1, z1, add=TRUE,col="red", lwd = )
contour(x.range2, y.range2, z2, add=TRUE,col="blue", lwd = )
}
plot_iter = function(ngrid,x1,x2,mv.gauss, mu1,sigma1,mu2,sigma2, iter=){
x = rbind(x1,x2)
plot(x[,], x[,], type='p',
main=sprintf("Iter %d: mu1=(%.2f, %.2f)/(-5,-6) mu2=(%.2f, %.2f)/(0,1)",
iter, mu1[],mu1[], mu2[], mu2[]))
points(mu1[], mu1[], col='red', pch=)
points(mu2[], mu2[], col='blue', pch=)
plot_contour(ngrid,,mv.gauss, mu1,sigma1,mu2,sigma2)
}
obj_value = function(x,phi, mu1, sigma1, mu2, sigma2){
n = dim(x)[]
res =
for (i in i:n){
res = res + log(phi[]*gauss_density(x[i,], mu1, sigma1)+phi[]*gauss_density(x[i,], mu2, sigma2))
}
return(res)
}
plot_iter(ngrid,x1,x2,mv.gauss, mu1,sigma1,mu2,sigma2) mu1_i = c(,)
mu2_i = c(,)
sigma1_i = matrix(c(,,,),nrow=)
sigma2_i = matrix(c(,,,),nrow=)
plot_iter(ngrid,x1,x2,mv.gauss, mu1_i,sigma1_i,mu2_i,sigma2_i,) n = n1+n2
w = array(,dim=c(n,))
phi1 = 0.5
phi2 = 0.5
num_iter =
obj_val = rep(,num_iter)
for (ii in :num_iter){
# E-step
for (i in :n){
w[i,] = phi1 * gauss_density(x[i,], mu1_i, sigma1_i)
w[i,] = phi2 * gauss_density(x[i,], mu2_i, sigma2_i)
tmp = sum(w[i,])
w[i,] = w[i,] / tmp
w[i,] = w[i,] / tmp
} # M-step
phi1 = mean(w[,])
phi2 = mean(w[,])
mu1_i = colSums(w[,]*x) / sum(w[,])
mu2_i = colSums(w[,]*x) / sum(w[,])
tmp = matrix(,nrow=,,ncol=)
mu = mu1_i
for (i in :n){
tmp = tmp + w[i,] * (t(t(x[i,] - mu)) %*% t(x[i,] - mu))
}
sigma1_i = tmp / sum(w[,])
tmp = matrix(,nrow=,ncol=)
mu = mu2_i
for (i in :n){
tmp = tmp + w[i,] * (t(t(x[i,] - mu)) %*% t(x[i,] - mu))
}
sigma2_i = tmp / sum(w[,])
plot_iter(ngrid,x1,x2,mv.gauss, mu1_i,sigma1_i,mu2_i,sigma2_i, ii)
obj_val[ii] = obj_value(x,c(phi1,phi2), mu1_i,sigma1_i, mu2_i, sigma2_i)
}
plot(obj_val,type="l",main="Objective function: log likelihood",xlab="#Iteration")
print(c(phi1, phi2))
print(sigma1_i)
print(sigma2_i)

GMM demo的更多相关文章

  1. GMM+Kalman Filter+Blob 目标跟踪

    转 http://www.cnblogs.com/YangQiaoblog/p/5462453.html ==========图片版================================== ...

  2. opencv::GMM(高斯混合模型)

    GMM方法概述:基于高斯混合模型期望最大化. 高斯混合模型 (GMM) 高斯分布与概率密度分布 - PDF 初始化 初始化EM模型: Ptr<EM> em_model = EM::crea ...

  3. 通过一个demo了解Redux

    TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...

  4. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  5. 在线浏览PDF之PDF.JS (附demo)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...

  6. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  7. vue双向数据绑定原理探究(附demo)

    昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...

  8. Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决

    前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...

  9. iOS之ProtocolBuffer搭建和示例demo

    这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...

随机推荐

  1. PHP数据结构基本概念

    原文:https://www.cnblogs.com/crystaltu/p/6408484.html 学习任何一种技术都应该先清楚它的基本概念,这是学习任何知识的起点!本文是讲述数据结构的基本概念, ...

  2. Python中对 文件 的各种骚操作

    Python中对 文件 的各种骚操作 python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getc ...

  3. Chrome浏览器记住密码后input框黄色背景且背景图片不显示的问题

    Chrome浏览器记住密码后再进入登录页后,输入框背景颜色变为黄色,字体颜色变成#000黑色,且添加的背景图片也那不显示了,进入审查元素后,发现浏览器默认给输入框添加了样式,并且无法通过importa ...

  4. vuex辅助函数和vuex5个属性

    在上篇中,我们可以知道如果想要访问vuex.store中state中的数据,需要this.$store.state.属性名.显然这样访问数据写的代码很很不简洁的,辅助函数就是用来解决这个问题的. 1. ...

  5. Hive配置日志

    1. 重命名hive/conf文件夹下的hive-log4j 2. 修改hive.log.dir参数,如果不修改默认hive.log位于/tmp/{user}下面,一般来说使用在hive目录下自己创建 ...

  6. unittest生成报告

    # html报告文件路径    report_abspath = os.path.join(report_path, "result.html")    fp = open(rep ...

  7. CCPC-Wannafly Winter Camp Day1 爬爬爬山 (最短路)

    题目描述 爬山是wlswls最喜欢的活动之一. 在一个神奇的世界里,一共有nn座山,mm条路. wlswls初始有kk点体力,在爬山的过程中,他所处的海拔每上升1m1m,体力会减11点,海拔每下降1m ...

  8. 强化学习(Reinfment Learning) 简介

    本文内容来自以下两个链接: https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/ https: ...

  9. spring jpa 带参数分页查询(一)

    1.写个接口继承JpaRepository @NoRepositoryBean public interface BaseRepository<T,PK extends Serializable ...

  10. ThreadLocal 解决simpledateformat线程不安全

    SimpleDateFormat在多线程情况下会出现线程不安全的情况,故用ThreadLoacl 处理/** * 用ThreadLocal处理simplDateFormat线程不安全 */public ...