接着介绍剩下的几种距离公式及pyhton实现。
5.夹角余弦(Cosine)
几何中的夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一条来衡量样本向量之间的差异。
(1)在二维空间中向量
(2)对于两个n维样本点
夹角余弦的取值范围为[-1, 1],夹角余弦越大,表示两个向量的夹角越小。夹角余弦越小,表示两个向量的夹角越大。当两个向量的方向重合时,夹角余弦最大为1。当两个向量的方向完全相反时,夹角余弦最小为-1。
(3)python实现夹角余弦。
1. from numpy import *
2. vector1 = [1, 2, 3]
3. vector2 = [4, 5, 6]
4. cosV12 = dot(vector1, vector2)/(linalg.norm(vector1) * linalg.norm(vector2))
5. print cosV12
6.汉明距离(Hamming Distance)
(1)定义:两个等长字符串S1与S2之间的汉明距离定义为将其中一个变换为两一个所需的最小变换次数。例如,“1111”与“1001”之间的汉明距离为2.
(2)python实现汉明距离。
1. from numpy import *
2. matV = mat([[1, 1, 0, 1, 0, 1, 0, 0, 1], [0, 1, 1, 0, 0, 0, 1, 1, 1]])
3. smstr = nonzero(matV[0] - matv[1])
4. print shape(smstr[0])[0]
7.杰卡德相似系数(Jaccard Similarity Coefficient)
(1)定义:两个集合
(2)杰卡德距离:与杰卡德相似系数相反的概念,用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。可表示为:
(3)python实现杰卡德距离
1. from numpy import *
2. import scipy.spatial.distance as dist
3. matV = mat([[1, 1, 0, 1, 0, 1, 0, 0, 1], [0, 1, 1, 0, 0, 0, 1, 1, 1]])
4. print "dist.jaccard:", dist.pdist(matV, 'jaccard')
至此,几种相似性度量的几种方法介绍完毕。