Machine Learning 简明教程
Machine Learning - Distribution-Based Clustering
基于分布的聚类算法,也称为概率聚类算法,是一类假设数据点是由概率分布的混合生成的机器学习算法。这些算法旨在识别生成数据的底层概率分布,并使用此信息将数据聚类到具有相似属性的组中。
一种常见的基于分布的聚类算法是高斯混合模型 (GMM)。GMM 假设数据点是由高斯分布的混合生成的,并旨在估计这些分布的参数,包括每个分布的均值和协方差。让我们在下面看看什么是 ML 中的 GMM,以及我们怎样才能在 Python 编程语言中实现它。
Gaussian Mixture Model
高斯混合模型 (GMM) 是一种流行的机器学习聚类算法,它假设数据是由高斯分布的混合生成的。换句话说,GMM 尝试将一组高斯分布拟合到数据,其中每个高斯分布表示数据中的一个聚类。
与其他聚类算法相比,GMM 具有多个优点,例如处理重叠聚类的能力、对数据协方差结构进行建模的能力以及为每个数据点提供概率聚类分配。这使得 GMM 在许多应用中成为流行的选择,例如图像分割、模式识别和异常检测。
Implementation in Python
在 Python 中,Scikit-learn 库提供了 GaussianMixture 类来实现 GMM 算法。该类采用多个参数,包括组件数(即要识别的聚类数)、协方差类型和初始化方法。
以下是如何在 Python 中使用 Scikit-learn 库实现 GMM 的示例 −
Example
from sklearn.mixture import GaussianMixture
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# generate a dataset
X, _ = make_blobs(n_samples=200, centers=4, random_state=0)
# create an instance of the GaussianMixture class
gmm = GaussianMixture(n_components=4)
# fit the model to the dataset
gmm.fit(X)
# predict the cluster labels for the data points
labels = gmm.predict(X)
# print the cluster labels
print("Cluster labels:", labels)
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.show()
在这个示例中,我们首先使用 Scikit-learn 中的 make_blobs() 函数生成了一个合成数据集。然后,我们创建一个 4 个分量的 GaussianMixture 类实例,并使用 fit() 方法将该模型拟合到数据集。最后,我们使用 predict() 方法预测数据点的聚类标签,并打印生成的标签。
当您执行此程序时,它会生成以下绘图作为输出:
此外,您还将获得以下终端输出:
Cluster labels: [2 0 1 3 2 1 0 1 1 1 1 2 0 0 2 1 3 3 3 1 3 1 2 0 2 2 3 2 2 1 3 1 0 2 0 1 0
1 1 3 3 3 3 1 2 0 1 3 3 1 3 0 0 3 2 3 0 2 3 2 3 1 2 1 3 1 2 3 0 0 2 2 1 1
0 3 0 0 2 2 3 1 2 2 0 1 1 2 0 0 3 3 3 1 1 2 0 3 2 1 3 2 2 3 3 0 1 2 2 1 3
0 0 2 2 1 2 0 3 1 3 0 1 2 1 0 1 0 2 1 0 2 1 3 3 0 3 3 2 3 2 0 2 2 2 2 1 2
0 3 3 3 1 0 2 1 3 0 3 2 3 2 2 0 0 3 1 2 2 0 1 1 0 3 3 3 1 3 0 0 1 2 1 2 1
0 0 3 1 3 2 2 1 3 0 0 0 1 3 1]
GMM 中的协方差类型参数控制用于高斯分布的协方差矩阵的类型。可用的选项包括“full”(完全协方差矩阵)、“tied”(所有聚类共享的协方差矩阵)、“diag”(对角协方差矩阵)以及“spherical”(所有维度上的单个方差参数)。初始化方法参数控制用于初始化高斯分布参数的方法。