我使用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
与亲和度矩阵一起使用?
答案 0 :(得分:2)
您需要传递一个正方形的对称矩阵。 array [n_samples, n_samples]
应该是array of shape (n_samples, n_samples)
。我会在一分钟内修复文档。