1. 程式人生 > >相似度計算之餘弦相似度

相似度計算之餘弦相似度

 一、定義及概念:

餘弦取值範圍為[-1,1]。求得兩個向量的夾角,並得出夾角對應的餘弦值,此餘弦值就可以用來表徵這兩個向量的相似性。夾角越小,趨近於0度,餘弦值越接近於1,它們的方向更加吻合,則越相似。當兩個向量的方向完全相反夾角餘弦取最小值-1。當餘弦值為0時,兩向量正交,夾角為90度。因此可以看出,餘弦相似度與向量的幅值無關,只與向量的方向相關。

由於連續離散點連線的斜率存在無窮大的問題,所以,把角度和斜率轉換為向量夾角餘弦值,方便比較相似度。

 

二、程式碼:

import numpy as np


def cos_sim(vector_a, vector_b):
    """
    計算兩個向量之間的餘弦相似度
    :param vector_a: 向量 a
    :param vector_b: 向量 b
    :return: sim
    """
    vector_a = np.mat(vector_a)
    vector_b = np.mat(vector_b)
    num = float(vector_a * vector_b.T)
    #或者用np自帶的matmul()
    #num = np.matmul(vector_a,vector_b.T)
    denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)
    cos = num / denom
    #因為餘弦值的範圍是[-1, +1] ,相似度計算時一般需要把值歸一化到[0, 1],一般通過如下方式:
    sim = 0.5 + 0.5 * cos
    return sim
a = [0.1,0.2,0.3]
b = [2,3,4]
print(cos_sim(a,b))