機器學習基礎:相似度和距離度量究竟是什麼
選自 Medium
作者:Gonzalo Ferreiro Volpi
機器之心編譯
參與:Panda
相似度度量和距離度量在整個機器學習領域都是非常基礎的概念,資料科學家 Gonzalo Ferreiro Volpi 近日透過淺顯易懂的推薦系統示例介紹了這些概念以及它們的計算方式。
在推薦系統中,我們經常談到「相似度度量」這一概念。為什麼?因為在推薦系統中,基於內容的過濾演算法和協同過濾演算法都使用了某種特定的相似度度量來確定兩個使用者或商品的向量之間的相等程度。所以總的來說,相似度度量不僅僅是向量之間的距離。
注:我的所有工作都可在我的 GitHub 頁面檢視:,其中當然也包括本文內容的程式碼庫以及有關推薦系統的更多內容。
在任意型別的演算法中,最常見的相似度度量是向量之間夾角的餘弦,即餘弦相似度。設 A 為使用者的電影評分 A 列表,B 為使用者的電影評分 B 列表,那麼它們之間的相似度可以這樣計算:
從數學上看,餘弦相似度衡量的是投射到一個多維空間中的兩個向量之間的夾角的餘弦。當在多維空間中繪製餘弦相似度時,餘弦相似度體現的是每個向量的方向關係(角度),而非幅度。如果你想要幅度,則應計算歐幾里德距離。
餘弦相似度很有優勢,因為即使兩個相似的檔案由於大小而在歐幾里德距離上相距甚遠(比如文件中出現很多次的某個詞或多次觀看過同一部電影的某使用者),它們之間也可能具有更小的夾角。夾角越小,則相似度越高。
如下例所示,來自
上圖統計了 sachin、dhoni、cricket 這三個詞在所示的三個文件中的出現次數。據此,我們可以繪出這三個向量的圖,從而輕鬆地看出衡量這些文件的餘弦和歐幾里德距離的差異:
按照定義,常規餘弦相似度反映了方向的差異,而不是位置的差異。因此,使用餘弦相似度指標無法考慮到使用者評分這樣的差異。調整後餘弦相似度可以緩解這一問題,具體做法是從每對共同評分的配對減去各自使用者的平均評分,其定義如下:
我們看看下面這個來自 Stack Overflow 的例子,這能更好地解釋餘弦相似度和調整過的餘弦相似度之間的差異:
假設一位使用者為兩部電影分別給出了 0~5 的評分。
直觀而言,我們可以看到使用者 b 和 c 的品味相近,而 a 則頗為不同。但常規的餘弦相似度卻給出了不一樣的結果。在這樣的案例中,計算調整後餘弦相似度能讓我們更好地理解使用者之間的相近程度。
順便一提,在上一篇有關推薦系統的文章中,我們給出了以下用於計算調整後餘弦相似度的函式:
from scipy import spatial
def adjusted_cos_distance_matrix(size, matrix, row_column):
distances = np.zeros((size,size))
if row_column == 0:
M_u = matrix.mean(axis=1)
m_sub = matrix - M_u[:,None]
if row_column == 1:
M_u = matrix.T.mean(axis=1)
m_sub = matrix.T - M_u[:,None]
for first in range(0,size):
for sec in range(0,size):
distance = spatial.distance.cosine(m_sub[first],m_sub[sec])
distances[first,sec] = distance
return distances
使用這個函式的方式非常簡單,只需輸入:
- matrix:這就是使用者之間的評分或觀點等你衡量的東西或你的業務商品的原始矩陣。
- row_columns:如果你衡量的是列之間的距離,則設為 1;如果你衡量的是行之間的距離,則設為 0;
- size:所得矩陣的所需大小。也就是說,當尋找使用者或商品相似度時,這就是使用者或商品的數量。所以如果有 500 個不同使用者,則距離矩陣的大小就為 500×500。
下面給出了一個參考示例:
- user_similarity = adjusted_cos_distance_matrix(n_users,data_matrix,0)
- item_similarity = adjusted_cos_distance_matrix(n_items,data_matrix,1)
最後,我們簡要回顧一些可用在推薦系統中計算相似度的其它方法,但也可用於機器學習中其它任何基於距離的演算法:
1. 歐幾里德距離:如果繪製在 n 維空間中,相似的項取決於彼此之間的相近程度。
2. 皮爾森相關性或相關相似度:告訴了我們兩個項之間的相關程度。相關性越高,則相似度越高。
3. 均方差:在於計算使用者評分之間的平均平方差。MSE 更側重於懲罰更大的錯誤。
然後:
其中 || 是使用者 和 都評價過的商品的數量。
使用者-使用者以及商品-商品相似度示例
我們藉助之前介紹推薦系統的文章來簡要回顧一下協同過濾的工作方式:假設我喜歡《盲刺客》和《莫斯科紳士》這兩本書;我的朋友 Matias 也喜歡《盲刺客》和《莫斯科紳士》,但也還喜歡《Where the crawdads sing》。看起來我與 Matias 有一樣的興趣。所以你可能會想我也會喜歡《Where the crawdads sing》,即使我還沒讀過它。協同過濾也正是基於這一邏輯,只是你不僅可以比較使用者,也可以比較商品。
我們視覺化地比較看看推薦系統的使用者-使用者相似度與商品-商品相似度之間的差異:
使用者-使用者相似度
商品-商品相似度
現在,理解了這一點,我們用下面的示例解釋說明一些度量,我認為這清楚辨明瞭使用者-使用者以及商品-商品相似度:
使用者-使用者相似度詳解
這裡給出了一個使用者電影評分矩陣。為了以更加實用的方式理解這一點,我們先根據上表計算一下使用者 (A, C) 和 (B, C) 的相似度。使用者 A 和 C 共同評分的電影是 x2 和 x4,B 和 C 共同評分的電影是 x2、x4、x5。知道了這些資訊後,我們計算皮爾森相關性或相關相似度:
A 和 C 之間的相關性比 B 和 C 之間的相關性大。因此,A 和 C 更相似,A 喜歡的電影會被推薦給 C,C 喜歡的也會被推薦給 A。
商品-商品相似度詳解
這裡的平均商品評分(mean item rating)是給定商品的所有評分的平均(比較看看我們在使用者-使用者過濾中看到的表格)。這裡要計算的不是使用者-使用者相似度,而是商品-商品相似度。要做到這一點,我們首先需要找到給這些商品評分過的使用者,然後再基於這些評分來計算這些商品之間的相似度。我們計算一下電影 (x1, x4) 和 (x1, x5) 之間的相似度。給電影 x1 和 x4 評過分的使用者是 A 和 B,而給電影 x1 和 x5 評過分的使用者也是 A 和 B。
x1 和 x4 的相似度大於 x1 和 x5 的相似度。基於這些相似度值,如果有任何使用者搜尋電影 x1,他們將被推薦 x4;反之亦然。
關於推薦系統的內容就到此為止了。但是,請記住相似度度量和距離度量在整個機器學習領域都是非常基礎的概念,理解它們對進一步的學習至關重要。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2659337/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 距離度量學習
- 計算幾何 —— 二維幾何基礎 —— 距離度量方法
- 海量資料相似度計算之simhash和海明距離
- 02聚類演算法-相似度距離公式、維度災難聚類演算法公式
- PostgreSQL遺傳學應用-矩陣相似距離計算(歐式距離,…XX距離)SQL矩陣
- 【scipy 基礎】--正交距離迴歸
- 字串相似度演算法(編輯距離演算法 Levenshtein Distance)(轉)字串演算法
- 經緯度互換和計算距離
- 怎樣衡量兩個字串的相似度(編輯距離動態規劃求解)字串動態規劃
- python中機器學習和深度學習的區別究竟是什麼?Python機器學習深度學習
- 【機器學習基礎】熵、KL散度、交叉熵機器學習熵
- Spark/Scala實現推薦系統中的相似度演算法(歐幾里得距離、皮爾遜相關係數、餘弦相似度:附實現程式碼)Spark演算法
- java文字相似度計算(Levenshtein Distance演算法(中文翻譯:編輯距離演算法))----程式碼和詳解Java演算法
- 為什麼說K-Means是基於距離的聚類演算法?聚類演算法
- 距離-有這麼多類
- 機器學習中那些相似度的計算方法及實現機器學習
- 文章相似度檢測工具哪個好?怎麼讓文章相似度變低?
- # Apache SeaTunnel 究竟是什麼?Apache
- 為什麼milvus 計算出來的歐式距離和實際不符合?
- JAVA計算兩經緯度間的距離Java
- 曼哈頓距離與切比雪夫距離
- 圖結構的相似度度量與分類
- 時間序列分析 | 相似性度量基本方法
- JavaScript 元素距離視窗頂部的距離JavaScript
- 從勾股定理到餘弦相似度-程式設計師的數學基礎程式設計師
- 雲端儲存究竟是什麼?
- Node.js 究竟是什麼?Node.js
- PHP實現透過經緯度計算距離和查附近店門PHP
- Python中的類、模組和包究竟是什麼?Python
- 機器學習之分類問題度量機器學習
- java 經緯度處理、計算兩地的距離、獲取當前一定距離以內的經緯度值Java
- Docker究竟是什麼 為什麼這麼流行 它的優點和缺陷有哪些?Docker
- 圖片相似度對比SSIM和PHash
- 編輯距離及編輯距離演算法演算法
- JavaScript獲取元素距離文件頂部的距離JavaScript
- Laravel 距離排序Laravel排序
- unit原子距離
- 【Python】距離Python