第9章 聚类技术
5节 高斯混合模型聚类(Gaussian Mixture Model Clustering)
高斯混合模型(GMM)是一种基于概率的聚类算法,它通过假设数据是由多个高斯分布(正态分布)混合组成的来对数据进行建模。与K均值聚类不同,GMM能够为每个数据点提供一个属于每个簇的概率值,而不仅仅是一个硬分类标签。因此,GMM不仅可以发现不同簇之间的边界,还能够处理簇内的形状不规则的情况。
GMM的核心思想是通过期望最大化(EM,Expectation-Maximization)算法来估计高斯分布的参数(均值、方差和权重),从而确定最适合数据的簇模型。EM算法分为两个步骤:
- E步骤(期望步骤):计算每个数据点属于每个高斯分布的概率(即后验概率)。
- M步骤(最大化步骤):根据后验概率更新模型的参数(均值、协方差、权重)。
GMM算法原理

通过EM算法,GMM不断更新这些参数,直到对数似然函数收敛。
案例1:客户细分分析(电商平台)
案例描述: 电商平台希望通过客户的购买行为数据对客户进行细分,从而提供个性化推荐和促销策略。通过高斯混合模型聚类,平台可以将客户划分为不同的群体,帮助更好地理解客户需求。
案例分析: 电商平台有客户的购买历史数据,包括购买频率、购买金额、浏览时长等。我们希望通过GMM聚类识别出具有相似购买行为的客户群体,以便进行精准的营销。
算法步骤:
- 数据准备:收集客户的购买数据,包括购买频率、金额等。
- 构建特征矩阵:将客户的购买行为数据整理成一个特征矩阵。
- 训练GMM模型:使用GMM对客户数据进行聚类,得到每个客户属于不同群体的概率。
- 分析结果:根据聚类结果,分析每个群体的特点,为不同群体提供定制化的营销策略。
Python代码:
import numpy as np
import pandas as pd
from sklearn.mixture import GaussianMixture
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
# 模拟电商客户数据:购买频率(Purchase Frequency),购买金额(Purchase Amount)
np.random.seed(42)
data = {
'Purchase Frequency': np.random.randint(1, 20, 100),
'Purchase Amount': np.random.randint(50, 1000, 100)
}
df = pd.DataFrame(data)
# 标准化数据
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df)
# 训练高斯混合模型
gmm = GaussianMixture(n_components=3, random_state=42)
gmm.fit(scaled_data)
# 获取每个数据点的预测标签
labels = gmm.predict(scaled_data)
# 可视化聚类结果
plt.scatter(df['Purchase Frequency'], df['Purchase Amount'], c=labels, cmap='viridis')
plt.title('Customer Segmentation using Gaussian Mixture Model')
plt.xlabel('Purchase Frequency')
plt.ylabel('Purchase Amount')
plt.show()
代码解析:
- 数据生成与标准化:我们模拟了100个客户的购买数据,包括购买频率和购买金额。然后使用
StandardScaler对数据进行了标准化。 - GMM训练:使用
GaussianMixture类训练了一个包含3个组件的高斯混合模型。 - 聚类结果可视化:通过散点图展示了聚类结果,每个群体使用不同的颜色标识。
案例2:图像聚类与图像压缩
案例描述: 在计算机视觉中,图像聚类可以用于图像压缩。通过高斯混合模型对图像中的颜色进行建模,我们可以将颜色数目减少,从而实现图像压缩。
案例分析: 图像由多个像素构成,每个像素可以看作是RGB颜色空间中的一个点。通过高斯混合模型,我们可以将图像中的颜色聚类为少数几个代表性颜色,从而实现图像的压缩和去噪。
算法步骤:
- 读取图像并提取颜色:将图像的每个像素的RGB值作为数据点。
- 训练GMM模型:使用GMM对颜色进行聚类,得到代表性颜色。
- 重建图像:将每个像素的颜色替换为最近的代表性颜色,生成压缩后的图像。
Python代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
import cv2
# 读取图像
image = cv2.imread('example_image.jpg')
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 将图像展平为一维数组(每个像素为一个RGB点)
pixels = image_rgb.reshape(-1, 3)
# 训练高斯混合模型
gmm = GaussianMixture(n_components=5, random_state=42)
gmm.fit(pixels)
# 获取每个像素的聚类标签
labels = gmm.predict(pixels)
# 重建图像:将每个像素的颜色替换为对应簇的均值
compressed_image = gmm.means_[labels].reshape(image_rgb.shape)
# 可视化原图与压缩图
plt.figure(figsize=(10, 6))
plt.subplot(1, 2, 1)
plt.imshow(image_rgb)
plt.title('Original Image')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(compressed_image.astype(int))
plt.title('Compressed Image')
plt.axis('off')
plt.show()
代码解析:
- 图像读取与处理:使用OpenCV读取图像并转换为RGB格式,随后将图像展平为一维数组,每个像素是一个RGB值。
- GMM训练:对图像的颜色数据使用高斯混合模型进行训练,设定5个组件(代表5种颜色)。
- 图像重建:根据每个像素的聚类标签,将每个像素的颜色替换为对应簇的均值,从而生成压缩后的图像。
案例3:金融数据异常检测
案例描述: 在金融交易中,异常交易(如欺诈行为)往往会表现为与正常交易不同的模式。通过高斯混合模型聚类,可以检测出与正常交易行为明显不同的异常交易。
案例分析: 假设我们有一组金融交易数据,包括交易金额、交易时间等特征。通过GMM聚类,我们可以识别出异常交易行为,进而采取措施。
算法步骤:
- 数据准备:收集交易数据,包括金额、时间等信息。
- 训练GMM模型:对交易数据进行高斯混合模型聚类,得到正常交易和异常交易。
- 异常检测:根据模型的后验概率,检测出属于异常簇的交易。
Python代码:
import numpy as np
import pandas as pd
from sklearn.mixture import GaussianMixture
import matplotlib.pyplot as plt
# 模拟金融交易数据:交易金额(Transaction Amount),交易频率(Transaction Frequency)
np.random.seed(42)
transactions = np.concatenate([np.random.randn(100, 2) * 1000 + [1000, 50],
np.random.randn(10, 2) * 2000 + [5000, 10]])
df = pd.DataFrame(transactions, columns=['Transaction Amount', 'Transaction Frequency'])
# 训练高斯混合模型
gmm = GaussianMixture(n_components=2, random_state=42)
gmm.fit(df)
# 获取每个数据点的聚类标签
labels = gmm.predict(df)
# 可视化聚类结果
plt.scatter(df['Transaction Amount'], df['Transaction Frequency'], c=labels, cmap='coolwarm')
plt.title('Fraud Detection using Gaussian Mixture Model')
plt.xlabel('Transaction Amount')
plt.ylabel('Transaction Frequency')
plt.show()
代码解析:
- 数据生成与训练:我们模拟了100个正常交易和10个异常交易的金融数据。然后使用GMM对数据进行训练,设定2个组件(一个表示正常交易,另一个表示异常交易)。
- 异常检测:根据模型的聚类结果,正常交易和异常交易被分配到不同的簇。
- 结果可视化:通过散点图显示了金融交易的聚类结果,异常交易通过不同的颜色标识。
总结
高斯混合模型(GMM)聚类是一种基于概率的聚类方法,它通过对数据进行高斯分布建模,能够捕捉复杂的数据结构。在本节中,我们通过三个实际案例展示了GMM的应用:
- 电商平台客户细分:通过客户购买行为数据进行细分,帮助平台制定个性化的营销策略。
- 图像压缩:通过对图像颜色进行GMM聚类,减少颜色种类,实现图像压缩。
- 金融数据异常检测:通过交易数据识别异常交易,检测潜在的欺诈行为。
这些案例表明,GMM在处理复杂数据集时,能够提供更灵活和精确的聚类效果,尤其适用于具有不规则形状的簇或需要概率分配的情况。在实际应用中,GMM为我们提供了一种有效的方式来进行聚类分析和异常检测。
【哈佛博后带小白玩转机器学习】 【限时5折-含直播】哈佛博后带小白玩转机器学习_哔哩哔哩_bilibili
总课时超400+,时长75+小时
2043

被折叠的 条评论
为什么被折叠?



