我正在查看Scikit Kmeans digit example
上给出的示例代码此脚本中有以下代码:
# in this case the seeding of the centers is deterministic, hence we run the
# kmeans algorithm only once with n_init=1
pca = PCA(n_components=n_digits).fit(data)
bench_k_means(KMeans(init=pca.components_, n_clusters=n_digits, n_init=1),
name="PCA-based",
data=data)
为什么特征向量用作初始中心并且对此有任何直觉?
答案 0 :(得分:5)
有一个stackexchange链接here,还有一些关于PCA wikipedia的讨论。
关于此示例的创建还有一个informative mailing list discussion。
所有这些主题都指向this paper中的others。简而言之,本文认为SVD(如PCA中所见)的子空间与我们在K-means中寻找的最佳聚类中心之间存在着强烈的关系,以及相关的证明。关键句子出现在第一页的右下角 - “我们证明了校长 组件实际上是K-means聚类方法中聚类成员指标的连续解,即PCA维数减少根据K均值目标函数“自动执行数据聚类”。
这相当于SVD / PCA特征向量应该是K-Means的非常好的初始化器。本文的作者实际上更进一步,将数据投射到本征空间进行实验,然后在那里进行聚类。