使用sklearn自带公式计算余弦相似度

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]

足以证明猜想的正确性;

你可能感兴趣的:(ml)