K-Means++ 初始质心选择示例

K-Means++ 是一种改进的K-Means聚类算法,它通过优化初始质心的选择来提高聚类的效果。在本示例中,将使用sklearn库中的kmeans_plusplus函数来生成初始质心,并展示其效果。

首先,需要生成一些样本数据。这里使用sklearn.datasets.make_blobs函数来生成具有一定数量中心点和标准差的样本数据。这些数据将用于后续的聚类分析。

from sklearn.datasets import make_blobs import matplotlib.pyplot as plt # 生成样本数据 n_samples = 4000 n_components = 4 X, y_true = make_blobs(n_samples=n_samples, centers=n_components, cluster_std=0.60, random_state=0) X = X[:, ::-1]

接下来,使用kmeans_plusplus函数来计算初始质心。这个函数将根据输入的数据X和指定的聚类数量n_clusters来生成初始质心。

from sklearn.cluster import kmeans_plusplus # 计算初始质心 centers_init, indices = kmeans_plusplus(X, n_clusters=4, random_state=0)

现在,将绘制初始质心和样本数据的散点图。通过比较初始质心和样本数据的分布,可以直观地了解K-Means++初始化方法的效果。

colors = ["#4EACC5", "#FF9C34", "#4E9A06", "m"] plt.figure(1) for k, col in enumerate(colors): cluster_data = (y_true == k) plt.scatter(X[cluster_data, 0], X[cluster_data, 1], c=col, marker=".", s=10) plt.scatter(centers_init[:, 0], centers_init[:, 1], c="b", s=50) plt.title("K-Means++ 初始化") plt.xticks([]) plt.yticks([]) plt.show()

通过上述代码,成功地展示了K-Means++初始化方法的效果。从图中可以看出,初始质心被有效地选择在了样本数据的中心区域,为后续的K-Means聚类分析提供了良好的起点。

K-Means++初始化方法的优势在于它能够减少初始质心选择的随机性,从而提高聚类算法的稳定性和准确性。在实际应用中,这种方法可以显著提高聚类结果的质量,特别是在处理大规模数据集时。

此外,还可以通过比较K-Means++与其他聚类算法(如GMM初始化方法、Bisecting K-Means等)的性能,来进一步了解不同聚类方法的优缺点。这有助于在实际问题中选择合适的聚类算法,以获得最佳的聚类效果。

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