高斯混合模型Gaussian Mixture Model (GMM)——通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布
从几何上讲,单高斯分布模型在二维空间应该近似于椭圆,在三维空间上近似于椭球。遗憾的是在很多分类问题中,属于同一类别的样本点并不满足“椭圆”分布的特性。这就引入了高斯混合模型。——可以认为是基本假设!
高斯混合模型Gaussian Mixture Model (GMM)
摘自:http://www.infocool.net/kb/Spark/201609/193351.html
由于本文写的不g够完整详细,给出一个学习链接:
http://www.cnblogs.com/CBDoctor/archive/2011/11/06/2236286.html
混合模型:通过密度函数的线性合并来表示未知模型 p(x)
为什么提出混合模型,那是因为单一模型与实际数据的分布严重不符,但是几个模型混合以后却能很好的描述和预测数据。
高斯混合模型(GMM),说的是把数据可以看作是从数个高斯分布中生成出来的。虽然我们可以用不同的分布来随意地构造 XX Mixture Model ,但是 GMM是最为流行。另外,Mixture Model 本身其实也是可以变得任意复杂的,通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布。
二维情况下高斯分布模拟产生数据的分布是椭圆,如下图:
显然对于下面图(a),单一的高斯概率分布函数无法表达,仔细看近似包含三个椭圆,所以可以将三个高斯概率分布函数线性组合起来,各个函数有不同的参数和权重,这样就能很好的描述所有出现的这些样本了。这大概是高斯混合模型可以用于分类的精髓所在吧?图(b)已经明确了样本分类。
求解方法为最大似然参数估计方法,EM优化算法,我将在《Spark2.0机器学习系列之8-2:…》中详细介绍。
大家可能会想到,上图(a)中的数据分布太具有实验性质了,实际中那有这样的数据,但GMM牛逼的地方就在于通过增加 Model 的个数(也就是组成成分的数量K,其实就是我们的分类个数),可以任意地逼近任何连续的概率密分布。所以呢,理论上是绝对支持的,而实际上呢,对于多维特征数据我们往往难以可视化,所以难把握的地方也就在这里,如何选取K 值?换句化说聚类(无监督分类)拿什么标准如何评估模型的好坏?因为如果对结果有好评价指标的话,那么我们就可以实验不同的K,选出最优的那个K就好了,到底有没有呢?
这个话题又比较长,有人认为聚类的评估一定要做预先标注,没有Index总是让人觉得不靠谱,不是很让人信服。但是也有不同学者提出了大量的评估方法,主要是考虑到不同聚类算法的目标函数相差很大,有些是基于距离的,比如k-means,有些是假设先验分布的,比如GMM,LDA,有些是带有图聚类和谱分析性质的,比如谱聚类,还有些是基于密度的,所以难以拿出一个统一的评估方法,但是正是有这么些个原理上的不同,记着不与算法本身的原理因果颠倒的情况下,那么针对各类方法还是可以提出有针对性的评价指标的,如k-means的均方根误差。其实更应该嵌入到问题中进行评价,很多实际问题中,聚类仅仅是其中的一步,可以对比不聚类的情形(比如人为分割、随机分割数据集等等),所以这时候我们评价『聚类结果好坏』,其实是在评价『聚类是否能对最终结果有好的影响』。(本部分来综合了知乎上的部分问答:如有不妥之处,敬请告知。http://www.zhihu.com/question/19635522)
关于聚类的评估问题,我计划再写另外一篇文章《Spark聚类结果评估浅析》,不知道能否写好。
CSDN上还有文章可参考: 聚类算法初探(七)聚类分析的效果评测 http://blog.infocool.net/itplus/article/details/10322361
//训练模型
val gmm=new GaussianMixture().setK(2).setMaxIter(100).setSeed(1L)
val model=gmm.fit(dataset)
//输出model参数
for(i<-0 until model.getK){
println("weight=%f\nmu=%s\nsigma=\n%s\n" format(model.weights(i), model.gaussians(i).mean, model.gaussians(i).cov))
//weight是各组成成分的权重
//nsigma是样本协方差矩阵
//mu(mean)是各类质点位置
高斯混合模型Gaussian Mixture Model (GMM)——通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布的更多相关文章
- 高斯混合模型Gaussian Mixture Model (GMM)
混合高斯模型GMM是指对样本的概率密度分布进行估计,而估计采用的模型(训练模型)是几个高斯模型的加权和(具体是几个要在模型训练前建立好).每个高斯模型就代表了一个类(一个Cluster).对样本中的数 ...
- [zz] 混合高斯模型 Gaussian Mixture Model
聚类(1)——混合高斯模型 Gaussian Mixture Model http://blog.csdn.net/jwh_bupt/article/details/7663885 聚类系列: 聚类( ...
- 聚类之高斯混合模型(Gaussian Mixture Model)【转】
k-means应该是原来级别的聚类方法了,这整理下一个使用后验概率准确评测其精度的方法—高斯混合模型. 我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussia ...
- Spark2.0机器学习系列之10: 聚类(高斯混合模型 GMM)
在Spark2.0版本中(不是基于RDD API的MLlib),共有四种聚类方法: (1)K-means (2)Latent Dirichlet allocation (LDA) ...
- 漫谈 Clustering (3): Gaussian Mixture Model
上一次我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussian Mixture Model (GMM).事实上,GMM 和 k-means 很像,不过 GMM ...
- Gaussian Mixture Model
Gaussian Mixture Model (GMM).事实上,GMM 和 k-means 很像,不过 GMM 是学习出一些概率密度函数来(所以 GMM 除了用在 clustering 上之外,还经 ...
- 斯坦福大学机器学习,EM算法求解高斯混合模型
斯坦福大学机器学习,EM算法求解高斯混合模型.一种高斯混合模型算法的改进方法---将聚类算法与传统高斯混合模型结合起来的建模方法, 并同时提出的运用距离加权的矢量量化方法获取初始值,并采用衡量相似度的 ...
- 高斯混合模型GMM与EM算法的Python实现
GMM与EM算法的Python实现 高斯混合模型(GMM)是一种常用的聚类模型,通常我们利用最大期望算法(EM)对高斯混合模型中的参数进行估计. 1. 高斯混合模型(Gaussian Mixture ...
- 混合高斯模型(Gaussian mixture model, GMM)
1. 前言 这就是为什么我要学习一下二维高斯分布的原因: 总感觉数学知识不够用呐,顺带把混合高斯模型也回顾一下. 2. 单高斯模型(Gaussian single model, GSM) 2.1 一维 ...
随机推荐
- 关于HTTPS通信机制的笔记
一次安全可靠的通信--HTTPS原理 转自:腾讯开放社区raphealguo文章
- seo在前端网页制作的应用
学习了慕客网上的“SEO在网页制作中的应用‘’,下面来进行小小的学习总结,顺便梳理下知识.所谓学而不思则罔思而不学则殆.下面开始正文. 一.搜索引擎的工作原理 搜索引擎的基本工作原理包括如下三个过程: ...
- 非阻塞方式connect编程
参考博客: ①setsockopt()函数使用详解:http://blog.csdn.net/tody_guo/article/details/5972588 ②setsockopt :SO_LING ...
- MySQL结构相关
MySQL 由以下几部分组成: 1.Connectors指的是不同语言中与SQL的交互 2.Management Serveices & Utilities: 系统管理和控制工具 3.Conn ...
- vue组件之间互相传值:父传子,子传父
今看到一篇很不错的vue组件传值文章,便于理解,遂做笔记- 一般页面的视图App.vue应为这样 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.v ...
- [Intermediate Algorithm] - Smallest Common Multiple
题目 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小 ...
- (转)RabbitMQ学习之spring整合发送异步消息(注解实现)
http://blog.csdn.net/zhu_tianwei/article/details/40919249 实现使用Exchange类型为DirectExchange. routingkey的 ...
- RxSwift源码与模式分析一:基本类
封装.变换与处理 // Represents a push style sequence. public protocol ObservableType : ObservableConvertible ...
- forEach 列出数组的每个元素:
数组.forEach便利所有的元素 array.forEach(function(currentValue, index, arr), thisValue) function(currentValue ...
- bzoj4282 慎二的随机数列 树状数组求LIS + 构造
首先,我们不难发现N个位置都选一定不会比少选任意几个差,所以我们就先设定我们将这N个修改机会都用上, 那么如果点 i">ii 前有sumv">sumvsumv个可修改点 ...