余弦相似度
目錄
1. 余弦相似度概念
在機器學習問題中,通常將特征表示為向量的形式,所以在分析兩個特征向量之間的相似性時,常用余弦相似度來表示。
余弦相似度通過測量兩個向量的夾角的余弦值來度量它們之間的相似度,取值范圍是\([-1,1]\)。
可以使用兩個向量之間夾角的余弦值確定兩個向量是否大致指向相同的方向。
- 兩個向量有相同的指向時,余弦相似度的值為\(1\);
- 兩個向量夾角為\(90^\circ\)時,余弦相似度的值為\(0\);
- 兩個向量指向完全相反的方向時,余弦相似度的值為\(-1\)。
余弦相似度的值是與向量的長度無關的,僅僅與向量的指向方向相關。換句話說,余弦相似度關注的是向量之間的角度關系,並不關心它們的絕對大小。
例如,在度量一對文本相似度時,當文本長度差距很大,但內容相近時,如果使用詞頻或詞向量作為特征,它們在特征空間中的歐氏距離可能會很大;但是它們之間的夾角可能會很小,因而相似度很高。此外,余弦相似度在特征維度很高時依然保持着取值在\([-1,1]\)之間的特性,而歐氏距離的數值受維度的影響,范圍不固定,且含義模糊。
2. 余弦相似度公式
2.1 公式定義
給定兩個向量\(\pmb a\)和\(\pmb b\),它們點積的幾何定義為:
代數定義為:
則,給定兩個屬性向量\(A\)和\(B\),其余弦相似度由向量點積和向量標量長度給出:
其中,\(A_i\)和\(B_i\)分別代表向量\(A\)和\(B\)的各分量。
2.2 公式推導
下面給出公式\((3)\)的簡單推導過程:
如圖2.1所示,根據歐氏距離計算公式可得三角形三邊的長度:

圖2.1
根據三角形余弦定理:
可得:
對於\(n\)維向量有:
3. 余弦距離
如果希望得到類似距離的表示,將\(1\)減去余弦相似度即為余弦距離。
因此,余弦距離的取值范圍為\([0, 2]\),相同的兩個向量余弦距離為\(0\)。
3.1 余弦距離與歐氏距離的關系
將向量的模長進行歸一化:
則,根據余弦相似度定義有:
歸一化后的歐氏距離:
所以:
其中\(||A-B||_2\)表示歐氏距離,\(cos(\alpha)\)表示余弦相似度,\((1-cos(\alpha))\)表示余弦距離。可是看出,此時歐氏距離與余弦距離有着單調的關系。在此場景下,如果選擇距離最小(相似度最大)的近鄰,那么使用余弦相似度和歐氏距離的結果是相同的 。
總體來說,歐氏距離體現數值上的絕對差異,而余弦距離體現方向上的相對差異。
例如,統計兩部劇的用戶觀看行為,用戶A的觀看向量為(0, 1),用戶B為(1, 0);此時二者的余弦距離很大,而歐氏距離很小;我們分析兩個用戶對於不同視頻的偏好,更關注相對差異,顯然應當使用余弦距離。 而當我們分析用戶活躍度,以登陸次數(單位:次)和平均觀看時長(單位:分鍾)作為特征時,余弦距離會認為(1, 10)、 (10, 100)兩個用戶距離很近,但顯然這兩個用戶活躍度是有着極大差異的 ,此時我們更關注數值絕對差異,應當使用歐氏距離。一言以蔽之,具體問題要具體分析。
3.1 余弦距離是否是嚴格定義的距離
在之前的一篇筆記中提到,定義一個函數\(dist(x,y)\), 若它是一個“距離度量”(distance measure),則需要滿足一些基本性質。
那么,余弦距離是否是一個嚴格定義的距離度量呢?
首先,根據余弦距離的定義,
考慮\(||A||||B||-AB \ge 0\),因此有\(dist(A,B) \ge 0\)恆成立。且
因此,余弦距離滿足非負性和同一性。
其次,
因此,余弦距離滿足對稱性。
最后,
假設我們有三個向量\(A=(1,0), B=(1,1), C=(0,1)\),兩兩之間的余弦距離為:
於是有如下結果:
由式\((10)\)可知,余弦距離不滿足直遞性,即不滿足三角不等式。
所以余弦距離不是嚴格定義的距離。
機器學習筆記-距離度量與相似度
開心吧
醫院里,一孕婦難產,醫生靈機一動,給她服用了益生菌。
參考來源:
1)https://blog.csdn.net/smile_shujie/java/article/details/89516305
2)百面機器學習:算法工程師帶你去面試