实在不能理解为啥搜狗输入法每次我打biji的时候总是给我跳出荸荠(qi) (づ ̄ 3 ̄)づ,还有biaoshi,总是出标识(zhi)..╭(╯^╰)╮哼
- 基于距离的相似度计算
prefs[person][item]
数据集格式如下:
example:
aaaa={‘WANG’:{‘Lady in the Water’:3,’HAHA story’:2},…}
from math import sqrt
传入参数:
prefs person1 person2
我们要计算两个人的品味相似程度,首先要找到有没有相同的item,如果没有,那么则返回0
si={}
for item in prefs[person1]:
if item in prefs[person2]:
si[item]=1
if len(si)==0:
return 0
如果有相同的item,我们得到相应的score,可以计算其欧式距离:
totalsum=sum([pow(prefs[person1][item]-prefs[person2][item],2) for item in prefs[person1] if item in prefs[person]])
因为要返回一个0-1值的函数,0代表很差,1代表口味完全相同,而上述的欧式距离是距离越小口味越相近,距离为0时口味相同
return 1/(1+sqrt(totalsum))
- pearson相关系数
仅仅计算距离是不够的,假设person1对item评价为1.2,2.3,3.6,person2对item评价为:2.2,3.3,4.6,实际上这两个人的口味相同,但是person2评价稍高,用上述方法计算则会出现很大的误差,这时候我们引入一个相关系数的概念来修正“夸大分值”的情况。
(PS:为啥我打xishu总是出现洗漱,╭(╯^╰)╮)
pearson相关系数是判断两组数据与某一直线拟合程度的一种度量,它在数据不是很规范的时候,会倾向于给出更好的结果
采用第四种计算方法:
def pearson_distance(prefs,p1,p2):
si={}
for item in prefs[p1]:
if item in prefs[p2]:
si[item]=1
n=len(si)
if n==0:
return 0
sum1=sum([prefs[p1][it] for it in si])
sum2=sum([prefs[p2][it] for it in si])
sum1sq=

本文探讨了Python中用于计算相似性的几种方法,包括基于距离的欧式距离、Pearson相关系数、Jaccard相关系数和Tanimoto系数。通过实例展示了这些方法如何应用于数据集,以评估个体间的品味相似程度。尽管每种方法都有其优缺点,但它们都是评估数据相似性的重要工具。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=50108907&d=1&t=3&u=73691f8efdd547ef97a0a86b11ef1051)
1161

被折叠的 条评论
为什么被折叠?



