• https://github.com/Sean16SYSU/MachineLearningImplement

简述

高斯混合模型,就是说用多个高斯函数去描述不同的元素分布。
通过EM方法来迭代生成不同的高斯模型的各个参数。

具体的EM算法的理论网上很多,但推荐各位先看完这个算法思路之后,再去看理论推导就更加好了。

更新方法

  • μi′=∑j=1mηji∗xj∑j=1mηji\mu_i^{'} = \frac{\sum_{j=1}^m{\eta_{ji} * x_j}}{\sum_{j=1}^m{\eta_{ji}}}μi′​=∑j=1m​ηji​∑j=1m​ηji​∗xj​​
  • Σi′=∑j=1mηji∗(xj−μi′)∗(xj−μi′)T∑j=1mηji\Sigma_i^{'} = \frac{\sum_{j=1}^m{\eta_{ji} * (x_j - \mu_i^{'}) * (x_j - \mu_i^{'})^T}}{\sum_{j=1}^m{\eta_{ji}}}Σi′​=∑j=1m​ηji​∑j=1m​ηji​∗(xj​−μi′​)∗(xj​−μi′​)T​
  • αi′=∑j=1mηjim\alpha_i^{'} = \frac{\sum_{j=1}^m{\eta_{ji}}}{m}αi′​=m∑j=1m​ηji​​
  1. m是点数量
  2. ηij=P(zj=i∣xj)\eta_{ij}=P(z_j=i|x_j)ηij​=P(zj​=i∣xj​) 这个概率就是在第iii个高斯模型下样本xjx_jxj​的概率

通过这样不断地迭代,最后,用这个ηij\eta_{ij}ηij​来计算最后的聚类结果
即,对于每一个样本,属于概率最高的高斯分布的所对应的高斯分布。

Python实现

  • 导入数据
from sklearn import datasets
import numpy as np
import matplotlib.pyplot as pltiris = datasets.load_iris()
  • 算法实现
from scipy import statsdef GMMs(X, k=3, steps=10):def p(x, mu, sigma):n = len(x)div = (2 * np.pi) ** (n / 2) * (abs(np.linalg.det(sigma)) ** 0.5)expOn = -0.5 * ( np.dot( (x - mu).T,  np.dot(np.linalg.inv(sigma), (x - mu)) ) )      return np.exp(expOn) / divdef init(X):_, n = X.shapereturn np.random.rand(k, n), 2 * np.random.rand(k, n, n) + 1, np.random.rand(k)# k个Gausssian distributionmus, sigmas, alphas = init(X)# EM algorithm# E-stepmat = np.zeros((len(X), k))for times in range(steps):for j, x in enumerate(X):temp, tempP = 0, 0for i in range(k):tempP = p(x, mus[i], sigmas[i])temp += tempPmat[j][i] = alphas[i] * tempPmat[j] /= tempfor i in range(k):# updata musmus[i] = np.dot(mat[:, i].T, X) / sum(mat[:, i])# update sigmastemp = np.zeros(sigmas[0].shape)for j in range(len(X)):data = (X[j] - mus[i]).reshape(4, 1)temp += mat[j][i] * np.dot(data, data.T)temp /= sum(mat[:, i])sigmas[i] = tempalphas[i] = sum(mat[:, i]) / len(X)# clusteringAns = np.zeros(len(X))for j, x in enumerate(X):temp, tempP = 0, 0for i in range(k):tempP = p(x, mus[i], sigmas[i])temp += tempPmat[j][i] = alphas[i] * tempPmat[j] /= tempAns[j] = np.argmax(mat[j])return Ans
test_y = GMMs(iris.data, steps=20)
  • 画图
from sklearn.decomposition import PCA
​
X_reduced = PCA(n_components=2).fit_transform(iris.data)
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=test_y, cmap=plt.cm.Set1)

  • 评估
def evaluate(y, t):a, b, c, d = [0 for i in range(4)]for i in range(len(y)):for j in range(i+1, len(y)):if y[i] == y[j] and t[i] == t[j]:a += 1elif y[i] == y[j] and t[i] != t[j]:b += 1elif y[i] != y[j] and t[i] == t[j]:c += 1elif y[i] != y[j] and t[i] != t[j]:d += 1return a, b, c, ddef external_index(a, b, c, d, m):JC = a / (a + b + c)FMI = np.sqrt(a**2 / ((a + b) * (a + c)))RI = 2 * ( a + d ) / ( m * (m + 1) )return JC, FMI, RIdef evaluate_it(y, t):a, b, c, d = evaluate(y, t)return external_index(a, b, c, d, len(y))
Index value
JC 0.8187638512681605
FMI 0.9003627122239571
RI 0.921766004415011

高斯混合模型GMM理论和Python实现相关推荐

  1. 一维(多维)高斯模型(One(Multi)-dimensional Gaussian Model) 高斯混合模型GMM(Gaussian Mixture Model)

    一维高斯模型(One-dimensional Gaussian Model) 若随机变量X服从一个数学期望为,标准方差为的高斯分布,记为: x~N(,). 则概率密度函数为: 高斯分布的期望值决定了其 ...

  2. 高斯混合模型GMM、核心参数、高斯混合模型GMM的数学形式

    高斯混合模型GMM.核心参数.高斯混合模型GMM的数学形式 高斯混合模型GMM 混合模型是一个可以用来表示在总体分布(distribution)中含有 K 个子分布的概率模型,换句话说,混合模型表示了 ...

  3. 高斯混合模型--GMM(Gaussian Mixture Model)

    参考:http://blog.sina.com.cn/s/blog_54d460e40101ec00.html 概率指事件随机发生的机率,对于均匀分布函数,概率密度等于一段区间(事件的取值范围)的概率 ...

  4. 高斯混合模型--GMM

    原文:http://blog.sina.com.cn/s/blog_54d460e40101ec00.html   高斯混合模型--GMM(Gaussian Mixture Model)     统计 ...

  5. 单高斯分布模型GSM,高斯混合模型GMM

    本文就高斯混合模型(GMM,Gaussian Mixture Model)参数如何确立这个问题,详细讲解期望最大化(EM,Expectation Maximization)算法的实施过程. 单高斯分布 ...

  6. EM算法应用:k均值聚类(k-means)和高斯混合模型(GMM)

    文章目录 k-means聚类 EM角度的理解 算法流程 特点 k值选择 局限性 高斯混合模型 GMM的问题描述 1,明确隐变量 2.EM算法的E步:确定Q函数 3. EM算法的E步 4. 停止条件 上 ...

  7. 高斯混合模型GMM的理解

    高斯混合模型(Gaussian Mixture Model,简称GMM)是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型.通俗点 ...

  8. 混合高斯模型_大数据小白入门高斯混合模型(GMM)聚类算法

    导读 高斯混合模型(Gaussian Mixture Model)通常简称GMM,是一种业界广泛使用的聚类算法,属于生成式模型,它假设所有的数据样本都是由某一个给定参数的 多元高斯分布 所生成的.从中 ...

  9. 使用高斯混合模型(GMM)近似未知分布:EM算法的应用

    该篇博客是对邱锡鹏老师<神经网络与深度学习>的学习笔记.在阅读本博文之前,建议读者先阅读上一篇博客EM算法. 高斯混合模型(Gaussian Mixture Model) 如果一个连续随机 ...

最新文章

  1. CurcveLane-NAS:华为中大提出一种结合NAS的曲线车道检测算法
  2. 钉钉服务器端SDK PHP版
  3. Python基础—06-函数基础
  4. 教育大数据隐私保护机制与技术研究
  5. MFC——在状态栏中显示滚动字幕
  6. wrapper php,PHP流Streams、包装器wrapper概念与用法实例详解
  7. P3146 [USACO16OPEN]248 P3147 [USACO16OPEN]262144
  8. ZAB协议(ZooKeeper Atomic Broadcast)入门
  9. java高并发 pdf_Java高并发编程详解 PDF 下载
  10. javaMail实现邮件发送
  11. 脱硫系统中的烟气挡板门选电动型、气动型?还是电动液压型?快别纠结了……
  12. 关于tomcat项目中poi报错出现的问题
  13. ubuntu 选择独立显卡或则intelcpu内集成显卡
  14. 来来来,咱们聊一下 JWT。安全验证的知识 两篇文章就够了
  15. CVPR2021/邻域自适应/图像翻译-DRANet: Disentangling Representation and Adaptation Networks
  16. POJ 1015 陪审团问题
  17. HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
  18. (项目)在线教育平台(十三)
  19. 程序员为什么要写技术博客?都在哪些平台呢?
  20. CSC系统--Chrome浏览器登陆方法

热门文章

  1. 基于IMX515EVK+WINCE6.0---支持PB6.0通过USB下载镜像文件
  2. 驰骋工作流引擎设计系列10时效考核规则设计
  3. 查看IE浏览器安装的插件
  4. shell 练习题01:列出使用最多的命令是哪些并且将这些命令输入到chy1.txt中
  5. linux 命令 —-— vi编辑器
  6. GNU make manual 翻译(六十一)
  7. Sumif——可以用来发函证和进行重分类
  8. suse linux 光纤卡重置,SUSE Linux下查看光纤卡号和操作系统的版本
  9. Pandas中DataFrame的属性及方法大全
  10. 高数第七版_习题解答_3-1行列式习题