1. 余弦相似度:
余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间。
余弦相似度的计算用的很广泛,在NLP计算中,常用来计算词语的相似度,因为词,或者文本表示成分布式向量之后,可以很方便的计算他们的余弦相似度来评估他们的语义相似性。

两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1,两个方向正交时夹角余弦取值为0,两个向量越相似,余弦相似度越大(接近1).
- scipy
from scipy.spatial.distance import cosine
import numpy as np
a=np.array([1,2,3])
b=np.array([2,2,3])
print(1-cosine(a,b))#cosin() 中参数可以直接是 list
- sklearn 可以对矩阵进行计算
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
a=np.array([1,2,3]).reshape(1,3)#[[1 2 3]]
b=np.array([2,2,3]).reshape(1,3)#[[2 2 3]]
cosine_similarity(a,b)
>>array([[0.97230559]])
a=np.arange(15).reshape(3,5)
b=np.arange(20).reshape(4,5)
print(a)
print(b)
cosine_similarity(a,b) #第一行的值是a中的每第一个行向量与b中每一个行向量之间的余弦相似度
cosine_similarity(a)# a 中的行向量之间的两两余弦相似度
>>
1.
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
2.
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
3.
[[1. 0.91465912 0.87845859 0.86154979]
[0.91465912 1. 0.99663684 0.99323905]
[0.87845859 0.99663684 1. 0.9994114 ]]
4.
array([[1. , 0.91465912, 0.87845859],
[0.91465912, 1. , 0.99663684],
[0.87845859, 0.99663684, 1. ]])
网友评论