上一篇文章学习了极大似然估计和EM算法,这一章节就是学习EM算法的具体应用场景,高斯混合模型,是一中聚类的算法。

一:高斯混合模型(GMM)

我们将一个分布复杂的数据分布,用多个高斯概率分布来共同表示,如上图,一维数据下,红色的线条,用了三个高斯分布来表示了。红色线条可以看成是数据分布的密度分布,三个波峰,数据分布的密度相对较大。

再举个例子,我们那堆西瓜,如果我们不考虑类别,就可以直接全部看成是一个类别的,用分布密度曲线统计出,在体积区间范围内的西瓜个数密度,得到了一个概率密度曲线Y,但是实际上,我们西瓜是来自是那三个地方的,也就是三个类别的,因此概率密度曲线其实是三个概率分布共同组成的,如果每个类别的西瓜都是服从于高斯分布,那么概率密度曲线Y就是有三个高斯分布组成而成,这个就叫做高斯混合模型。

用到的算法也就是上述学习到的EM算法,通过给定类别个数,还有预设值的高斯模型,进行反复迭代更新求值,最终得到最优化的各个类别的模型参数。

所以高斯混合模型也是一个聚类的算法,通过自动学习出各个高斯模型的分布来对数据进行聚类。

二:实例运行

代码实例使用的是sklearn官网的例子,主要是看看该库函数额使用。

import itertoolsimport numpy as np
from scipy import linalg
import matplotlib.pyplot as plt
import matplotlib as mplfrom sklearn import mixturecolor_iter = itertools.cycle(['navy', 'c', 'cornflowerblue', 'gold','darkorange'])def plot_results(X, Y_, means, covariances, index, title):splot = plt.subplot(2, 1, 1 + index)for i, (mean, covar, color) in enumerate(zip(means, covariances, color_iter)):v, w = linalg.eigh(covar)v = 2. * np.sqrt(2.) * np.sqrt(v)u = w[0] / linalg.norm(w[0])# as the DP will not use every component it has access to# unless it needs it, we shouldn't plot the redundant# components.if not np.any(Y_ == i):continueplt.scatter(X[Y_ == i, 0], X[Y_ == i, 1], .8, color=color)# Plot an ellipse to show the Gaussian componentangle = np.arctan(u[1] / u[0])angle = 180. * angle / np.pi  # convert to degreesell = mpl.patches.Ellipse(mean, v[0], v[1], 180. + angle, color=color)ell.set_clip_box(splot.bbox)ell.set_alpha(0.5)splot.add_artist(ell)plt.xlim(-9., 5.)plt.ylim(-3., 6.)plt.xticks(())plt.yticks(())plt.title(title)# Number of samples per component
n_samples = 500# Generate random sample, two components
np.random.seed(0)
C = np.array([[0., -0.1], [1.7, .4]])
X = np.r_[np.dot(np.random.randn(n_samples, 2), C),.7 * np.random.randn(n_samples, 2) + np.array([-6, 3])]# Fit a Gaussian mixture with EM using five components
gmm = mixture.GaussianMixture(n_components=5, covariance_type='full').fit(X)
plot_results(X, gmm.predict(X), gmm.means_, gmm.covariances_, 0,'Gaussian Mixture')# Fit a Dirichlet process Gaussian mixture using five components
dpgmm = mixture.BayesianGaussianMixture(n_components=5,covariance_type='full').fit(X)
plot_results(X, dpgmm.predict(X), dpgmm.means_, dpgmm.covariances_, 1,'Bayesian Gaussian Mixture with a Dirichlet process prior')plt.show()

我们能看到一些随机样本点,能够按照高斯分布模型被分为不同的类别,不同的的类别是不同的颜色。

每天进步一点点《ML - 高斯混合模型》相关推荐

  1. 每天进步一点点《ML - 感知机》

    一些前提的约定,还是沿用上篇文章的哈.先来致敬下男神. 一:感知机 感知机是一种线性二分类模型,其目的是找到能将训练数据线性可分的分离超平面.超平面线性模型为 联想起之前学到逻辑斯特回归的决策边界,Z ...

  2. 感知机介绍及MATLAB实现

    文章目录 前言 1 感知机简介 2 感知机结构 3 感知机学习过程 3.1 数据传播过程 3.2 参数更新过程 4 代码实现 4.1 准备数据 4.2 感知机训练学习 4.3 感知机仿真测试 总结 2 ...

  3. 每天进步一点点《ML - 线性回归》

    本系列Machine Learning 的学习博文很大部分全是受教于 Andrew Ng 的Stanford录制的ML视频,我的男神. 致敬男神! 第一次写这样系列的博文,单纯是为了记录自己的所学,做 ...

  4. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,多层感知机模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

  5. 每天进步一点点《ML - 支持向量机》

    一些前提的约定,还是沿用上篇文章的哈.先来致敬下男神. 一:支持向量机(support vector machine) 在感知机那一章节我们讲了,对样本的分类过程中,可以用维度空间内的某个超平面划分开 ...

  6. 每天进步一点点《ML - 正则化代价函数》

    本系列Machine Learning 的学习博文很大部分全是受教于 Andrew Ng 的Stanford录制的ML视频,我的男神. 一:欠拟合(Under fitting)与过拟合(Over fi ...

  7. 每天进步一点点《ML - 从极大似然到EM算法》

    一:极大似然 1:概念引入 极大似然参数估计是概率论中学习过的内容,就是预先定义概率分布模型,根据一堆的同概率分布的一堆样本数据去估计该概率模型中的未知参数. 举个例子:有很多西瓜x,我们可以得到每一 ...

  8. 每天进步一点点《ML - Sklearn库简单学习》

    一:Sklearn介绍 Sklearn是一个强大的机器学习库,基于python的.官方文档(http://scikit-learn.org/stable/ ).如下列举部分的使用场景. 由图中,可以看 ...

  9. 每天进步一点点《ML - 异常点检测》

    一些前提的约定,还是沿用上篇文章的哈.先来致敬下男神. 一:异常点检查(Anomaly Detection) 这一章节相对来说简单很多,也可以说是很大程度是概率论的知识内容了. 异常点,和大部分正常状 ...

最新文章

  1. Caffe源码中io文件分析
  2. No module named ‘jieba‘ python3.7
  3. 十年技术,不要再迷茫
  4. java多线程系列(四)---ReentrantLock的使用
  5. 启明云端分享| ESP32-S2直驱USB摄像头
  6. 机器学习理论《统计学习方法》学习笔记:第九章 EM算法及其推广
  7. 后缀数组--可重叠的K次最长重复子串(POJ3261)
  8. 《中文分词算法研究》
  9. 服务器硬盘检测系统,服务器RAID硬盘与日志主要检测方法
  10. Detours库配置记录
  11. C语言 计算字符串长度的几种方法
  12. 学习能力篇:“拼图式”学习法
  13. kubectl源码分析之rollout undo
  14. Katalon Recorder简介与使用
  15. 程序员眼中的中国传统文化-王阳明《传习录》18
  16. java 两集合根据某字段 过滤掉相同的数据 , 集合整合数据
  17. Android消息传递机制总结
  18. 2019最新《Android开发全套学习教程》
  19. 使用linux sort给一个文件里的内容按规则排序
  20. spit()字符串分割

热门文章

  1. 016医疗项目 数据字典(概念和在本系统中的应用)
  2. android聊天,存储聊天记录sqlite
  3. Android Logcat 报错:Could not create the view: For input string:
  4. 如何跳过或去除“非正版Windows系统“信息
  5. ZooKeeper Internals -- ZooKeeper内部工作方式
  6. gitee图床不能用了,心态崩了
  7. 一些黑科技接口钩子 钉钉,禅道,gitlab,jenkins等
  8. 您应该知道的ES2020中的10个JavaScript新功能
  9. javascript 图表_我如何使用JavaScript数据透视表和图表库分析开发人员趋势
  10. 数据库代码编写_如何将您的职业转变为数据科学-即使您今天不编写代码。