资源简介
利用EM算法实现GMM算法,文件包含GMM模型以及一个简单的2分类问题的实现,课程作业绝对可用。
代码片段和文件信息
function varargout = gmm(X K_or_center)
threshold = 1e-15;
[N D] = size(X);
if isscalar(K_or_center)
K = K_or_center;
R = randperm(N);
center = X(R(1:K) :);
else
K = size(K_or_center 1);
center = K_or_center;
end
prev = -inf;
[Miu Pi Sigma] = init_params();
while true
Px = prob();
Gamma = Px .* repmat(Pi N 1);
Gamma = Gamma ./ repmat(sum(Gamma 2) 1 K);
Nk = sum(Gamma 1);
Miu = diag(1./Nk) * Gamma‘ * X;
Pi = Nk/N;
for t = 1:K
shift = X-repmat(Miu(t :) N 1);
Sigma(: : t) = (shift‘ * (diag(Gamma(: t)) * shift)) / Nk(t);
end
L = sum(log(Px*Pi‘));
if L-prev < threshold
break;
end
prev = L;
end
model = [];
model.Miu = Miu;
model.Sigma = Sigma;
model.Pi = Pi;
varargout = {Px model};
function Px = prob()
Px = zeros(N K);
for k = 1:K
shift = X-repmat(Miu(k :) N 1); %X-Miu
inv_Sigma = inv(Sigma(: : k));
tmp = sum((shift*inv_Sigma) .* shift 2);
coef = (2*pi)^(-D/2) * sqrt(det(inv_Sigma));
Px(: k) = coef * exp(-0.5*tmp);
end
end
function [Miu Pi Sigma] = init_params()
Miu = center;
Pi = zeros(1 K);
Sigma = zeros(D D K);
distmat = repmat(sum(X.*X 2) 1 K) + repmat(sum(Miu.*Miu 2)‘ N 1) - 2*X*Miu‘;
[~ labels] = min(distmat [] 2);
for k=1:K
Xk = X(labels == k :);
Pi(k) = size(Xk 1)/N;
Sigma(: : k) = cov(Xk);
end
end
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8575 2013-07-09 15:15 dev.txt
文件 1861 2017-11-30 16:34 gmm.m
文件 1501 2017-11-30 16:33 main.m
文件 188 2017-11-21 18:29 readme.txt
文件 5905 2013-07-09 15:46 test.txt
文件 5553 2017-11-21 18:29 test_res.txt
文件 102935 2013-07-09 14:37 train.txt
相关资源
- System.Data.DataSetExtensions.dll
- Demo_Voltage_Read。vi
- 地理空间数据云TIF格式DEM如何转换成
- 实时监控目录文件夹的更新状态,与
- WebSocketDemo
- 小程序源码 豆瓣书城
- RemapKey.exe
- codemirrotest
- zw_KalmanDemoCode.zip
- 基于VS2010的全局低级键盘钩子Hook de
- laravel框架使用DEMO
- 微信小程序源码,内含包括语音文本
- SpringBoot Demo非maven
- Unity3D客户端PureMVC框架视屏讲解
- UART 做文件传输采用 Xmodem协议
- 微信支付-微信企业付款到个人DEMO
- 小程序剪切头像demo
- HP Application Lifecycle Management 11.50 + SP
- FileMergeTool.rar
- chrome卸载 remove.reg
- 网页版调用FreeSWITCH(FreeSWITCH-demo-V1
- Memtest86+ 5.01USB Installer
- SIEMENS S7-200 下沉法 排序程序
- 汇编语言实现数字的输入排序显示
- echarts散点图及数字翻转效果demo
- 爱投票系统 - 前端页面一
- MyMemory for Trados 2019
- TaskDialogDemo.zip
- mathematica数值计算
- EM231模块手册
评论
共有 条评论