GMM demo
# 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的更多相关文章
- GMM+Kalman Filter+Blob 目标跟踪
转 http://www.cnblogs.com/YangQiaoblog/p/5462453.html ==========图片版================================== ...
- opencv::GMM(高斯混合模型)
GMM方法概述:基于高斯混合模型期望最大化. 高斯混合模型 (GMM) 高斯分布与概率密度分布 - PDF 初始化 初始化EM模型: Ptr<EM> em_model = EM::crea ...
- 通过一个demo了解Redux
TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...
- 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo
有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...
- 在线浏览PDF之PDF.JS (附demo)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...
- 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo
Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...
- vue双向数据绑定原理探究(附demo)
昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...
- Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决
前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...
- iOS之ProtocolBuffer搭建和示例demo
这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...
随机推荐
- babel的初步了解
前段时间开始研究ast,然后慢慢的顺便把babel都研究了,至于ast稍后的时间会写一篇介绍性博客专门介绍ast,本博客先介绍一下babel的基本知识点. 背景: 由于现在前端出现了很多非es5的语法 ...
- P2220 [HAOI2012]容易题
传送门 首先 $(\sum_{i=1}^{n}a_i)(\sum_{i=1}^{m}b_i)$ 展开以后包含了所有 $ab$ 两两相乘的情况并且每种组合只出现一次 发现展开后刚好和题目对序列价值的定义 ...
- django编辑框实现
一些常用的: CKEditor UEEditor TinyEditor KindEditor 下载: http://kindeditor.net/down.php 使用方法: <textarea ...
- Resharper 2019.1.1 破解
本文链接:https://blog.csdn.net/qq_21361809/article/details/92423949 Resharper ...
- 解决stanfordnlp一直运行不报错也没有结果
最近学习stanfordnlp,当运行程序时,发现程序一直没有反应,上网查询说是内存不够,但是本地电脑是8g内存.后来重新下载了所需文件,问题解决.
- Tomcat启动慢的原因及解决方法
Tomcat启动慢的原因及解决方法 在CentOS启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的.Tocmat的Session ID ...
- c++ Socket客户端和服务端示例版本二
客户端 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/soc ...
- Codeforces Round #427 (Div. 2) - B
题目链接:http://codeforces.com/contest/835/problem/B 题意:给定一个数k和一个数字串n.问你最少改几个数字才能满足所有数字的和不小于k. 思路:考虑贪心,每 ...
- Listview使用
ListView控件比前面几种控件要复杂一些,通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本.ListView控件是由ColumnHeader和ListItem对象所组成的,其 ...
- python:实例属性和类属性
由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(se ...