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等)的性能,来进一步了解不同聚类方法的优缺点。这有助于在实际问题中选择合适的聚类算法,以获得最佳的聚类效果。