本文主要是介绍python 学习笔记(相似性计算方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
实在不能理解为啥搜狗输入法每次我打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]=1n=len(si)if n==0:return 0sum1=sum([prefs[p1][it] for it in si])sum2=sum([prefs[p2][it] for it in si])sum1sq=
这篇关于python 学习笔记(相似性计算方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!