EM算法与高斯混合聚类:理解与实践

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
请添加图片描述

文章目录

  • 🍋引言
  • 🍋什么是EM算法?
    • 🍋EM算法的基本原理
    • 🍋EM算法的应用领域
  • 🍋高斯混合模型(GMM)简介
    • 🍋GMM模型的定义
    • 🍋GMM在聚类中的作用
  • 🍋EM算法与高斯混合聚类的结合
    • 🍋如何用EM算法训练GMM
    • 🍋GMM在聚类中的实际应用
  • 🍋Python实现EM算法与高斯混合聚类
    • 🍋导入必要的库
    • 🍋生成模拟数据
    • 🍋应用GMM进行聚类
    • 🍋可视化结果
    • 🍋完整源码
  • 🍋实践案例(Wine数据集)
  • 🍋总结
  • 🍋参考文献

🍋引言

在数据科学和机器学习中,聚类是重要的无监督学习任务。高斯混合模型(GMM)是一种常用的概率模型,用于描述数据的分布。在应用高斯混合模型时,EM(Expectation-Maximization)算法被广泛用于参数估计。本文将深入探讨EM算法的基本原理,并结合高斯混合模型,展示如何实现基于EM算法的聚类。

🍋什么是EM算法?

🍋EM算法的基本原理

EM算法是一种迭代算法,广泛用于估计含有隐变量(latent variables)的概率模型的参数。它主要由两步组成:

  • E步(期望步,Expectation step):根据当前模型的参数,计算隐变量的期望值。
  • M步(最大化步,Maximization step):根据E步的结果,最大化似然函数,更新模型的参数。

EM算法通过不断重复E步和M步,逐步逼近最大似然估计。

🍋EM算法的应用领域

EM算法不仅在高斯混合模型中有广泛应用,还在许多其他领域也有应用,例如:

  • 高斯混合模型(GMM)
  • 隐马尔可夫模型(HMM)
  • 聚类分析
  • 图像分割

🍋高斯混合模型(GMM)简介

🍋GMM模型的定义

高斯混合模型是一种假设数据点是由多个高斯分布成分组成的概率模型。每个高斯成分有自己的均值、方差和权重。GMM是通过EM算法来估计这些参数的。

GMM的概率密度函数可以表示为:

在这里插入图片描述

🍋GMM在聚类中的作用

在聚类问题中,GMM通过拟合多个高斯分布来表示不同的聚类中心,数据点的归属通过计算其属于各个高斯成分的概率来确定。与K-means算法相比,GMM可以捕捉数据的多模态特性,不仅仅是基于距离的硬分类,还能通过概率分配进行软分类。

🍋EM算法与高斯混合聚类的结合

🍋如何用EM算法训练GMM

使用EM算法训练高斯混合模型时,主要目标是最大化数据点在模型下的对数似然函数。每次迭代中,E步通过计算数据点属于每个高斯成分的概率,M步则更新模型参数,使得对数似然函数最大化。

具体步骤如下:

  • 初始化:初始化高斯成分的均值、协方差矩阵和权重。
  • E步:计算每个数据点属于每个高斯成分的概率,称为责任度(responsibility)。
  • M步:根据E步的结果,更新均值、协方差矩阵和权重。
  • 重复:重复E步和M步,直到对数似然函数收敛。

🍋GMM在聚类中的实际应用

GMM广泛应用于图像处理、文本分析、市场细分等领域。在聚类任务中,GMM可以帮助发现数据中的潜在模式,并且相比于传统的K-means算法,它能够更好地处理复杂的分布。

🍋Python实现EM算法与高斯混合聚类

🍋导入必要的库

import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
from sklearn.datasets import make_blobs

🍋生成模拟数据

我们使用make_blobs生成带有多个聚类的模拟数据:

# 生成模拟数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
plt.scatter(X[:, 0], X[:, 1], s=30)
plt.title("Generated Data")
plt.show()

🍋应用GMM进行聚类

我们使用GaussianMixture类来拟合GMM模型:

# 使用GMM进行聚类
gmm = GaussianMixture(n_components=4)
gmm.fit(X)
labels = gmm.predict(X)# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title("GMM Clustering Results")
plt.show()

🍋可视化结果

# 可视化每个聚类的高斯分布
ax = plt.gca()
ax.set_title("GMM Clustering with Gaussian Components")# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')# 绘制每个高斯分布的轮廓
for i in range(4):covariances = gmm.covariances_[i]mean = gmm.means_[i]v, w = np.linalg.eigh(covariances)v = 2.0 * np.sqrt(2.0) * np.sqrt(v)  # Elongate the axes by a factor of 2u = w[0] / np.linalg.norm(w[0])  # Normalize the eigenvectorangle = np.arctan(u[1] / u[0])  # Rotation angle# Plot ellipse for each Gaussian componentellipse = plt.matplotlib.patches.Ellipse(mean, v[0], v[1], 180.0 * angle / np.pi, color='red', alpha=0.4)ax.add_patch(ellipse)plt.show()

🍋完整源码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
from sklearn.datasets import make_blobs# 生成模拟数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 可视化生成的数据
plt.scatter(X[:, 0], X[:, 1], s=30)
plt.title("Generated Data")
plt.show()# 使用GMM进行聚类
gmm = GaussianMixture(n_components=4)
gmm.fit(X)
labels = gmm.predict(X)# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title("GMM Clustering Results")
plt.show()# 可视化每个聚类的高斯分布
ax = plt.gca()
ax.set_title("GMM Clustering with Gaussian Components")# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')# 绘制每个高斯分布的轮廓
for i in range(4):covariances = gmm.covariances_[i]mean = gmm.means_[i]v, w = np.linalg.eigh(covariances)v = 2.0 * np.sqrt(2.0) * np.sqrt(v)  # Elongate the axes by a factor of 2u = w[0] / np.linalg.norm(w[0])  # Normalize the eigenvectorangle = np.arctan(u[1] / u[0])  # Rotation angle# 修改部分:修正了 Ellipse 参数传递ellipse = plt.matplotlib.patches.Ellipse(mean, v[0], v[1], angle=angle * 180.0 / np.pi, color='red', alpha=0.4)ax.add_patch(ellipse)plt.show()

可视化:

  • 第一张图(生成的数据图)展示了数据的原始分布,帮助我们理解数据的聚类结构。
  • 第二张图(GMM聚类结果图)展示了使用 GMM 进行聚类的结果,表示数据点的分类情况。
  • 第三张图(每个聚类的高斯分布轮廓图)展示了每个聚类对应的高斯分布的轮廓,帮助我们更深入地理解 GMM 对数据的建模方式,展示了每个聚类的协方差结构。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

🍋实践案例(Wine数据集)

Wine 数据集概况
样本数:178
类别数:3
特征数:13

import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
from sklearn.datasets import load_wine
from sklearn.decomposition import PCA# 加载Wine数据集
wine = load_wine()
X = wine.data  # 特征数据
y = wine.target  # 标签(真实类别)# 使用PCA进行降维,便于在二维平面中可视化
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 使用GMM进行聚类
gmm = GaussianMixture(n_components=3, random_state=0)
gmm.fit(X_pca)
labels = gmm.predict(X_pca)# 1. 原始数据的分布图
plt.figure(figsize=(6, 6))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', s=50, edgecolor='k', alpha=0.7)
plt.title("Wine Dataset - Original Data Distribution")
plt.xlabel("PCA Component 1")
plt.ylabel("PCA Component 2")
plt.colorbar(label='True Labels')
plt.show()# 2. GMM 聚类结果图
plt.figure(figsize=(6, 6))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis', s=50, edgecolor='k', alpha=0.7)
plt.title("GMM Clustering Results")
plt.xlabel("PCA Component 1")
plt.ylabel("PCA Component 2")
plt.colorbar(label='Cluster Labels')
plt.show()# 3. GMM 每个聚类的高斯分布轮廓图
plt.figure(figsize=(6, 6))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis', s=50, edgecolor='k', alpha=0.7)
plt.title("GMM Clustering with Gaussian Components")# 绘制每个高斯成分的轮廓
ax = plt.gca()
for i in range(3):  # 有3个聚类mean = gmm.means_[i]cov = gmm.covariances_[i]v, w = np.linalg.eigh(cov)v = 2.0 * np.sqrt(2.0) * np.sqrt(v)  # Elongate the axes by a factor of 2u = w[0] / np.linalg.norm(w[0])  # Normalize the eigenvectorangle = np.arctan(u[1] / u[0])  # Rotation angle# 绘制椭圆ellipse = plt.matplotlib.patches.Ellipse(mean, v[0], v[1], angle=angle * 180.0 / np.pi, color='red', alpha=0.4)ax.add_patch(ellipse)plt.xlabel("PCA Component 1")
plt.ylabel("PCA Component 2")
plt.colorbar(label='Cluster Labels')
plt.show()
  • 原始数据分布图:展示了真实类别(酒的种类)的数据分布情况。
  • GMM 聚类结果图:展示了 GMM 聚类后数据的分配情况,聚类标签可能与真实标签不完全匹配,因为 GMM 是无监督学习方法。
  • 每个聚类的高斯分布轮廓图:展示了每个聚类的高斯分布模型的轮廓(通过椭圆表示),帮助理解 GMM 如何对数据建模。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍋总结

通过本文的介绍,我们了解了EM算法的基本原理,并结合高斯混合模型(GMM)展示了如何使用EM算法进行聚类。与传统的K-means聚类相比,GMM能够提供更精确的结果,尤其是在数据分布不规则或复杂时。随着算法的不断发展和优化,GMM在实际应用中将展现出更大的潜力。

🍋参考文献

【1】Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer.

  • 链接:https://www.papiro-bookstore.com/wp-content/uploads/2021/12/Pattern-Recognition-and-Machine-Learning.pdf
  • 书籍概述:这本书是由 Christopher M. Bishop 编写的,涵盖了模式识别和机器学习的许多基础概念。书中的内容包括了监督学习、无监督学习、图模型、神经网络、贝叶斯方法等。特别是在机器学习和模式识别的应用中,Bishop 的这本书被广泛引用,尤其适用于研究统计学和概率推理方法在模式识别中的应用。
  • 主要贡献:该书深入介绍了机器学习的理论基础和实际算法,尤其强调了统计模型和概率方法对模式识别问题的解决方案。
    【2】Murphy, K. P. (2012). Machine Learning: A Probabilistic Perspective. MIT Press.
  • 链接:https://books.google.com.sg/books?hl=zh-CN&lr=&id=RC43AgAAQBAJ&oi=fnd&pg=PR7&dq=Murphy,+K.+P.+(2012).+Machine+Learning:+A+Probabilistic+Perspective.+MIT+Press.&ots=univgzLvY4&sig=0QeEPELLTyhuc_Y1cHs6em6A29o&redir_esc=y#v=onepage&q=Murphy%2C%20K.%20P.%20(2012).%20Machine%20Learning%3A%20A%20Probabilistic%20Perspective.%20MIT%20Press.&f=false
  • 书籍概述:这本书由 Kevin P. Murphy 编写,是一本关于机器学习的经典教材,重点介绍了机器学习中的概率模型。书中内容不仅详细阐述了机器学习的基础算法,还深入讨论了各种基于概率的学习方法,如贝叶斯网络、隐马尔可夫模型、图模型等。它对概率推理和贝叶斯学习有深入的阐释。
  • 主要贡献:Murphy 的这本书通过严格的数学推导,帮助读者理解机器学习算法背后的概率基础,适合有一定统计学和数学基础的读者。
    【3】Dempster, A. P., Laird, N. M., & Rubin, D. B. (1977). Maximum likelihood from incomplete data via the EM algorithm. Journal of the Royal Statistical Society. Series B (Methodological), 39(1), 1-38.
  • 链接:https://rss.onlinelibrary.wiley.com/doi/abs/10.1111/j.2517-6161.1977.tb01600.x
  • 文章概述:这篇文章是 Dempster, Laird 和 Rubin 在 1977 年发表的,介绍了 EM算法(期望最大化算法,Expectation-Maximization Algorithm)。EM算法是一种用于估计包含隐变量的概率模型参数的统计方法,广泛应用于缺失数据的最大似然估计。EM算法的核心思想是通过交替执行期望步(E步)和最大化步(M步),逐步优化参数。
  • 主要贡献:EM算法为解决许多实际问题中的参数估计问题提供了强有力的工具,尤其是在存在缺失数据或隐变量的情况下。这篇论文奠定了 EM 算法在统计学和机器学习领域中的基础地位,是该领域的开创性工作。

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18310.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

悬浮窗,ViewPager2内嵌套RecyclerView,RecyclerView高度异常的问题分析

1 背景 在一个Adnroid项目中,使用到了悬浮窗,其中有一个需求是以分页的显示显示媒体item,每一页中展示的媒体item是一个网格列表的形式显示的。 原型图如下: 2 实现方案 上述需求实现分页采用ViewPager2,在xml中的…

wordpress使用相关

这里写目录标题 遇到的相关问题WordPress安装插件过程中遇到需要ftp出现确实XMLReader 插件的提示cURL Support Missing(curl 缺失) 遇到的相关问题 WordPress安装插件过程中遇到需要ftp 一般在这个位置 出现确实XMLReader 插件的提示 解决&#xff1a…

安卓手机root+magisk安装证书+抓取https请求

先讲一下有这篇文章的背景吧,在使用安卓手机fiddler抓包时,即使信任了证书,并且手机也安装了证书,但是还是无法捕获https请求的问题,最开始不知道原因,后来慢慢了解到现在有的app为了防止抓包,把…

本草云端:中药实验管理的云服务

3系统分析 3.1可行性分析 通过对本中药实验管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本中药实验管理系统采用SSM框架,JAVA作为开发语…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

【Mysql】Mysql函数(上)

1、概述 在Mysql中,为了提高代码重用性和隐藏实现细节,Mysql提供了很多函数。函数可以理解为封装好的模块代码。 2、分类 在Mysql中,函数非常多,主要可以分为以下几类: (1)聚合函数 &#xf…

[369]基于springboot的高校教师教研信息填报系统

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校教师教研信息填报系统信息管理难度大,容错…

【Linux】进程信号

文章目录 1. 信号2. 信号的产生2.1 键盘产生2.2 系统指令产生2.3 系统调用产生2.4 软件条件产生2.5 异常产生信号 3. 信号的保存3.1 信号其它概念3.2 信号操作函数 4. 信号的处理(捕捉)4.1 原理4.1.1 信号处理的流程(用户态与内核态)4.1.2 硬件中断4.1.3 时钟中断4.1.4 软中断4…

Python数据分析NumPy和pandas(三十四、数据透视表和交叉表)

数据透视表是电子表格程序和其他数据分析软件中常见的数据汇总工具。它按一个或多个键聚合数据表,一些组键沿行,一些组键沿列将数据排列在一个矩形中。我们使用 pandas 的 groupby 结合分层索引在Python 中实现数据透视表。DataFrame 有一个 pivot_table…

应用系统开发(10) 钢轨缺陷的检测系统

涡流检测系统框图 其中信号发生器为一定频率的正弦信号作为激励信号,这个激励信号同时输入给交流电桥中的两个检测线圈,将两个线圈输出的电压差值作为差分信号引出至差分放大电路进行放大,经过放大后信号变为低频的缺陷信号叠加在高频载波上…

Vanna使用ollama分析本地MySQL数据库 加入redis保存训练记录

相关代码 from vanna.base.base import VannaBase from vanna.chromadb import ChromaDB_VectorStore from vanna.ollama import Ollama import logging import os import requests import json import pandas as pd import chromadb import redis import pickle from IPython.…

基于Java Springboot校园疫情防控系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

《探索 Spring 核心容器:Bean 的奇妙世界》

一、Spring 核心容器与 Bean 的关系 Spring 核心容器是 Spring 框架的重要组成部分,负责管理和组织应用程序中的对象,而 Bean 则是构成应用程序主干并由 Spring IoC 容器管理的对象,二者紧密相连。 Spring 的核心容器由多个模块组成&#xf…

基于卷积神经网络的航空发动机剩余寿命预测Matlab实现

本文利用NASA提供的涡扇发动机退化数据集,进行数据预处理,构建训练样本和测试样本,然后搭建卷积神经网络(Convolutional Neural Network,CNN),学习训练数据,最后利用测试数据,分析神…

day02(单片机高级)单片机控制ESP8266连接阿里云

目录 单片机控制ESP8266连接阿里云物联平台 MQTT协议简介 订阅和发布 cJSON简介 云平台搭建 注册和登录 实例的开通和创建 产品和设备的创建 创建产品 添加设备 功能定义 发布上线 MQTTFX工具使用 发布和订阅 订阅 发布 MQTT固件烧录 AT指令验证 调试验证订阅 单片机控制ESP826…

社交电商的优势及其与 AI 智能名片小程序、S2B2C 商城系统的融合发展

摘要:本文深入分析了社交电商相较于传统电商的优势,包括门槛低、易操作、更生活化和可团队化运作等特点。同时,探讨了 AI 智能名片小程序和 S2B2C 商城系统在社交电商发展中的作用,以及它们与社交电商融合所带来的新机遇和发展前景…

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…

Jmeter的后置处理器(二)

5--JSR223 PostProcessor 功能特点 自定义后处理逻辑&#xff1a;使用脚本语言编写自定义的后处理逻辑。支持多种脚本语言&#xff1a;支持 Groovy、JavaScript、BeanShell 等脚本语言。动态参数传递&#xff1a;将提取的数据存储为变量&#xff0c;供后续请求使用。灵活性高…

基于SpringBoot3+mybatis搭建的历史上的今天API接口服务 及 Mybatis 应该有个更好的方法来隐藏 Pojo 类中的字段

一、Mybatis有没有比较好的方法隐藏 Pojo 类中的字段 使用 Mybatis 时&#xff0c;为了实现通用的CURD&#xff0c;在定义实体类pojo时&#xff0c;会尽量将能用得上的数据库字段都定义到 pojo中&#xff0c;但是在查询的时候却有不一样的需求。mybatis的文档地址链接&#xff…

SLAM-evo 评估

文章目录 1.evo介绍1.1.evo安装1.1.2.evo的安装(evo共有两种安装方式)1.1.2.1.采用pip安装&#xff0c;直接安装最新的稳定发行版&#xff08;在翻墙的情况下可以使用&#xff09;将路径添加到系统 PATH 中1.1.2.2.源码安装 &#xff0c;下载源码进行安装&#xff08;必须翻墙&…