機器學習基礎:類似度和距離度量到底是什麼

類似度度量和距離度量在整個機器學習領域都是很是基礎的概念,數據科學家 Gonzalo Ferreiro Volpi 近日經過淺顯易懂的推薦系統示例介紹了這些概念以及它們的計算方式。
選自 Medium,做者:Gonzalo Ferreiro Volpi,機器之心編譯,參與:Panda。

在推薦系統中,咱們常常談到「類似度度量」這一律念。爲何?由於在推薦系統中,基於內容的過濾算法和協同過濾算法都使用了某種特定的類似度度量來肯定兩個用戶或商品的向量之間的相等程度。因此總的來講,類似度度量不只僅是向量之間的距離。git

注:個人全部工做均可在個人 GitHub 頁面查看:https://github.com/gonzaferreiro,其中固然也包括本文內容的代碼庫以及有關推薦系統的更多內容。
在任意類型的算法中,最多見的類似度度量是向量之間夾角的餘弦,即餘弦類似度。設 A 爲用戶的電影評分 A 列表,B 爲用戶的電影評分 B 列表,那麼它們之間的類似度能夠這樣計算:

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

餘弦類似度頗有優點,由於即便兩個類似的文件因爲大小而在歐幾里德距離上相距甚遠(好比文檔中出現不少次的某個詞或屢次觀看過同一部電影的某用戶),它們之間也可能具備更小的夾角。夾角越小,則類似度越高。

以下例所示,來自 www.machinelearningplus.com
算法

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

按照定義,常規餘弦類似度反映了方向的差別,而不是位置的差別。所以,使用餘弦類似度指標沒法考慮到用戶評分這樣的差別。調整後餘弦類似度能夠緩解這一問題,具體作法是從每對共同評分的配對減去各自用戶的平均評分,其定義以下:bash

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

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

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

順便一提,在上一篇有關推薦系統的文章中,咱們給出瞭如下用於計算調整後餘弦類似度的函數:
from scipy import spatialdef 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複製代碼
使用這個函數的方式很是簡單,只需輸入:
  1. matrix:這就是用戶之間的評分或觀點等你衡量的東西或你的業務商品的原始矩陣。函數

  2. row_columns:若是你衡量的是列之間的距離,則設爲 1;若是你衡量的是行之間的距離,則設爲 0;學習

  3. size:所得矩陣的所需大小。也就是說,當尋找用戶或商品類似度時,這就是用戶或商品的數量。因此若是有 500 個不一樣用戶,則距離矩陣的大小就爲 500×500。ui

下面給出了一個參考示例:spa

  • 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 共同評分的電影是 x二、x四、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
相關文章
相關標籤/搜索