AffinityPropagation集群的输入格式

时间:2014-04-04 21:48:18

标签: python numpy scipy scikit-learn

我使用scipy.cluster.hierarchy.linkage方法使用预先计算的亲和度矩阵:

以下是生成上三角矩阵的代码:

distances = np.zeros((len(reprs), len(reprs))) * -1
for i, j in it.combinations(range(len(reprs)), 2):
    distances[i][j] = (reprs[i] - reprs[j])**2

我也可以紧凑地代表它:

distances = distances[np.triu_indices(len(reprs), 1)]

现在我想尝试sklearn.cluster.AffinityPropagation,但我无法弄清楚如何发送亲和力矩阵:

def affinity_cluster(distances):
    ap = sklearn.cluster.AffinityPropagation(preference="precomputed")
    d = ap.fit_predict(???)

documentation开始:

  

拟合(X)       从负欧氏距离创建亲和度矩阵,然后应用亲和度传播聚类。       参数:

X: array [n_samples, n_features] or [n_samples, n_samples] :
    Data matrix or, if affinity is precomputed, matrix of similarities / affinities.
     

fit_predict(X,y =无)       在X上执行群集并返回群集标签。       参数:

X : ndarray, shape (n_samples, n_features)
    Input data.

Returns : 

y : ndarray, shape (n_samples,)
    cluster labels

所以,他们期待两个元素的元组,但我有一个M * N矩阵或一个M * N / 2元素的向量。

那么,我如何将sklearn.cluster.AffinityPropogation与亲和度矩阵一起使用?

1 个答案:

答案 0 :(得分:2)

您需要传递一个正方形的对称矩阵。 array [n_samples, n_samples]应该是array of shape (n_samples, n_samples)。我会在一分钟内修复文档。