来自层次聚类的 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,
- 你必须自己计算簇质心(简单)
- 层次聚类发现的聚类对于 k-means
来说可能是一个相当糟糕的起点
所以我有大约一百万行,我需要对它们进行聚类。我从抽取随机样本开始,计算层次聚类以获得树状图。有了这个我就知道有多少个集群了。
现在我想对整个样本使用 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,
- 你必须自己计算簇质心(简单)
- 层次聚类发现的聚类对于 k-means 来说可能是一个相当糟糕的起点