在機器學習演算法中,有各種方式衡量使用者或者物品的距離或者相似度,如曼哈頓距離、歐幾里得距離、pearson相關係數、jaccard係數等(可參考我們這裡主要詳細介紹一下余弦相似度。余弦相似度被廣泛用於協同過濾演算法中,尤其是item-base的協同過濾。
余弦相似度衡量的是2個向量間的夾角大小,通過夾角的余弦值表示結果,因此2個向量的余弦相似度為:
cosθ=
a⋅b|
|a||
∗||b
||(1)
分子為向量a與向量b的點乘,分母為二者各自的l2相乘,即將所有維度值的平方相加後開方。
余弦相似度的取值為[-1,1],值越大表示越相似。
我們以二維向量為例,計算向量(x
1,y1
)的余弦相似度。
先回顧一下初中的知識,看下圖:
我們可以得到公式:
c2=a
2+b2
−2ab
cosθ
(2)
其中: a
2b2c
2=x2
1+y2
1=x2
2+y2
2=(x
1−x2
)2+(
y1−y
2)2(3)
\begin
a^2&=x_1^2+y_1^2 \\
b^2&=x_2^2+y_2^2 \\
c^2&=(x_1-x_2)^2+(y_1-y_2)^2\tag
\end
\begina^2&=x_1^2+y_1^2 \\b^2&=x_2^2+y_2^2 \\c^2&=(x_1-x_2)^2+(y_1-y_2)^2\tag\end
於是,我們可以得到:
cosθ=
a2+b
2−c2
2ab=
2(x1
x2+y
1y2)
2x21
+y21
‾‾‾‾‾‾‾√x2
2+y2
2‾‾‾‾‾‾‾√=a
⋅b||
a||∗
||b|
|(4)
\begin
\cos\theta
&=\frac\\
&=\frac\sqrt}\\
&=\frac \tag
\end
\begin\cos\theta&=\frac\\&=\frac\sqrt}\\&=\frac \tag\end
其中a與b表達向量 (
x1,y
1)。
分子為a與b的點乘,分母為二者各自的l2相乘,即將所有維度值的平方相加後開方。
(1)夾角為0度
此時向量a與向量b應該是最相似的,余弦相似度應該為1。按照公式(4),我們計算很容易計算出來
cosθ=1
。 (2)夾角為90度
此時余弦相似度為0。
(3)夾角為180度
此時余弦相似度為-1,2個向量的方向完全相反。
余弦相似度
余弦距離 歐氏距離和傑卡德相似性度量的對比分析 1 余弦距離 余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。向量,是多維空間中有方向的線段,如果兩個向量的方向一致,即夾角接近零,那麼這兩個向量就相近。而要確定兩個向量方向是否一致,這就要用到餘弦定理...
余弦相似度
基於餘弦定理計算相似度的應用很多,比如推薦系統中的協同過濾,計算文字的相似性等等。它用計算兩者空間向量的夾角來表示兩者的相似性。先看一下餘弦定理的公式 wu v u ivi u2i v 2i 上訴公式表示uv兩者的相似度,ui表示u在i緯度的數值。在使用者行為資料 使用者只有操作和未操作兩種狀態,也...
余弦相似度
余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。相比距離度量,余弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。公式如下 python實現如下 import numpy as np from scipy.spatial.distance i...