常见相似度计算方法回顾
浏览:1780次 出处信息
最近学习了常见的一些相似度计算的方法,在寻找资料的过程中找到了一篇较好的博客。主要是图做的比较好。所以拿过来做下简单的回顾与复习。
欧几里得距离
欧几里得距离其实就是空间内两点之间的直线距离。
Python实现:
from math import* def euclidean_distance(x,y): return sqrt(sum(pow(a-b,2) for a, b in zip(x, y))) print euclidean_distance([0,3,4,5],[7,6,3,-1])
曼哈顿距离
曼哈顿距离其实就是每一轴距离之和。
Python实现:
from math import* def manhattan_distance(x,y): return sum(abs(a-b) for a,b in zip(x,y)) print manhattan_distance([10,20,10],[10,20,20])
闵氏距离
闵氏距离被看做是欧氏距离和曼哈顿距离的一种推广。公式中包含了欧氏距离、曼哈顿距离和切比雪夫距离。
Python实现:
from math import* from decimal import Decimal def nth_root(value, n_root): root_value = 1/float(n_root) return round (Decimal(value) ** Decimal(root_value),3) def minkowski_distance(x,y,p_value): return nth_root(sum(pow(abs(a-b),p_value) for a,b in zip(x, y)),p_value) print minkowski_distance([0,3,4,5],[7,6,3,-1],3)
余弦相似度
余弦相似度理解起来较为简单,就是向量在空间方向上的差异。
Python实现:
from math import* def square_rooted(x): return round(sqrt(sum([a*a for a in x])),3) def cosine_similarity(x,y): numerator = sum(a*b for a,b in zip(x,y)) denominator = square_rooted(x)*square_rooted(y) return round(numerator/float(denominator),3) print cosine_similarity([3, 45, 7, 2], [2, 54, 13, 15])
杰卡德相似度
杰卡德相似度理解起来非常的简单,就是集合的交集除以并集。
Python实现:
def jaccard_similarity(x,y): intersection_cardinality = len(set.intersection(*[set(x), set(y)])) union_cardinality = len(set.union(*[set(x), set(y)])) return intersection_cardinality/float(union_cardinality) print jaccard_similarity([0,1,2,5,6],[0,2,3,5,7,9])
原文链接:http://dataaspirant.com/2015/04/11/five-most-popular-similarity-measures-implementation-in-python/
建议继续学习:
- 相似度计算常用方法综述 (阅读:9377)
- 字符串匹配那些事(一) (阅读:5769)
- 如何计算两个文档的相似度(一) (阅读:4778)
- URL相似度计算的思考 (阅读:3711)
- 如何计算两个文档的相似度(二) (阅读:3774)
- 方法论 (阅读:3357)
- Levenshtein distance相似度算法 (阅读:3125)
- 如何计算两个文档的相似度(三) (阅读:2932)
- PHP系统学习概要 (阅读:2775)
- 若无云,岂有风——词语语义相似度计算简介 (阅读:2501)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:相似度计算之马氏距离
后一篇:相似度计算之兰氏距离 >>
文章信息
- 作者:标点符 来源: 标点符
- 标签: 方法 相似度
- 发布时间:2018-07-04 23:47:09
建议继续学习
近3天十大热文
- [45] 如何拿下简短的域名
- [45] IOS安全–浅谈关于IOS加固的几种方法
- [44] 图书馆的世界纪录
- [44] Oracle MTS模式下 进程地址与会话信
- [42] android 开发入门
- [41] 界面设计速成
- [41] 【社会化设计】自我(self)部分――欢迎区
- [39] 视觉调整-设计师 vs. 逻辑
- [39] 读书笔记-壹百度:百度十年千倍的29条法则
- [34] 程序员技术练级攻略