機器學習基礎:相似度和距離度量究竟是什麼

2021-01-08 機器之心Pro

選自 Medium

作者:Gonzalo Ferreiro Volpi

機器之心編譯

參與:Panda

相似度度量和距離度量在整個機器學習領域都是非常基礎的概念,數據科學家 Gonzalo Ferreiro Volpi 近日通過淺顯易懂的推薦系統示例介紹了這些概念以及它們的計算方式。

在推薦系統中,我們經常談到「相似度度量」這一概念。為什麼?因為在推薦系統中,基於內容的過濾算法和協同過濾算法都使用了某種特定的相似度度量來確定兩個用戶或商品的向量之間的相等程度。所以總的來說,相似度度量不僅僅是向量之間的距離。

註:我的所有工作都可在我的 GitHub 頁面查看:https://github.com/gonzaferreiro,其中當然也包括本文內容的代碼庫以及有關推薦系統的更多內容。

在任意類型的算法中,最常見的相似度度量是向量之間夾角的餘弦,即餘弦相似度。設 A 為用戶的電影評分 A 列表,B 為用戶的電影評分 B 列表,那麼它們之間的相似度可以這樣計算:

從數學上看,餘弦相似度衡量的是投射到一個多維空間中的兩個向量之間的夾角的餘弦。當在多維空間中繪製餘弦相似度時,餘弦相似度體現的是每個向量的方向關係(角度),而非幅度。如果你想要幅度,則應計算歐幾裡德距離。

餘弦相似度很有優勢,因為即使兩個相似的文件由於大小而在歐幾裡德距離上相距甚遠(比如文檔中出現很多次的某個詞或多次觀看過同一部電影的某用戶),它們之間也可能具有更小的夾角。夾角越小,則相似度越高。

如下例所示,來自 www.machinelearningplus.com

上圖統計了 sachin、dhoni、cricket 這三個詞在所示的三個文檔中的出現次數。據此,我們可以繪出這三個向量的圖,從而輕鬆地看出衡量這些文檔的餘弦和歐幾裡德距離的差異:

按照定義,常規餘弦相似度反映了方向的差異,而不是位置的差異。因此,使用餘弦相似度指標無法考慮到用戶評分這樣的差異。調整後餘弦相似度可以緩解這一問題,具體做法是從每對共同評分的配對減去各自用戶的平均評分,其定義如下:

我們看看下面這個來自 Stack Overflow 的例子,這能更好地解釋餘弦相似度和調整過的餘弦相似度之間的差異:

假設一位用戶為兩部電影分別給出了 0~5 的評分。

直觀而言,我們可以看到用戶 b 和 c 的品味相近,而 a 則頗為不同。但常規的餘弦相似度卻給出了不一樣的結果。在這樣的案例中,計算調整後餘弦相似度能讓我們更好地理解用戶之間的相近程度。

順便一提,在上一篇有關推薦系統的文章中,我們給出了以下用於計算調整後餘弦相似度的函數:

from scipy import spatialdefadjusted_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] = distancereturn 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;反之亦然。

關於推薦系統的內容就到此為止了。但是,請記住相似度度量和距離度量在整個機器學習領域都是非常基礎的概念,理解它們對進一步的學習至關重要。

原文地址:https://medium.com/dataseries/similarity-and-distance-metrics-for-data-science-and-machine-learning-e5121b3956f8

相關焦點

  • 相似度距離度量公式
    常用的相似度度量距離有:歐幾裡得距離、餘弦相似度距離、曼哈頓距離、閔可夫斯基距離、切比雪夫距離、Jaccard相似係數、皮爾森相關係數。
  • 機器學習中距離和相似性度量方法
    最常見的是數據分析中的相關分析,數據挖掘中的分類和聚類算法,如 K 最近鄰(KNN)和 K 均值(K-Means)等等。根據數據特性的不同,可以採用不同的度量方法。向量內積的定義如下:直觀的解釋是:如果 x 高的地方 y 也比較高, x 低的地方 y 也比較低,那麼整體的內積是偏大的,也就是說 x 和 y 是相似的。舉個例子,在一段長的序列信號 A 中尋找哪一段與短序列信號 a 最匹配,只需要將 a 從 A 信號開頭逐個向後平移,每次平移做一次內積,內積最大的相似度最大。
  • 常見的距離算法和相似度計算方法
    關注 極市平臺 公眾號 ,回復 加群,立刻申請入群~來源|https://zhuanlan.zhihu.com/p/138107999本文整理了常見的距離算法和相似度(係數)算法,並比較了歐氏距離和餘弦距離間的不同之處。
  • 常用的相似度和距離計算方法
    與Jaccard 係數相關的指標叫做Jaccard 距離,用於描述集合之間的不相似度。Jaccard 距離越大,樣本相似度越低。公式定義如下:適用場景主要用於計算符號度量或布爾值度量的集合間的相似度,因為特徵屬性都是由符號度量或者布爾值標識,因此無法衡量差異具體值的大小,只能獲得「是否相同」這個結果。所以Jaccard係數適合只關心集合中特徵存不存在,不關心具體值大小。
  • 機器學習中的分類距離
    生活中,距離通常是用於形容兩個地方或兩個物體之間的遠近。在人工智慧機器學習領域,常使用距離來衡量兩個樣本之間的相似度。「物以類聚」我們知道「物以類聚」通常用於比喻同類的東西經常聚在一起。機器學習中,距離就是遵循物以類聚的思想。通過兩個樣本特徵數據進行距離計算後,得到的距離值越小,代表兩者的相似度越高,屬於同一類的可能性就越高。
  • AI產品經理需要了解的數據知識:餘弦相似度
    本文概括介紹了餘弦相似度是什麼、如何應用以及案例說明,目的是希望我們產品經理在設計相關跟相似度功能或是利用相似性功能解決某一業務的場景時能利用上餘弦相似度,並希望您讀完對自己在設計相關推薦業務、搜索業務、識別業務時能有更深層次的理解。
  • 拓撲數據分析與機器學習的相互促進
    【編者按】拓撲數據分析(TDA)和機器學習(ML)的區別與聯繫讓不熟悉TDA的人撲朔迷離,本文通過兩個定義,解釋了TDA和ML的不同,以及TDA和ML如何相互促進,為何會相互促進,並通過一個設備故障分析的案例(5000個樣本,複雜度適中,48個連續特徵)來進行證明。
  • 度量學習筆記(一) | Metric Learning for text categorization
    作者| Walker編輯| 安可出品| 磐創AI技術團隊目前,機器學習中的K近鄰(KNN)分類算法和支持向量機(SVM)算法被認為是處理文本分類的最好方法。但KNN分類算法有以下的缺陷: KNN是基於近鄰度量的一種模式分類算法,它高度依賴於數據間的相似度度量,簡單的歐式距離在實際應用時,由於不考慮不同維度之間對分類的影響以及輸入數據數據維數高的問題,往往不能取得良好的分類效果。
  • 一文講述常見的文本相似度計算方法
    在問答系統中,比如說人工客服,我們需要提前準備好問題和一些答案,讓用戶輸入的問題與題庫中的問題進行相似度的比較,最後輸出答案。在推薦系統中,我們需要提取一個用戶的所有物品,在根據這個物品找到對應的用戶群,比較兩個用戶之間的相似性,在進行相應的推薦(協同過濾)。在對語料進行預處理的時候,我們需要給予文本的相似度,把相似度高的重複主題過濾掉。
  • 常用的相似性度量算法(原理,實現,優缺點,適用場景...
    內容導讀對相似性算法的了解起源於最近在做 使用協同過濾原理 的推薦系統中, 基於鄰域的推薦算法 (User-Based CF和 和 Item-Based CF)需要估算不同樣本之間的 相似性度量(Similarity Measurement) ,這也是機器學習中在做 分類 的時候的一個常見場景。
  • 從圖像恢復相似和度量性質
    在相似變換下,l∞上有兩個不動點,它們是虛圓點(也稱絕對點)I,J,其標準坐標(可由方程(1)解出)是這一對虛圓點是復共軛理想點,它們在保向相似變換下不變:類似地,可以給出J的證明,一個反射變換使I和J交換,逆命題也成立,即如果虛圓點在一個線性變換下不動,那麼該線性變換必是相似變換。結論1:在射影變換H下,虛圓點I和J為不動點的充要條件是H是相似變換。
  • 【機器學習基礎】常見二分類損失函數、距離度量的 Python 實現
    import numpy as np1.歐氏距離(Euclidean distance) 歐幾裡得度量(euclidean metric)(也稱歐氏距離)是一個通常採用的距離定義,指在m維空間中兩個點之間的真實距離,或者向量的自然長度(即該點到原點的距離)。
  • 【機器學習基礎】常見二分類損失函數、距離度量的Python實現
    import numpy as np1.歐氏距離(Euclidean distance) 歐幾裡得度量(euclidean metric)(也稱歐氏距離)是一個通常採用的距離定義,指在m維空間中兩個點之間的真實距離,或者向量的自然長度(即該點到原點的距離)。
  • 餘弦定理測量相似度
    新年快樂前段時間工作和深夜網課及作業佔據了我的90%生活,剩下10%拿來睡覺玩遊戲了,所以好久不見
  • 機器學習模型的度量選擇一
    第一部分主要討論回歸度量在後現代主義的世界裡,相對主義以各種各樣的形式,一直是最受歡迎和最受詬病的哲學學說之一。相對主義認為,沒有普遍和客觀的真理,而是每個觀點都有自己的真理。在這篇文章中,我將根據目標和我們試圖解決的問題來討論每個錯誤度量的用處。當有人告訴你「美國是最好的國家」時,你應該問的第一個問題是,這種說法是基於什麼。
  • MATLAB比較圖像的相似度-圖像搜索算法
    關注我們獲得更多精彩內容一、圖像相似度計算相關原理通過圖片進行搜索相似圖標的算法實現是:利用感知「感知哈希算法」,就是每一張圖片都按照某種桂林生成唯一的「標識」,通過對「標識」進 比較,那麼可以判斷兩張照片是相似以及相似程度。
  • 機器學習與數據分析常用術語-基礎篇(一)
    前言 之前在給公司的程式設計師培訓機器學習專題實戰的時候,發現他們聽的認真,也非常想學,但是每當問他們有哪裡不懂的時候,他們總是回答不出哪裡不懂,識懂非懂的狀態,後來我總結了一下原因,1.機器學習領域跟程序開發的區別非常大,機器學習屬於一個交叉學科,即需要數學也需要計算機學,難度相對與單學科要大些,2.機器學習領域有很多專業詞彙與術語,之前程式設計師都沒聽說過和接觸過
  • 機器學習裡的歐氏距離
    在詩句裡,距離可以很浪漫,「世界上最遙遠的距離,不是生與死的距離,不是天各一方,而是,我就站在你的面前,你卻不知道我愛你」。在機器學習裡,距離是嚴謹的,需要一個精確的公式來計算。許多機器學習的常見算法都需要用到距離函數,即用於計算兩個不同觀測(obs)之間的距離。
  • 機器學習中各種熵的定義及理解
    然而究竟什麼是熵,相信多數人都能說出一二,但又不能清晰的表達出來。而筆者對熵的理解是:「拒絕學習、拒絕提升的人是沒有未來的,也只有努力才能變成自己想成為的人」。下圖是對熵的一個簡單描述:熵可以理解為是一種對無序狀態的度量方式。那麼熵又是如何被用在機器學習中呢?
  • 機器學習數學基礎:數理統計與描述性統計
    , 背後的邏輯都是數學, 所以數學基礎在這個領域非常關鍵, 而統計學又是重中之重, 機器學習從某種意義上來說就是一種統計學習。今天是概率統計基礎的第二篇文章, 基於第一篇隨機變量與隨機事件進行整理, 首先理一理這裡面的邏輯,第一篇的內容蘊涵了大部分概率論的知識(除了大數定律和中心極限定理這種理論性的支持, 後期有機會會補上)。而今天的這篇內容是在概率論的基礎上往前一步, 屬於數理統計的內容。