高斯混合模型可视化

机器学习领域,高斯混合模型(Gaussian Mixture Model, GMM)是一种常用的聚类算法。它假设数据是由多个高斯分布混合而成的,每个高斯分布对应一个聚类中心。本文将介绍如何使用Python的matplotlib和sklearn库来生成和可视化两个不同中心和协方差矩阵的高斯分布数据,并拟合高斯混合模型。

首先,需要生成两个不同中心和协方差矩阵的高斯分布数据。这里使用numpy库来生成随机样本,并使用matplotlib库来绘制数据的分布图。

import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LogNorm from sklearn import mixture # 设置随机种子以保证结果的可复现性 np.random.seed(0) # 生成第一个高斯分布的随机样本,中心在(20, 20) shifted_gaussian = np.random.randn(300, 2) + np.array([20, 20]) # 生成第二个高斯分布的随机样本,中心在原点,但协方差矩阵被拉伸 C = np.array([[0.0, -0.7], [3.5, 0.7]]) stretched_gaussian = np.dot(np.random.randn(300, 2), C) # 将两个数据集合并为最终的训练集 X_train = np.vstack([shifted_gaussian, stretched_gaussian])

接下来,使用sklearn库中的GaussianMixture类来拟合高斯混合模型。将模型设置为有两个组件,并且协方差类型为"full",这意味着每个组件都有自己的协方差矩阵。

# 拟合高斯混合模型 clf = mixture.GaussianMixture(n_components=2, covariance_type="full") clf.fit(X_train)

最后,使用matplotlib库来绘制模型预测的负对数似然值的等高线图。还绘制了原始数据点,以便直观地比较模型的预测结果和实际数据的分布。

# 绘制负对数似然值的等高线图 x = np.linspace(-20.0, 30.0) y = np.linspace(-20.0, 40.0) X, Y = np.meshgrid(x, y) XX = np.array([X.ravel(), Y.ravel()]).T Z = -clf.score_samples(XX) Z = Z.reshape(X.shape) CS = plt.contour(X, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000.0), levels=np.logspace(0, 3, 10)) CB = plt.colorbar(CS, shrink=0.8, extend="both") plt.scatter(X_train[:, 0], X_train[:, 1], 0.8) plt.title("Negative log-likelihood predicted by a GMM") plt.axis("tight") plt.show()

通过上述代码,成功地生成了两个不同中心和协方差矩阵的高斯分布数据,并使用高斯混合模型进行了拟合。最终,通过等高线图直观地展示了模型预测的负对数似然值,以及原始数据点的分布情况。这种可视化方法有助于更好地理解高斯混合模型的工作原理和性能。

在实际应用中,高斯混合模型可以用于各种聚类任务,例如图像分割、语音识别和异常检测等。通过调整模型的参数,例如组件数量和协方差类型,可以在不同的数据集上获得更好的聚类效果。此外,高斯混合模型还具有很好的灵活性和可扩展性,可以与其他机器学习算法结合使用,以解决更复杂的数据挖掘问题。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485