AffinityPropagation聚类的输入格式
我在使用 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: 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=None) 对 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.AffinityPropagation
和相似度矩阵呢?
1 个回答
3
你需要传入一个方形的、对称的矩阵。array [n_samples, n_samples]
应该理解为 形状为 (n_samples, n_samples) 的数组
。我马上会修正文档。