相似度計算之餘弦相似度
阿新 • • 發佈:2018-12-18
一、定義及概念:
餘弦取值範圍為[-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))