from sklearn.metrics.pairwise import cosine_similarity
a1=np.arange(15).reshape(-1,5)
a2=np.arange(20).reshape(4,5)
print(cosine_similarity(a1,a2))
输出结果:
[[1. 0.91465912 0.87845859 0.86154979]
[0.91465912 1. 0.99663684 0.99323905]
[0.87845859 0.99663684 1. 0.9994114 ]]
猜想,第一行的值是a1中的第一个样本与a2中所有的样本的余弦相似度;以此类推;
证明如下:
自定义一个函数:
def cosine_similarity2(vector,matrix):
size=len(matrix)
data_one_set=np.tile(vector,(size,1))
dot_product=data_one_set*matrix
dot_product_sum=dot_product.sum(axis=1)
data_one_set_sq=data_one_set**2
data_one_set_sq_sum=data_one_set_sq.sum(axis=1)
data_one_set_magnitude=data_one_set_sq_sum**0.5
matrix_sq=matrix**2
matrix_sq_sum=matrix_sq.sum(axis=1)
matrix_sq_sum_magnitude=matrix_sq_sum**0.5
ratio=dot_product_sum/(data_one_set_magnitude*matrix_sq_sum_magnitude)
return ratio
a1=np.arange(5).reshape(-1,5)
a2=np.arange(20).reshape(4,5)
print(cosine_similarity(a1,a2))
print(cosine_similarity2(a1,a2))
结果输出:
[[1. 0.91465912 0.87845859 0.86154979]]
[1. 0.91465912 0.87845859 0.86154979]
足以证明猜想的正确性;