Matlab 代码:

% GMM code

function varargout = gmm(X, K_or_centroids)

% input X:N-by-D data matrix

% input K_or_centroids: K-by-D centroids

% 阈值

threshold = 1e-15;

% 读取数据维度

[N, D] = size(X);

% 判断输入质心是否为标量

if isscalar(K_or_centroids)

% 是标量,随机选取K个质心

K = K_or_centroids;

rnpm = randperm(N); % 打乱的N个序列

centroids = X(rnpm(:K), :);

else % 矩阵,给出每一类的初始化

K = size(K_or_centroids, );

centroids = K_or_centroids;

end

% 定义模型初值

[pMiu pPi pSigma] = init_params();

Lprev = -inf;

while true

% E-step,估算出概率值

% Px: N-by-K

Px = calc_prob();

% pGamma新的值,样本点所占的权重

% pPi:-by-K pGamma:N-by-K

pGamma = Px ./ repmat(pPi, N, );

% 对pGamma的每一行进行求和,sum(x,):每一行求和

pGamma = pGamma ./ repmat(sum(pGamma, ) , , K);

% M-step

% 每一个组件给予新的值

Nk = sum(pGamma,);

pMiu = diag(./Nk)*pGamma'*X;

pPi = Nk/N;

for kk = 1:K

Xshift = X - repmat(pMiu(kk, :) ,N, 1);

pSigma(:,:,kk) = (Xshift'*(diag(pGamma(:,kk))*Xshift)) / Nk(kk);

end

% 观察收敛,convergence

L = sum(log(Px*pPi'));

if L-Lprev < threshold

break;

end

Lprev = L;

end

% 输出参数判定

if nargout == 1

varargout = {Px};

else

model = [];

model.Miu = pMiu;

model.Sigma = pSigma;

model.Pi = pPi;

varargout = {Px, model};

end

function [pMiu pPi pSigma] = init_params()

pMiu = centroids; % 均值,K类的中心

pPi = zeros(1, K); % 概率

pSigma = zeros(D, D, K); % 协方差,每一个都是D-by-D

% (X - pMiu)^2 = X^2 + pMiu^2 - 2*X*pMiu

distmat = repmat(sum(X.*X, 2), 1, K) + repmat(sum(pMiu.*pMiu, 2)', N, ) - *X*pMiu';

[dummy labels] = min(distmat, [], 2); % 找出每一行的最小值,并标出列的位置

for k=1:K %初始化参数

Xk = X(labels == k, :);

pPi(k) = size(Xk, 1)/N;

pSigma(:, :, k) = cov(Xk);

end

end

% 计算概率值

function Px = calc_prob()

Px = zeros(N,K);

for k=1:K

Xshift = X - repmat(pMiu(k,:),N,1);

inv_pSigma = inv(pSigma(:,:,k)+diag(repmat(threshold, 1, size(pSigma(:,:,k),1))));

tmp = sum((Xshift*inv_pSigma).*Xshift, 2);

coef = (2*pi)^(-D/2)*sqrt(det(inv_pSigma));

Px(:,k) = coef * exp(-1/2*tmp);

end

end

end

测试主程序:

% 测试代码

clear all

clc

data = load('testSet.txt');

[PX, Model] = gmm(data, );

[~,index] = max(PX'); % 每一列的最大值

cent = Model.Miu;

figure

I = find(index == );

scatter(data(I,), data(I,))

hold on

scatter(cent(,), cent(,) ,, 'filled');

hold on

I = find(index == );

scatter(data(I,),data(I,))

hold on

scatter(cent(,),cent(,),,'filled')

hold on

I = find(index == );

scatter(data(I,),data(I,))

hold on

scatter(cent(,),cent(,),,'filled')

hold on

I = find(index == );

scatter(data(I,),data(I,))

hold on

scatter(cent(,),cent(,),,'filled')

示意图:

参考自:http://www.voidcn.com/blog/llp1992/article/p-2308490.html

高级渲染技巧和代码示例 GPU Pro 7

下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

Java8-Function使用及Groovy闭包的代码示例

导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

&lbrack;IOS 开发&rsqb; 懒加载 &lpar;延迟加载&rpar; 的基本方式,好处,代码示例

懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

SELECT控件操作的JS代码示例

SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...

转:HIBERNATE一些&lowbar;方法&lowbar;&commat;注解&lowbar;代码示例---写的非常好

HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

Python实现各种排序算法的代码示例总结

Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

C&num;与数据库访问技术总结(十五)之 DataAdapter对象代码示例

DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...

C&num;与数据库访问技术总结(六)之Command对象创建SQl语句代码示例

Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...

领域驱动开发推荐代码示例 — Microsoft NLayerApp

简介: Microsoft NLayerApp是由微软西班牙团队出品的基于.NET 4.0的“面向领域N层分布式架构”代码示例,在codeplex上的地址是:http://microsoftnlaye ...

随机推荐

ENode框架Conference案例分析系列之 - 复杂情况的读库更新设计

问题背景 Conference案例,是一个关于在线创建会议(类似QCon这种全球开发者大会).在线管理会议位置信息.在线预订某个会议的位置的,这样一个系统.具体可以看微软的这个项目的主页:http:/ ...

jQuery-1&period;9&period;1源码分析系列(四) 缓存系统

先前在分析Sizzle的时候分析到Sizzle有自己的缓存机制,点击这里查看.不过Sizzle的缓存只是对内使用的(内部自己存,自己取).接下来分析jQuery可以对外使用的缓存(可存可取). 首先需 ...

The Blocks Problem

Description Many areas of Computer Science use simple, abstract domains for both analytical and empi ...

RBAC用户角色权限设计方案

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用 户-角色 ...

使用maven配置scala Hadoop spark开发环境

1. 新建maven project 2. Group id : org.scala-tools.archetypes Artifact id : scala-archetype-simple Ver ...

Android 正则表达式实例

editText正则表达式的使用 检查输入是否符合规则 import Android.app.Activity; import android.os.Bundle; import android.vi ...

第25月第8天 100-Days-Of-ML-Code

1.100-Days-Of-ML-Code https://github.com/Avik-Jain/100-Days-Of-ML-Code https://github.com/llSourcell ...

数据恢复Winhex的核心理念

一.数据恢复就是寻找有价值的东西,其本质是数据定位,检索技术.存在的有迹可循,毁灭的无影无踪.这就譬如说,一本撕烂的书输的目录不见了,但是内容全在,我们就可以读到内容,但是内容不存在了,也就无法在找到 ...

django用户系统的测试,蛮不错的。

https://blog.csdn.net/orangleliu/article/details/51944758 这个很实用 https://www.cnblogs.com/yanhuidj/p/1 ...

gmm聚类python_GMM-实现聚类的代码示例相关推荐

  1. 机器学习之密度聚类及代码示例

    一.密度聚类 密度聚类的思想,在于通过计算样本点的密度的大小来实现一个簇/类别的形成,样本点密度越大,越容易形成一个类,从而实现聚类. 密度聚类算法可以克服基于距离的聚类算法只能发现凸型集合的缺点,其 ...

  2. 【进阶版】 机器学习之K均值聚类、层次聚类、密度聚类、实战项目含代码(15)

    目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 项目要求 数据透视 代码实战 维度太多,利用PCA降维的思想进 ...

  3. 谱聚类算法详解及代码实现

    谱聚类算法详解及代码实现 文章目录 谱聚类算法详解及代码实现 参考 关于谱聚类介绍 谱聚类概述 谱聚类前置知识 无向权重图 邻接矩阵 度矩阵 拉普拉斯矩阵 相似度矩阵 确定目标函数 初始化目标函数(最 ...

  4. 视频教程-机器学习之聚类、主成分分析理论与代码实践-机器学习

    机器学习之聚类.主成分分析理论与代码实践 干过开发,做到资深Java软件开发工程师,后做过培训,总共培训近千人.目前在高校工作,博士学位.主要研究领域为机器学习与深度学习. 纪佳琪 ¥68.00 立即 ...

  5. 关于聚类问题的算法python代码实现-K-均值聚类方法

    聚类含义 定义:聚类,也叫做聚类分析,依据对象的属性,将相似的对象归位一类.聚类,就是寻找发生数据之间内在联系的方法. 分类:从聚类的类型来讲,一般有结构性聚类.分散性聚类.密度聚类等. 结构性聚类是 ...

  6. python args keargs_Python metrics.silhouette_score方法代码示例

    本文整理汇总了Python中sklearn.metrics.silhouette_score方法的典型用法代码示例.如果您正苦于以下问题:Python metrics.silhouette_score ...

  7. python音频聚类_Python实现聚类算法AP

    1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...

  8. python求扇形面积_Python随机生成均匀分布在单位圆内的点代码示例

    Python有一随机函数可以产生[0,1)区间内的随机数,但是如果我们想生成随机分布在单位圆上的,那么我们可以首先生成随机分布在单位圆边上的点,然后随机调整每个点距离原点的距离,但是我们发现这个距离不 ...

  9. 聚类之层次聚类、基于划分的聚类(…

    5.聚类之层次聚类.基于划分的聚类(k-means).基于密度的聚类.基于模型的聚类 目录(?)[-] 1.      一层次聚类 1.      层次聚类的原理及分类 2.      层次聚类的流程 ...

最新文章

  1. 互联网1分钟 | 0124 抖音社交产品“多闪”登顶苹果商店总排行榜;王欣或将推出新社交产品丸子视频...
  2. 微信开发 网页授权获取用户基本信息
  3. UOJ #150 【NOIP2015】 运输计划
  4. cmake添加查找目录_CMakeLists.txt文件写法(7):添加查找头文件的路径
  5. 345取出值怎么算角度_资料分析怎么提分?这几个公式你必须会!
  6. 如何最快速的找到页面某一元素所绑定的点击事件,并查看js代码
  7. 上海译文公布2019年“新书目录” 名家名译作品结集出版
  8. android迷你世界助手52,迷你世界助手盒子刷迷你币
  9. Linux C/C++内存映射
  10. FZU 2037 Maximum Value Problem【递推】
  11. ImageJ的单细胞荧光强度分析
  12. 苹果开发者账号绑定设备已满
  13. 离职和就职的原因(一)
  14. 调度失败:执行器地址为空
  15. 电台app开发,发掘声音经济
  16. c 语言 int 转字符串,C++ 字符串string和整数int的互相转化操作
  17. 577. Employee Bonus
  18. “全球IT业最具影响力100人”名单
  19. 微信小程序之model弹框
  20. 地球物理:大地测量学综述001

热门文章

  1. u盘中毒文件为html文档,u盘中毒文件被隐藏怎么办【解决方法】
  2. 【沧海拾昧】微机原理:存储器系统
  3. 【C++ Primer Plus】第6章 分支语句和逻辑运算符
  4. JS+asp.net在线裁剪图片源码
  5. 调用Windows api 窗口截图
  6. iOS 调整图片尺寸和大小的两个方法
  7. Ubuntu安装拼音输入法
  8. 2020年主流服务器主板,电脑主板怎么选(2020电脑主板选购指南及检测)
  9. Could not build wheels for cryptography which use PEP 517 and cannot be installed directly
  10. 猿创征文|Android 11.0 12.0Launcher3中app列表页的app名称分两行显示