gpt4 book ai didi

python - 使用相似度函数对 scikit-learn 进行聚类

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:21 26 4
gpt4 key购买 nike

我使用一个函数来计算一对文档之间的相似度,并想使用这个相似度度量来执行聚类。
到目前为止的代码

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],因为否则你会执行两个操作:首先获取整个行切片和然后索引该列。这是将上三角形的元素复制到下三角形的另一种方法

    Sim = np.identity(n) # diagonal with ones (100 percent similarity)

    for i in range(n):
    for j in range(i+1, n): # +1 skips the diagonal
    Sim[i, j]= simfunction(list_doc[i], list_doc[j])

    # Expand the matrix (copy triangle)
    tril = np.tril_indices_from(Sim, -1) # take lower & upper triangle's indices
    triu = np.triu_indices_from(Sim, 1) # (without diagonal)
    Sim[tril] = Sim[triu]
  • 假设您确实在 (0, 1) 范围内有相似性,将您的相似性矩阵转换为距离矩阵,然后您可以简单地做

    dm = 1 - Sim

    这个操作会被numpy向量化

关于python - 使用相似度函数对 scikit-learn 进行聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com