# 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. 洛谷 - P1522 - 牛的旅行 - Cow Tours - Floyd

    https://www.luogu.org/problem/P1522 好坑啊,居然还有直径不通过新边的数据,还好不是很多. 注意一定要等Floyd跑完之后再去找连通块的直径,不然一定是INF. #i ...

  2. 【转】MySQL my.cnf 参数 详解

    [client] port    = 3306    //客户端端口号为3306 socket  = /tmp/mysql.sock  //套接字文件(sockets),这种文件一般用在网络上的资料套 ...

  3. “程序包com.sun.tools.javac.util不存在” 问题解决

    最近工作中在编译打包项目的时候遇到了如标题所示的问题,报这个错误的类是 com.sun.tools.javac.util.Pair.问题很诡异,在Idea可以导入此类,项目启动运行也很正常,但就是在打 ...

  4. Cookie&Session笔记

    # 今日内容     1. 会话技术         1. Cookie         2. Session     2. JSP:入门学习 ## 会话技术     1. 会话:一次会话中包含多次请 ...

  5. setTimeout、Promise、Async/Await 的执行顺序

    问题描述:以下这段代码的执行结果 async function async1() { console.log('async1 start'); await async2(); console.log( ...

  6. Selenium Java tutorial

     https://eyes.applitools.com/app/test-results 1.

  7. 安装mod_rpaf让apache获取访客真实IP

    安装mod_rpaf让apache获取访客真实IP 安装mod_rpaf让apache获取访客真实IP 作者:朱 茂海 /分类:Apache  字号:L M S     mod_rpaf是apache ...

  8. django开发环境搭建(参考流程)

    django开发环境搭建(参考流程) 2013-08-08 01:09:06 分类: LINUX 原文地址:django开发环境搭建(参考流程) 作者:bailiangcn 对于一个初学者,在实际的开 ...

  9. 面试题常考&必考之--js闭包特性和优缺点 (外加小例子)

    当内部函数被返回到外部并保存时,一定会产生闭包.闭包会产生原来的作用域链,不释放. 闭包,可以理解为,写一个函数,然后产生闭包的这种现象. 概念: 基础: 主要是:add    reduce  被返回 ...

  10. CSS背景和CSS3背景background属性

    css背景属性用于定义HTML元素的背景 背景属性既可以为单个的单元设置背景,也可以为整个页面设置背景,可以对上述二者的任意组合设置背景,段落.文字.不同状态的链接.图像.内容区域修改其背景样式.设置 ...