相似度算法之欧几里得距离
来源:互联网 发布:淘宝链接生成器 编辑:程序博客网 时间:2024/05/21 06:25
在计算用户相似度的过程中,欧几里得距离是比较直观,常见的一种相似度算法。
根据两用户之间共同评价的Item为维度,建立一个多维的空间,那么通过用户对单一维度上的评价Score组成的坐标系X(s1,s2,s3……,si)即可定位该用户在这个多维度空间中的位置,那么任意两个位置之间的距离Distance(X,Y)(即:欧式距离)就能在一定程度上反应了两用户兴趣的相似程度。
上图即二维空间中6位用户对Snakes 和 Dupree 这两Item评价的直观体现
就其意义而言,欧氏距离越小,两个用户相似度就越大,欧氏距离越大,两个用户相似度就越小。
在日常使用中,一般习惯于将相似度与1类比,相似度在数值上反映为0<=Similarity(X,y)<=1,越接近1,相似度越高;
那么我们在使用欧几里得距离时,可以通过 1/(1+Distance(X,Y))来贯彻上一理念。
1.定义
欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。
2.公式
3.注意事项
a.因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。
b.欧几里得距离是数据上的直观体现,看似简单,但在处理一些受主观影响很大的评分数据时,效果则不太明显;比如,U1对Item1,Item2 分别给出了2分,4分的评价;U2 则给出了4分,8分的评分。通过分数可以大概看出,两位用户褒Item2 ,贬Item1,也许是性格问题,U1 打分更保守点,评分偏低,U2则更粗放一点,分值略高。在逻辑上,是可以给出两用户兴趣相似度很高的结论。如果此时用欧式距离来处理,得到的结果却不尽如人意。即评价者的评价相对于平均水平偏离很大的时候欧几里德距离不能很好的揭示出真实的相似度。
4.代码实现
#得到两者共同评分项
defGetSameItem(UL,p1,p2):
si = {}
for item in UL[p1]:
if item in UL[p2]:
si[item] = 1
return si
#欧几里得相似度算法
defEuclidSimilarity(UL,p1,p2):
si = GetSameItem(UL,p1,p2)
if len(si) == 0:
return 0
sum_of_squares = sum([pow(UL[p1][item] -UL[p2][item] , 2) for item in si])
return 1/(1+math.sqrt(sum_of_squares))
- 相似度算法之欧几里得距离
- 算法之常用的距离和相似度度量
- 相似度属性之距离
- 相似度算法(一)------编辑距离
- 相似度算法(编辑距离原理)
- 文本相似度 -- 最小编辑距离算法
- 大数据学习笔记之五十 推荐算法的距离算法和相似度算法
- 欧几里得相似度
- 相似度算法之余弦相似度
- 字符串相似度算法 levenshtein distance 编辑距离算法
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 字符串相似度算法 levenshtein distance 编辑距离算法
- 字符串相似度算法 -- levenshtein distance 编辑距离算法
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 相似度的算法(欧几里德距离和皮尔逊算法)
- 算法介绍(3) 编辑距离算法-字符串相似度
- 字符串相似度(距离)
- 字符串距离-相似度
- 第一章 界面的介绍
- ajax(二)——传值解析
- VC++ 系统服务如何让服务进程结束后依赖windows自身把服务重启
- Android架构纵横谈之——软件自愈能力 (1)
- bzoj1026[SCOI2009]windy数 【数位dp】
- 相似度算法之欧几里得距离
- QueryCache那些事
- 3D max模型导入unity 3D中注意事项
- 从系统服务进程访问HKEY_CURRENT_USER主键
- css文本显示
- pure virtual析构函数
- 两种在web项目中获取读取文件的路径的方法
- 哈夫曼树 ACM
- React Native ListView的Item设置点击事件时null is not an object