【机器学习】无监督学习算法之:高斯混合模型

高斯混合模型

  • 1、引言
  • 2、高斯混合模型
    • [2.1 定义](#2.1 定义)
    • [2.2 原理](#2.2 原理)
    • [2.3 实现方式](#2.3 实现方式)
    • [2.4 算法公式](#2.4 算法公式)
      • [2.4.1 概率密度函数](#2.4.1 概率密度函数)
      • [2.4.2 EM算法之E步骤](#2.4.2 EM算法之E步骤)
      • [2.4.2 EM算法之M步骤](#2.4.2 EM算法之M步骤)
    • [2.5 代码示例](#2.5 代码示例)
  • 3、总结

1、引言

小屌丝 :鱼哥,给俺讲一讲什么是高斯啊
小鱼 :高斯?

小屌丝 :不是这个高斯
小鱼 :不是这个高斯,那你等下,应该是这个。

小屌丝 :... 也不是这个啊~
小鱼 :这个还不是,那你再等下
小屌丝 :好的好的。
小鱼 :这次应该是对的。

小屌丝 :... 啊啊啊~~ 不对啊, 鱼哥,你...
小鱼 :咋了, 都三个形态了,还不对,那还有3个形态,你稍等。
小屌丝 : 我说的不是高斯奥特曼,
小鱼 :不是高斯奥特曼,那是赛罗奥特曼?欧布奥特曼?
小屌丝 :... 也不是的啊
小鱼 :难道你是说?
小屌丝 :嗯嗯嗯。
小鱼 : 不会真的是 贝利亚奥特曼...
小屌丝 : 啊啊啊~ ~ 鱼哥, 我说的不是奥特曼,是高斯混合模型
小鱼 :哦哦哦~ ~ 谁让你不把名称说全了, 这整的...
小屌丝 :鱼哥,赶紧的,讲一讲 高斯混合模型。
小鱼 :这... 等我把这集奥特曼看完。
小屌丝 :完美世界不香吗?印神王座不香吗? 还
小鱼 :香... 这个真香...
小屌丝 :那赶紧讲完,咱边泡澡边看动画片。
小鱼 :这个更香。

2、高斯混合模型

2.1 定义

高斯混合模型是一种概率模型,它假设所有的数据点都是由有限个高斯分布(也称为正态分布)生成的。

每个高斯分布代表数据中的一个子集或"簇",而整个数据集则是这些高斯分布的混合。

2.2 原理

高斯混合模型的核心思想是,通过估计每个高斯分布的参数(均值、协方差和权重),以及它们在混合模型中的比例,来拟合数据的概率分布。

这通常通过期望最大化(Expectation-Maximization, EM)算法来实现,该算法是一种迭代方法,用于在概率模型中寻找参数的最大似然估计。

2.3 实现方式

实现高斯混合模型通常包括以下步骤:

  • 初始化:为每个高斯分布随机选择均值、协方差和权重。
  • E步骤(期望步骤):根据当前参数估计,计算每个数据点属于每个高斯分布的概率。
  • M步骤(最大化步骤):使用E步骤中计算的概率,重新估计每个高斯分布的参数。
  • 迭代:重复E步骤和M步骤,直到参数收敛或达到预设的迭代次数。

2.4 算法公式

2.4.1 概率密度函数

高斯混合模型的概率密度函数可以表示为:

[ p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) ] [ p(x) = \sum_{k=1}^{K} \pi_k \mathcal{N}(x|\mu_k, \Sigma_k) ] [p(x)=k=1∑KπkN(x∣μk,Σk)]

其中,(K) 是高斯分布的个数, ( π k ) (\pi_k) (πk) 是第 ( k ) (k) (k) 个高斯分布的权重(满足 ( ∑ k = 1 K π k = 1 ) ) (\sum_{k=1}^{K} \pi_k = 1)) (∑k=1Kπk=1)), ( μ k ) (\mu_k) (μk) 和 ( Σ k ) (\Sigma_k) (Σk) 分别是第 ( k ) (k) (k) 个高斯分布的均值和协方差, ( N ( x ∣ μ k , Σ k ) ) (\mathcal{N}(x|\mu_k, \Sigma_k)) (N(x∣μk,Σk)) 是高斯分布的概率密度函数。

2.4.2 EM算法之E步骤

在EM算法的E步骤中,需要计算每个数据点属于每个高斯分布的后验概率:

[ γ ( z n k ) = π k N ( x n ∣ μ k , Σ k ) ∑ j = 1 K π j N ( x n ∣ μ j , Σ j ) ] [ \gamma(z_{nk}) = \frac{\pi_k \mathcal{N}(x_n|\mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(x_n|\mu_j, \Sigma_j)} ] [γ(znk)=∑j=1KπjN(xn∣μj,Σj)πkN(xn∣μk,Σk)]

其中, ( z n k ) (z_{nk}) (znk) 是一个二元变量,表示数据点 ( x n ) (x_n) (xn)是否属于第 ( k ) (k) (k) 个高斯分布。

2.4.2 EM算法之M步骤

在M步骤中,根据后验概率重新估计参数:

[ π k = N k N , μ k = 1 N k ∑ n = 1 N γ ( z n k ) x n , Σ k = 1 N k ∑ n = 1 N γ ( z n k ) ( x n − μ k ) T ( x n − μ k ) ] [ \pi_k = \frac{N_k}{N}, \quad \mu_k = \frac{1}{N_k} \sum_{n=1}^{N} \gamma(z_{nk})x_n, \quad \Sigma_k = \frac{1}{N_k} \sum_{n=1}^{N} \gamma(z_{nk})(x_n - \mu_k)^T(x_n - \mu_k) ] [πk=NNk,μk=Nk1n=1∑Nγ(znk)xn,Σk=Nk1n=1∑Nγ(znk)(xn−μk)T(xn−μk)]

其中, ( N k ) (N_k) (Nk)是属于第 ( k ) (k) (k) 个高斯分布的数据点的数量。

2.5 代码示例

python 复制代码
# -*- coding:utf-8 -*-
# @Time   : 2024-03-10
# @Author : Carl_DJ

'''
实现功能:
    scikit-learn库实现高斯混合模型 

'''
from sklearn.mixture import GaussianMixture  
import numpy as np  
  
# 生成一些随机数据  
np.random.seed(0)  
n_samples = 300  
X, y = make_blobs(n_samples=n_samples, centers=4, cluster_std=0.60, random_state=0)  
  
# 使用高斯混合模型进行拟合  
gmm = GaussianMixture(n_components=4).fit(X)  
  
# 预测数据点的标签  
labels = gmm.predict(X)  
  
# 显示结果  
plt.scatter(X[:, 0], X[:, 1], c=labels, s=40, cmap='viridis')  
plt.show()

解析

  • 生成随机数据

    • 使用numpy库生成了一个包含300个样本的随机数据集X,这些样本是二维的,并且根据四个中心点(centers=4)进行聚类,每个簇的标准差为0.6。
    • y是这些样本的真实标签,但在后续的高斯混合模型使用中并未直接使用到这些标签,因为GMM是一种无监督学习算法。
  • 高斯混合模型拟合

    • 使用sklearn.mixture中的GaussianMixture类创建了一个高斯混合模型对象gmm,并指定模型中有四个高斯成分(n_components=4),对应于数据中的四个簇。
    • 使用fit方法对数据集X进行拟合,估计每个高斯成分的均值、协方差和权重。
  • 预测数据点标签

    • 使用predict方法对数据集X中的每个数据点进行标签预测。这里,"标签"是指每个数据点最可能属于的高斯成分的索引。在聚类上下文中,这些标签可以被视为数据点的簇分配。
  • 可视化结果

    • 使用matplotlib的scatter函数,根据预测得到的标签labels,将数据点绘制在二维平面上,并使用颜色映射cmap='viridis'区分不同的簇。
    • plt.show()用于显示绘制的散点图。

3、总结

看到这里,今天的内容就分享到告一段落了。

我们在回顾一下告诉混合模型:

高斯混合模型是一种强大的无监督学习算法,它能够发现数据中的复杂结构,并将数据划分为多个高斯分布的混合。通过EM算法迭代地估计每个高斯分布的参数,GMM能够有效地拟合数据的概率分布,并用于聚类、密度估计等任务。在实际应用中,GMM可以根据具体需求进行扩展

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 多个名企认证讲师等
  • 认证金牌面试官
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼 ,学习机器学习领域的知识。

相关推荐
Length-vision几秒前
Linux入门学习:Linux调试器gdb使用
linux·学习
繁依Fanyi28 分钟前
使用 Spring Boot + Redis + Vue 实现动态路由加载页面
开发语言·vue.js·pytorch·spring boot·redis·python·算法
正义的彬彬侠33 分钟前
举例说明计算一个矩阵的秩的完整步骤
人工智能·机器学习·矩阵·回归
aloha_78933 分钟前
B站宋红康JAVA基础视频教程(chapter14数据结构与集合源码)
java·数据结构·spring boot·算法·spring cloud·mybatis
鸽芷咕44 分钟前
【Python报错已解决】xlrd.biffh.XLRDError: Excel xlsx file; not supported
开发语言·python·机器学习·bug·excel
茶馆大橘1 小时前
(黑马点评)八、实现签到统计和uv统计
数据库·redis·学习·阿里云·黑马点评
临沂堇1 小时前
CCF刷题计划——训练计划(反向拓扑排序)
数据结构·c++·算法·拓扑·ccf
铁匠匠匠1 小时前
【C总集篇】第八章 数组和指针
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
Unicorn建模1 小时前
2024“华为杯”中国研究生数学建模竞赛(E题)深度剖析|数学建模完整过程+详细思路+代码全解析
python·算法·数学建模
咕咕吖1 小时前
二叉树的层序遍历(c)
数据结构·算法