python100行编程代码很反恐精英相似的_Python中Jaccard相似度的计算

我有20000个文档要计算真正的Jaccard相似性,以便以后可以检查MinWise散列方法的精确度。

每个文档在numpy矩阵中表示为一列,其中每一行是一个出现在文档中(entry=1)或不出现在文档中(entry=0)的单词。大约有600个字(行)。

例如,列1应该是[1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0],这意味着其中出现了单词1、7、11,而没有其他单词。

除了我的元素比较方法外,还有没有更有效的方法来计算相似度?我不知道如何使用集合来提高速度,因为集合刚刚变成(0,1),但从目前的情况来看,代码是不可能慢的。import numpy as np

#load file into python

rawdata = np.loadtxt("myfile.csv",delimiter="\t")

#Convert the documents from rows to columns

rawdata = np.transpose(rawdata)

#compute true jacard similarity

ndocs = rawdata.shape[1]

nwords = rawdata.shape[0]

tru_sim = np.zeros((ndocs,ndocs))

#computes jaccard similarity of 2 documents

def jaccard(c1, c2):

n11 = sum((c1==1)&(c2==1))

n00 = sum((c1==0)&(c2==0))

jac = n11 / (nfeats-n00)

return (jac)

for i in range(0,ndocs):

tru_sim[i,i]=1

for j in range(i+1,ndocs):

tru_sim[i,j] = jaccard(rawdata[:,i],rawdata[:,j])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值