余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。公式如下:
Python实现如下:
import numpy as np
from scipy.spatial.distance import pdist
x = np.random.random(10)
y = np.random.random(10)
# solution1
dist1 = 1 - np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
# solution2
dist2 = pdist(np.vstack([x, y]), 'cosine')
print 'x:', x
print 'y:', y
print 'dist1:', dist1
print 'dist2:', dist2
运行结果:
x: [0.31692419 0.65676435 0.10553602 0.38527502 0.36540103 0.05386293
0.16735064 0.42934357 0.10090642 0.46733849]
y: [0.14075869 0.92933422 0.86694432 0.27997157 0.05401143 0.99179267
0.16541577 0.04084531 0.10778251 0.29086463]
dist1: 0.408687947379
dist2: [0.40868795]
注:相似度度量
相似度度量(Similarity),即计算个体间的相似程度,与距离度量相反,相似度度量的值越小,说明个体间相似度越小,差异越大。
比如:当两条新闻向量夹角余弦等于1时,这两条新闻完全重复(用这个办法可以删除爬虫所收集网页中的重复网页);当夹角的余弦值接近于1时,两条新闻相似(可以用作文本分类);夹角的余弦越小,两条新闻越不相关。