Python 如何从SciPy';s层次凝聚聚类?

Python 如何从SciPy';s层次凝聚聚类?,python,numpy,scipy,hierarchical-clustering,Python,Numpy,Scipy,Hierarchical Clustering,我正在使用SciPy的分层聚集聚类方法对特征的m x n矩阵进行聚类,但在聚类完成后,我似乎无法从结果聚类中获得质心。以下是我的代码: Y = distance.pdist(features) Z = hierarchy.linkage(Y, method = "average", metric = "euclidean") T = hierarchy.fcluster(Z, 100, criterion = "maxclust") 我将获取特征矩阵,计算它们之间的欧几里德距离,然后将它们传递

我正在使用SciPy的分层聚集聚类方法对特征的m x n矩阵进行聚类,但在聚类完成后,我似乎无法从结果聚类中获得质心。以下是我的代码:

Y = distance.pdist(features)
Z = hierarchy.linkage(Y, method = "average", metric = "euclidean")
T = hierarchy.fcluster(Z, 100, criterion = "maxclust")
我将获取特征矩阵,计算它们之间的欧几里德距离,然后将它们传递给分层聚类方法。从那里,我创建了平面集群,最多100个集群


现在,基于平面簇T,如何获得表示每个平面簇的1 x n质心?

您可以这样做(
D
=维数):


这将为您提供一个以群集编号为键、以特定群集的质心为值的字典。

一个可能的解决方案是使用一个函数,它返回一个带有质心的码本,如
scipy.cluster.vq中的
kmeans
。你唯一需要的是用平面簇
part
和原始观测值
X

def to_codebook(X, part):
    """
    Calculates centroids according to flat cluster assignment

    Parameters
    ----------
    X : array, (n, d)
        The n original observations with d features

    part : array, (n)
        Partition vector. p[n]=c is the cluster assigned to observation n

    Returns
    -------
    codebook : array, (k, d)
        Returns a k x d codebook with k centroids
    """
    codebook = []

    for i in range(part.min(), part.max()+1):
        codebook.append(X[part == i].mean(0))

    return np.vstack(codebook)

那么最后发生了什么?你解决问题了吗?如何使用?我最终使用了scikit learn来实现此功能。请查看scikit中的哪个功能。感谢您的跟进。:)
def to_codebook(X, part):
    """
    Calculates centroids according to flat cluster assignment

    Parameters
    ----------
    X : array, (n, d)
        The n original observations with d features

    part : array, (n)
        Partition vector. p[n]=c is the cluster assigned to observation n

    Returns
    -------
    codebook : array, (k, d)
        Returns a k x d codebook with k centroids
    """
    codebook = []

    for i in range(part.min(), part.max()+1):
        codebook.append(X[part == i].mean(0))

    return np.vstack(codebook)