相似度計算之余弦相似度

2021-09-03 08:23:09 字數 1366 閱讀 4093

一、定義及概念:

余弦取值範圍為[-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))

嘗試使用如下**,結果顯示:ambigous。

def cos(vector1,vector2):

dot_product = 0.0

norma = 0.0

normb = 0.0

for a,b in zip(vector1,vector2):

dot_product += a*b

norma += a**2

normb += b**2

if norma == 0.0 or normb==0.0:

return none

else:

return dot_product / ((norma*normb)**0.5)

相似度演算法之余弦相似度

余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。余弦值越接近1,就表明夾角越接近0度,也就是兩個向量越相似,這就叫 余弦相似性 上圖兩個向量a,b的夾角很小可以說a向量和b向量有很高的的相似性,極端情況下,a和b向量完全重合。如下圖 如上圖二 可以認...

演算法基礎之余弦計算相似度

例 甲 乙 丙三人去看了兩場電影。甲對a電影的評分是3,對b電影的評分是4。乙對a電影的評分是5,對b電影的評分是3。丙對a電影的評分是4,對b電影的評分是5。根據這三個人的評分,求電影a b的余弦相似。a.0.48 b.0.94 c.1.26 余弦計算相似度度量 相似度度量 similarity ...

計算向量相似度 余弦相似度

1.余弦相似度可用來計算兩個向量的相似程度 對於如何計算兩個向量的相似程度問題,可以把這它們想象成空間中的兩條線段,都是從原點 0,0,出發,指向不同的方向。兩條線段之間形成乙個夾角,如果夾角為0度,意味著方向相同 線段重合 如果夾角為90度,意味著形成直角,方向完全不相似 如果夾角為180度,意味...