简介
本实验将指导你使用 Python 中的 scikit-learn 库实现高斯混合模型(Gaussian Mixture Models,GMMs)。GMMs 是概率模型,假设数据是由多个高斯分布的混合生成的。它们广泛应用于计算机视觉、金融和生物信息学等各个领域,用于聚类和密度估计任务。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入库
在这一步中,我们将为本实验导入必要的库。我们将使用 NumPy 进行数值计算,Matplotlib 进行数据可视化,以及 scikit-learn 来实现 GMM。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import mixture
生成数据
在这一步中,我们将生成一个由两个具有不同均值和协方差的高斯分布组成的样本数据集。
n_samples = 500
np.random.seed(0)
C = np.array([[0.0, -0.1], [1.7, 0.4]])
X = np.r_[
np.dot(np.random.randn(n_samples, 2), C),
0.7 * np.random.randn(n_samples, 2) + np.array([-6, 3]),
]
实现高斯混合模型
在这一步中,我们将使用 scikit-learn 的 GaussianMixture 类来实现高斯混合模型。我们会将模型拟合到我们的数据集上,并预测每个数据点的聚类标签。最后,我们将绘制结果。
## 创建一个具有 5 个组件的高斯混合模型对象
gmm = mixture.GaussianMixture(n_components=5, covariance_type="full")
## 将高斯混合模型拟合到数据上
gmm.fit(X)
## 预测聚类标签
Y_ = gmm.predict(X)
## 绘制结果
color_iter = ["navy", "c", "cornflowerblue", "gold", "darkorange"]
for i, color in enumerate(color_iter):
plt.scatter(
X[Y_ == i, 0], X[Y_ == i, 1], 0.8, color=color, label="Cluster {}".format(i)
)
plt.legend(loc="best")
plt.title("高斯混合模型")
plt.show()
实现贝叶斯高斯混合模型
在这一步中,我们将使用 scikit-learn 的 BayesianGaussianMixture 类来实现贝叶斯高斯混合模型。该模型具有狄利克雷过程先验,它会根据数据自动调整聚类的数量。我们会将模型拟合到我们的数据集上,并预测每个数据点的聚类标签。最后,我们将绘制结果。
## 创建一个具有 5 个组件的贝叶斯高斯混合模型对象
dpgmm = mixture.BayesianGaussianMixture(n_components=5, covariance_type="full")
## 将贝叶斯高斯混合模型拟合到数据上
dpgmm.fit(X)
## 预测聚类标签
Y_ = dpgmm.predict(X)
## 绘制结果
color_iter = ["navy", "c", "cornflowerblue", "gold", "darkorange"]
for i, color in enumerate(color_iter):
plt.scatter(
X[Y_ == i, 0], X[Y_ == i, 1], 0.8, color=color, label="Cluster {}".format(i)
)
plt.legend(loc="best")
plt.title("具有狄利克雷过程先验的贝叶斯高斯混合模型")
plt.show()
总结
在本实验中,我们学习了如何使用 Python 中的 scikit-learn 库来实现高斯混合模型。我们还学习了如何生成数据集、将模型拟合到数据上以及绘制结果。高斯混合模型是用于聚类和密度估计任务的强大工具,并且在各个领域中都有广泛应用。