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 ...
随机推荐
- Java——自定义外部字体文件
package chapter1; import javax.swing.*;import java.awt.*;import java.io.IOException;import java.io.I ...
- 神经网络之:S型神经元
1.S 型神经元和感知器类似,但是被修改为权重和偏置的微小改动只引起输出的微小变化 2.S型神经元结构: S型函数: 带有x1,x2,........,权重w1,w2.....,和偏置b的S型神经元的 ...
- C# 中的DevExpress CheckedListBoxControl控件
1. 给checkedListBoxControl绑定数据源: checkedListBoxControl.DataSource = listRole; checke ...
- python 变量、列表、元组、字典
python 变量.列表.元组.字典 1.python 变量赋值 2.ptython 列表 3.python 元组 4.python 字典 1. Python变量赋值 1.1变量的命名规 ...
- 使用Medusa美杜莎暴力破解SSH密码
使用Medusa美杜莎暴力破解SSH密码 1.Medusa简介 Medusa(美杜莎)是一个速度快,支持大规模并行,模块化的爆力破解工具.可以同时对多个主机,用户或密码执行强力测试.Medusa和hy ...
- UVa11538 A Chess Queen
A Chess Queen Problem A Chess Queen Input: Standard Input Output: Standard Output You probably know ...
- 1129. Recommendation System (25)
Recommendation system predicts the preference that a user would give to an item. Now you are asked t ...
- Stylus-富有表现力的、动态的、健壮的CSS
今天总结一下Stylus记一些常用的也是最基本的用法 一. 选择器 Stylus是基于缩进的这让我们可以更快捷的编写css比如 body { margin:; paddind:; font-size ...
- gradle配置国内阿里云镜像
对单个项目生效,在项目中的build.gradle修改内容 buildscript { repositories { maven { url 'http://maven.aliyun.com/nexu ...
- pdf幻灯片:圆锥曲线中的“三定”问题探究(一)
预留的广告位! 下载该pdf文件,然后在adobe reader 的"视图"中使用"全屏模式"播放该幻灯片 #include <iostream> ...