我使用的是使用预先计算的亲和矩阵的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(???)来自于文档
fit(X)从负欧氏距离创建亲和矩阵,然后应用亲和传播聚类。参数: X:数组n_samples,n_features或n_samples,n_samples :数据矩阵,如果预先计算出亲和力,则表示相似/相似矩阵。 fit_predict(X,y=None)对X执行聚类并返回集群标签。参数: ndarray,shape (n_samples,n_features)输入数据。返回:y: ndarray,shape (n_samples,)集群标签
所以,他们期待两个元素的元组,但是我有一个M*N矩阵或者M*N/2元素的向量。
那么,我如何使用关联矩阵的sklearn.cluster.AffinityPropogation呢?
发布于 2014-04-05 09:40:23
你需要传递一个正方形对称矩阵。array [n_samples, n_samples]应读为array of shape (n_samples, n_samples)。我会马上修好文件的。
https://stackoverflow.com/questions/22873622
复制相似问题