PCA如何为scikit学习中的K Means算法提供中心

时间:2014-08-07 23:53:09

标签: scikit-learn k-means pca

我正在查看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)

为什么特征向量用作初始中心并且对此有任何直觉?

1 个答案:

答案 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的非常好的初始化器。本文的作者实际上更进一步,将数据投射到本征空间进行实验,然后在那里进行聚类。