python – 使用相似性函数来聚类scikit-learn
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用相似性函数来聚类scikit-learn,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1534字,纯文字阅读大概需要3分钟。
内容图文
我使用函数来计算一对文档之间的相似性,并且想要使用这种相似性度量来执行聚类.
代码到目前为止
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中很重要.
>如果可能,请保持代码完整(您将导入numpy省略为np).
>由于范围始终从零开始,因此可以省略它并写入范围(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全部内容,希望文章能够帮你解决python – 使用相似性函数来聚类scikit-learn所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。