我使用一个函数来计算一对文档之间的相似性,并使用这种相似性度量来执行聚类。
目前为止的代码
Sim=np.zeros((n, n)) # create a numpy arrary
i=0
j=0
for i in range(0,n):
for j in range(i,n):
if i==j:
Sim[i][j]=1
else:
Sim[i][j]=simfunction(list_doc[i],list_doc[j]) # calculate similarity between documents i and j using simfunction
Sim=Sim+ Sim.T - np.diag(Sim.diagonal()) # complete the symmetric matrix
AggClusterDistObj=AgglomerativeClustering(n_clusters=num_cluster,linkage='average',affinity="precomputed")
Res_Labels=AggClusterDistObj.fit_predict(Sim)
我关心的是,我在这里使用了一个相似函数,我认为根据文档,它应该是一个不相似矩阵,我怎样才能把它变成不同矩阵呢。 还有一种更有效的方法。在
请正确格式化您的代码,因为缩进在Python中很重要。
如果可能,请保持代码完整(省略了
import numpy as np
)。由于
range
总是从零开始,所以可以省略它并编写range(n)
。numpy中的索引工作方式类似于[i,j,k,…]。
因此,实际上不是
Sim[i][j]
,而是编写Sim[i, j]
,因为否则需要执行两个操作:首先获取整个行切片,然后为列编制索引。这里有另一种方法来复制上三角的元素到下三角的元素假设你真的在范围(0,1)内有相似性,把你的相似性矩阵转换成一个距离矩阵,你可以简单地做
dm = 1 - Sim
此操作将被numpy矢量化
相关问题 更多 >
编程相关推荐