高斯混合模型GMM理论和Python实现
- 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
- m是点数量
- η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实现相关推荐
- 一维(多维)高斯模型(One(Multi)-dimensional Gaussian Model) 高斯混合模型GMM(Gaussian Mixture Model)
一维高斯模型(One-dimensional Gaussian Model) 若随机变量X服从一个数学期望为,标准方差为的高斯分布,记为: x~N(,). 则概率密度函数为: 高斯分布的期望值决定了其 ...
- 高斯混合模型GMM、核心参数、高斯混合模型GMM的数学形式
高斯混合模型GMM.核心参数.高斯混合模型GMM的数学形式 高斯混合模型GMM 混合模型是一个可以用来表示在总体分布(distribution)中含有 K 个子分布的概率模型,换句话说,混合模型表示了 ...
- 高斯混合模型--GMM(Gaussian Mixture Model)
参考:http://blog.sina.com.cn/s/blog_54d460e40101ec00.html 概率指事件随机发生的机率,对于均匀分布函数,概率密度等于一段区间(事件的取值范围)的概率 ...
- 高斯混合模型--GMM
原文:http://blog.sina.com.cn/s/blog_54d460e40101ec00.html 高斯混合模型--GMM(Gaussian Mixture Model) 统计 ...
- 单高斯分布模型GSM,高斯混合模型GMM
本文就高斯混合模型(GMM,Gaussian Mixture Model)参数如何确立这个问题,详细讲解期望最大化(EM,Expectation Maximization)算法的实施过程. 单高斯分布 ...
- EM算法应用:k均值聚类(k-means)和高斯混合模型(GMM)
文章目录 k-means聚类 EM角度的理解 算法流程 特点 k值选择 局限性 高斯混合模型 GMM的问题描述 1,明确隐变量 2.EM算法的E步:确定Q函数 3. EM算法的E步 4. 停止条件 上 ...
- 高斯混合模型GMM的理解
高斯混合模型(Gaussian Mixture Model,简称GMM)是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型.通俗点 ...
- 混合高斯模型_大数据小白入门高斯混合模型(GMM)聚类算法
导读 高斯混合模型(Gaussian Mixture Model)通常简称GMM,是一种业界广泛使用的聚类算法,属于生成式模型,它假设所有的数据样本都是由某一个给定参数的 多元高斯分布 所生成的.从中 ...
- 使用高斯混合模型(GMM)近似未知分布:EM算法的应用
该篇博客是对邱锡鹏老师<神经网络与深度学习>的学习笔记.在阅读本博文之前,建议读者先阅读上一篇博客EM算法. 高斯混合模型(Gaussian Mixture Model) 如果一个连续随机 ...
最新文章
- CurcveLane-NAS:华为中大提出一种结合NAS的曲线车道检测算法
- 钉钉服务器端SDK PHP版
- Python基础—06-函数基础
- 教育大数据隐私保护机制与技术研究
- MFC——在状态栏中显示滚动字幕
- wrapper php,PHP流Streams、包装器wrapper概念与用法实例详解
- P3146 [USACO16OPEN]248 P3147 [USACO16OPEN]262144
- ZAB协议(ZooKeeper Atomic Broadcast)入门
- java高并发 pdf_Java高并发编程详解 PDF 下载
- javaMail实现邮件发送
- 脱硫系统中的烟气挡板门选电动型、气动型?还是电动液压型?快别纠结了……
- 关于tomcat项目中poi报错出现的问题
- ubuntu 选择独立显卡或则intelcpu内集成显卡
- 来来来,咱们聊一下 JWT。安全验证的知识 两篇文章就够了
- CVPR2021/邻域自适应/图像翻译-DRANet: Disentangling Representation and Adaptation Networks
- POJ 1015 陪审团问题
- HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
- (项目)在线教育平台(十三)
- 程序员为什么要写技术博客?都在哪些平台呢?
- CSC系统--Chrome浏览器登陆方法
热门文章
- 基于IMX515EVK+WINCE6.0---支持PB6.0通过USB下载镜像文件
- 驰骋工作流引擎设计系列10时效考核规则设计
- 查看IE浏览器安装的插件
- shell 练习题01:列出使用最多的命令是哪些并且将这些命令输入到chy1.txt中
- linux 命令 —-— vi编辑器
- GNU make manual 翻译(六十一)
- Sumif——可以用来发函证和进行重分类
- suse linux 光纤卡重置,SUSE Linux下查看光纤卡号和操作系统的版本
- Pandas中DataFrame的属性及方法大全
- 高数第七版_习题解答_3-1行列式习题