歐氏距離和餘弦相似度的區別是什麼?

都是評定個體間差異的大小的。歐幾里得距離度量會受指標不同單位刻度的影響,所以一般需要先進行標準化,同時距離越大,個體間差異越大;空間向量餘弦夾角的相似度度量不會受指標刻度的影響,餘弦值落於區間[-1,1],值越大,差異越小。

但是針對具體應用,什麼情況下使用歐氏距離,什麼情況下使用餘弦相似度?


從幾何意義上來說,n維向量空間的一條線段作為底邊和原點組成的三角形,其頂角大小是不確定的。也就是說對於兩條空間向量,即使兩點距離一定,他們的夾角餘弦值也可以隨意變化。

感性的認識,當兩用戶評分趨勢一致時,但是評分值差距很大,餘弦相似度傾向給出更優解。舉個極端的例子,兩用戶只對兩件商品評分,向量分別為(3,3)和(5,5),這兩位用戶的認知其實是一樣的,但是歐式距離給出的解顯然沒有餘弦值合理。


我覺得你在這裡所提應該是指馬氏距離[1],因為在多元情況下是應該除以協差陣來進行標準化的。

關於馬氏距離與餘弦相似度的區別,個人以為這是一種長度與方向的度量所造成的不同。馬氏距離度量的是長度,它只有遠近之分。而餘弦相似度是度量方向的,餘弦相似度為1,你不可以說這兩個向量一樣,只能說他們是相似的,因為他們是同方向的,就好象(3,3)與(5,5)。但是馬氏距離度量的是長度,長度為0就可以認為他們是一樣的。

餘弦相似度只在[0,1]之間,有準則,而馬氏距離在[0,無窮)之間,無判別準則.餘弦相似度為0(即直交)就可以說他們很不相似,就算他們之間距離小,但是他們方向完全不一致。而馬氏距離就需要另找判別準則來定義怎麼算大,怎麼算小。

於是相對應的應用也就出來,如果你所想應用的是對應方向上,例如@劉一丁中的感性認識,這是一種對於用戶思考方向的研究,則應該用餘弦相似度。但是若要用來區分價值大小,例如@joegh中的高低價值用戶聚類,則應該用馬氏距離

[1]http://en.wikipedia.org/wiki/Mahalanobis_distance


貌似有點明白了,餘弦夾角可以有效規避個體相同認知中不同程度的差異表現,更注重維度之間的差異,而不注重數值上的差異;反過來思考,當向量夾角的餘弦值較小(差異很大)時,歐氏距離可以很小(差異很小),如(0,1)和(1,0)兩個點,所以如果要對電子商務用戶做聚類,區分高價值用戶和低價值用戶,用消費次數和平均消費額,這個時候用餘弦夾角是不恰當的,因為它會將(2,10)和(10,50)的用戶算成相似用戶,但顯然後者的價值高得多,因為這個時候需要注重數值上的差異,而不是維度之間的差異。

所以餘弦相似度衡量的是維度間相對層面的差異,歐氏度量衡量數值上差異的絕對值,不知道這樣理解對不對。


問大家兩個問題,

1、歸一化後,計算歐氏距離,等價於餘弦值啊,證明:兩個向量x,y, 夾角為A,經過歸一化,他們的歐氏距離D=(x-y)^2 = x^2+y^2-2|x||y|cosA = 2-2cosA,也就是說D=2(1-cosA)。

2. 在文本聚類中,一般是用歐氏距離還是餘弦值?從stackoverflow這個帖子看,對於稀疏向量(文本向量顯然是稀疏的),一般用cosine比較好 clustering - Euclidean distance is usually not good for sparse data?


這個也是具體情況具體分析的,看你關注的是絕對距離還是相對距離啦。

歸根結底是個相異度的問題,也就是說你說一個大的照片和一個小的照片相異么?雖然照片的內容一樣。你要用歐氏距離,那差別就大了,要是用餘弦夾角就小啦


這一段時間再做一個相關的東西,說一下我的理解。

假設二維空間兩個點, A(x_1, y_1),B(x_2,y_2)

然後歸一化為單位向量A(frac{x_1}{sqrt{x_1^2+y_1^2}},frac{y_1}{sqrt{x_1^2+y_1^2}}),B(frac{x_2}{sqrt{x_2^2+y_2^2}},frac{y_2}{sqrt{x_2^2+y_2^2}})

那麼餘弦相似度就是: cos=frac{x_1}{sqrt{x_1^2+y_1^2}}	imesfrac{x_2}{sqrt{x_2^2+y_2^2}}+frac{y_1}{sqrt{x_1^2+y_1^2}}	imesfrac{y_2}{sqrt{x_2^2+y_2^2}} (分母是1,省略了)

歐式距離就是: euc=sqrt{(frac{x_1}{sqrt{x_1^2+y_1^2}}-frac{x_2}{sqrt{x_2^2+y_2^2}})^2+(frac{y_1}{sqrt{x_1^2+y_1^2}}-frac{y_2}{sqrt{x_2^2+y_2^2}})^2}

化簡後就是: euc=sqrt{2-2	imes cos}

很明顯,是一個單調函數(圖像類似於單位元的第一象限部分),也就意味著,兩者在歸一化為單位向量的時候計算相似度結果完全一樣。只不過餘弦相似度是值越大月相似,歐式距離是值越小越相似。

二維空間上如此,高維空間上呢?答案是類似的。不寫過程了,我舉個做過的項目的例子。

我用doc2vec 的方式生成文檔的向量,向量歸一化後,分別用餘弦相似度和歐式距離計算內容相似文章topk,結果完全相同(數量大概在10萬篇),所以我的看法是,這兩個東西完全等價(前提是歸一化)。

但是話說回來,為什麼把餘弦相似度轉換為求歐式距離,這麼轉換有什麼好處呢?

根據上述例子,如果我根據餘弦相似度計算相似doc時,需要兩兩比較,也就是 O(n^2) 的操作。通常這種比較不能全量比較,可以藉助於simhash 的思想,減少搜索空間。但是缺點是存在誤差。

但是轉為求歐式距離呢,就可以上一個非常屌的數據結構,叫KDTree,至於複雜度降低多少,自己感受。

另外多說一句,KDTree查詢過程中涉及回溯操作,所以對高維度向量並不友好,通常word2vec生成200維向量,用kdtree的效率不會高,這時候應該用BallTree。

實踐過程中的一點小經驗,有錯誤請指正。


直觀來說,歐式距離衡量空間點的直線距離,餘弦距離衡量點在空間的方向差異。


歸一化後的空間就可以想像成一個超球面,歐氏距離就是球面上兩點的直線距離,而向量餘弦值等價於那兩點的球面距離。本質是一樣,但沒有歸一化的情況下,餘弦距離是計算相似程度,而歐氏距離計算的是相同程度


個人感覺餘弦更注重該特徵是否出現過,而歐式更注重該特徵的值


沒有歸一化的情況下,餘弦距離是計算二者(或多者)間內部成分變化趨勢的相似程度,而歐氏距離計算的是二者(或多者)間對應值的相似程度。

參考:歐氏距離和餘弦相似度


傳送門:餘弦距離、歐氏距離和傑卡德相似性度量的對比分析


歐式距離是把絕對距離作為衡量標準,是一種靜態表示;余炫相似度是以目標差異的大小作為衡量標準,是前進趨勢上的差異,反應一種動態變化。一丁給出的例子:兩用戶只對兩件商品評分,向量分別為(3,3)和(5,5),這2個評分在表述上時一樣的,但是分析用戶相似度時,使用歐式距離顯然要比余炫相似度要準確(用戶評分擬合程度),余炫相似度則更好的區分了用戶的分離狀態(用戶評分層次)。


那針對於HOG特徵,應該是用cosine度量更有效吧?


http://blog.csdn.net/linvo/article/details/9333019


簡而言之,需要考慮scaling區別的用Euclidean Distance,否則Cosine Similarity得到的相似度度量更穩定,實際應用場景下後者適用的居多。


有沒有cos餘弦值與歐式距離合用的,先從絕對距離上度量然後再從夾角上細分。再者歸一化的歐氏距離與cos餘弦值是否可以認為是同一個?期待大家的回復。。。


推薦閱讀:

新聞聚合,提取可讀的主題如何實現?
數據分析師(CDA)和數據項目分析師(CPDA)的區別?在認證方面有什麼不同嗎?
大數據 預測未來,在哪些領域已經有非常準確的結果?
大數據真的有意義么?
如何評價文章《為什麼用蘋果手機的人去莆田系醫院治不好病》?

TAG:數據挖掘 | 數學 | 數據分析 | 數據統計 | 互聯網數據分析 |