使用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]

足以证明猜想的正确性;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值