python-相似度计算的三种常用方法

协同过滤就是通过将用户和其他用户的数据进行对比来实现推荐的。

(1)相似度计算:用欧氏距离来计算。相似度用距离来衡量,距离越大,相似度越小;距离越小,相似度越大。

(2)皮尔逊相关系数:这个参数用来度量两个向量之间的相似度。corroef()进行计算,皮尔逊相关系数取值从-1到+1,我们可以通过0.5+0.5*corrcoef()来计算,将值调整归一化到0到1之间。

(3)余弦相似度:两个向量夹角的余弦值。夹角为90度,相似度为0,方向相同,相似度为1,方向相反,相似度为-1,取值范围也在-1到+1之间。因此,我们将它归一化到0到1之间。cos=AB/||A||||B||. 其中,||A|| ||B||表示2范数。利用linalg.norm().

# -*- coding: utf-8 -*-
"""
"""
from numpy import *
from numpy import linalg as la

def loadExData():
    return [[1,1,1,0,0],
            [2,2,2,0,0],
            [1,1,1,0,0],
            [5,5,5,0,0],
            [1,1,0,2,2],
            [0,0,0,3,3],
            [0,0,0,1,1]]
data=mat(loadExData())
def ecludSim(inA,inB):
    return 1.0/(1.0+la.norm(inA-inB)) #inA,inB是列向量
def pearSim(inA,inB):
#    print(inA,len(inA))
    if len(inA)<3:
        return 1.0
    else:
#        print("corrcoef(inA,inB,rowvar=0)",corrcoef(inA,inB,rowvar=0))
        #对称矩阵,且corrcoef是x1x1,x1x2,x2x1,x2x2这四者系数。
#        print("corrcoef(inA,inB,rowvar=0)[0]",corrcoef(inA,inB,rowvar=0)[0])
        #由于两个变量,所以取第一行就是x1对所有变量的线性相关性,协方差。
#        print("corrcoef(inA,inB,rowvar=0)[0][1]",corrcoef(inA,inB,rowvar=0)[0][1])
        #第一行第二列就是x2x1,第二列和第二行一样都是第二个变量对所有其他变量的线性相关性。
        return 0.5+0.5*corrcoef(inA,inB,rowvar=0)[0][1]
def cosSim(inA,inB):#inA,inB是列向量
    num=float(inA.T*inB)
    denom=la.norm(inA)*la.norm(inB)
    return 0.5+0.5*(num/denom)
print("ecludSim=",ecludSim(data[:,0],data[:,1]))
print("pearSim=",pearSim(data[:,1],data[:,1]))
print("cosSim=",cosSim(data[:,0],data[:,1]))
结果为:
ecludSim= 1.0
pearSim= 1.0
cosSim= 0.9999999999999999


  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python计算关键词的相似度可以使用多种方法。其中一种常用方法是使用编辑距离。编辑距离是一种用于计算字符串之间差异或相似度的经典距离计算方法。它衡量了将一个字符串转换为另一个字符串所需的最少编辑操作次数,包括插入、删除和替换字符。 另外一种常用方法是使用余弦相似度。余弦相似度是一种基于向量空间模型的相似度计算方法。它通过计算两个向量之间的夹角来衡量它们的相似度,值越接近1表示越相似,值越接近0表示越不相似。 除了这些方法之外,还有其他一些相似度计算方法可以在Python中使用,如杰卡德相似系数。杰卡德相似系数主要用于计算符号度量或布尔值度量的个体间的相似度,适用于计算具有共同特征的个体之间的相似度。 要在Python计算关键词的相似度,你可以选择适合你需求的方法,并使用相应的库或算法实现。例如,使用NLTK库可以计算余弦相似度,使用编辑距离可以使用python-Levenshtein库。 总结来说,Python提供了许多方法和库来计算关键词的相似度,包括编辑距离、余弦相似度和杰卡德相似系数等。选择适合你需求的方法,并使用相应的库来进行实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python实现常用相似度计算方法](https://blog.csdn.net/Together_CZ/article/details/89927608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值