来自层次聚类的 k-means 的初始种子

Initial seeds for k-means from hierarchical clustering

所以我有大约一百万行,我需要对它们进行聚类。我从抽取随机样本开始,计算层次聚类以获得树状图。有了这个我就知道有多少个集群了。

现在我想对整个样本使用 K-Means 聚类,初始种子来自上一步 - 层次聚类。但是我不知道如何获得那些初始种子。

层次聚类代码如下:

from scipy.cluster.hierarchy import linkage
from sklearn import preprocessing as prep

seed = 85
df_s = df.sample(frac=0.01, replace=False)
df_s = df_s.reset_index(drop=True)

scaler = prep.MinMaxScaler()

df_std = scaler.fit_transform(df_s[clmns])

Z = linkage(df_std, 'ward')

然后对于 K-Means,我知道我可以这样称呼它:

from scipy.cluster.vq import kmeans2
centroid, label = kmeans2(df[clmns], 3)

我知道参数minit是用种子插入n x p矩阵,但我不清楚如何获得它们。

这个问题最初是 post 在交叉验证时提出的。但是因为它更多的是关于编程,所以建议我在这里 post 它。

由于层次聚类不是 centroid-based,

  1. 你必须自己计算簇质心(简单)
  2. 层次聚类发现的聚类对于 k-means
  3. 来说可能是一个相当糟糕的起点