通俗易懂讲透 GMM 高斯混合聚类

通俗易懂讲透 GMM 高斯混合聚类

通俗易懂讲透 GMM 高斯混合聚类|本科生/研究生都能看懂

本文用大白话+生活案例+公式拆解+完整代码+可视化,把 GMM(高斯混合模型)从原理、EM 算法、优缺点到实战讲得明明白白,适合机器学习入门、面试复习、课程笔记。

一、先搞懂:GMM 到底是什么?

一句话定义:

GMM = 用多个“钟形曲线(高斯分布)”去拟合数据,按概率做软聚类的算法。

和 K-Means 最大区别:

K-Means:硬分组,一个点只能属于一类GMM:软分组,一个点可以按概率属于多个类

比如:这个点 70% 属于A类,30% 属于B类

二、超通俗例子:饮料分类

你要把饮料分成两类:

气泡饮料(可乐、雪碧)果汁饮料(橙汁、苹果汁)

用两个特征:

甜度气泡强度

GMM 做的事:

假设两类饮料各自服从一个高斯分布(钟形)算出每瓶饮料属于哪一类的概率自动调整两个分布的中心、形状,让数据拟合最好

三、GMM 核心思想(3 句话)

数据是由 K 个高斯分布混合生成的每个簇 = 一个高斯分布(均值 + 协方差)用 EM 算法迭代求解:先算概率,再更新分布

四、GMM 最关键的 3 个参数

对每个高斯分布 k:

π_k:权重(这个簇占多少比例)μ_k:均值(中心位置)Σ_k:协方差矩阵(形状、方向、胖瘦)

五、EM 算法是什么?(最简单解释)

GMM 用 EM 算法训练,只做两件事:

1. E 步(Expectation)

算每个点属于每个簇的概率(叫责任度 γ)

2. M 步(Maximization)

用这些概率重新估计 μ、Σ、π

不断循环,直到分布不再变化。

六、核心公式(看懂就行)

1. 单个高斯分布

P(x)=1(2π)d/2∣Σ∣1/2exp⁡(−12(x−μ)TΣ−1(x−μ))

P(x) = \frac{1}{(2\pi)^{d/2}|\Sigma|^{1/2}} \exp\left(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)\right)

P(x)=(2π)d/2∣Σ∣1/21​exp(−21​(x−μ)TΣ−1(x−μ))

2. 混合分布

P(x)=∑k=1Kπk⋅P(x∣μk,Σk)

P(x) = \sum_{k=1}^K \pi_k \cdot P(x|\mu_k,\Sigma_k)

P(x)=k=1∑K​πk​⋅P(x∣μk​,Σk​)

3. 责任度(E 步)

γik=πkP(xi∣μk,Σk)∑jπjP(xi∣μj,Σj)

\gamma_{ik} = \frac{\pi_k P(x_i|\mu_k,\Sigma_k)}{\sum_j \pi_j P(x_i|\mu_j,\Sigma_j)}

γik​=∑j​πj​P(xi​∣μj​,Σj​)πk​P(xi​∣μk​,Σk​)​

4. M 步更新

μk=∑γikxi∑γik

\mu_k = \frac{\sum \gamma_{ik}x_i}{\sum \gamma_{ik}}

μk​=∑γik​∑γik​xi​​

Σk=∑γik(xi−μk)(xi−μk)T∑γik

\Sigma_k = \frac{\sum \gamma_{ik}(x_i-\mu_k)(x_i-\mu_k)^T}{\sum \gamma_{ik}}

Σk​=∑γik​∑γik​(xi​−μk​)(xi​−μk​)T​

πk=∑γikN

\pi_k = \frac{\sum \gamma_{ik}}{N}

πk​=N∑γik​​

七、代码实战:GMM 图像分割(超炫酷)

直接复制可运行,包含:

图片加载GMM 聚类分割软概率图输出自定义色彩图

import numpy as np

import matplotlib.pyplot as plt

from sklearn.mixture import GaussianMixture

from skimage import io

from matplotlib.colors import ListedColormap

# ===================== 1. 加载图片 =====================

image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Example.jpg/800px-Example.jpg"

image = io.imread(image_url)

plt.figure(figsize=(8,8))

plt.imshow(image)

plt.title("原始图片")

plt.axis("off")

plt.show()

# ===================== 2. 展平像素 =====================

h, w, _ = image.shape

pixels = image.reshape(-, 3)

# ===================== 3. GMM 聚类 =====================

n_components = 4

gmm = GaussianMixture(n_components=n_components, random_state=42)

labels = gmm.fit_predict(pixels)

# ===================== 4. 分割结果 =====================

seg_img = labels.reshape(h, w)

custom_cmap = ListedColormap(["#FF5733","#33FF57","#3357FF","#FFD700"])

plt.figure(figsize=(8,8))

plt.imshow(seg_img, cmap=custom_cmap)

plt.title("GMM 图像分割结果")

plt.axis("off")

plt.show()

# ===================== 5. 软概率图 =====================

proba = gmm.predict_proba(pixels)[:, 0].reshape(h, w)

plt.figure(figsize=(8,8))

plt.imshow(proba, cmap="plasma")

plt.title("第1类概率热力图")

plt.axis("off")

plt.show()

八、GMM 优点(面试必背)

软聚类:输出概率,边界更自然能拟合任意形状簇(椭圆、长条、斜向)生成式模型:可做密度估计、异常检测能捕捉特征相关性(协方差矩阵)高维数据友好

九、GMM 缺点

必须指定 K(簇数量)对初始化敏感比 K-Means 慢假设数据服从高斯分布容易局部最优

十、GMM vs K-Means(速记表)

特点K-MeansGMM聚类方式硬分类软分类(概率)簇形状球形任意椭圆/方向输出标签概率速度快较慢初始化敏感更敏感高维一般较好

十一、什么时候用 GMM?

✅ 适合

簇是椭圆形、斜向、非球形需要概率输出数据近似高斯分布图像分割、异常检测、密度估计

❌ 不适合

追求超快速度数据完全不符合高斯分布完全不知道 K 是多少

十二、一句话总结

GMM 是基于高斯混合的概率软聚类算法,用 EM 算法迭代拟合多个钟形分布,能处理任意形状簇,是机器学习最经典的聚类模型之一。

相关推荐

银行报表系统怎么做
365bet亚洲真人网

银行报表系统怎么做

📅 10-09 👁️ 4917
饥荒哈姆雷特
365bet亚洲真人网

饥荒哈姆雷特

📅 01-11 👁️ 5957
10步成为专业iOS开发者——从零起步
365提款10万一般多久

10步成为专业iOS开发者——从零起步

📅 08-07 👁️ 6156