常見的距離算法和類似度(相關係數)計算方法

摘要:html

1.常見的距離算法java

1.1歐幾里得距離(Euclidean Distance)以及歐式距離的標準化(Standardized Euclidean distance)git

1.2馬哈拉諾比斯距離(Mahalanobis Distance)github

1.3曼哈頓距離(Manhattan Distance)算法

1.4切比雪夫距離(Chebyshev Distance)數組

1.5明可夫斯基距離(Minkowski Distance)機器學習

1.6海明距離(Hamming distance)ide

2.常見的類似度(係數)算法函數

2.1餘弦類似度(Cosine Similarity)以及調整餘弦類似度(Adjusted Cosine Similarity)post

2.2皮爾森相關係數(Pearson Correlation Coefficient)

2.3Jaccard類似係數(Jaccard Coefficient)

2.4Tanimoto係數(廣義Jaccard類似係數)

2.5對數似然類似度/對數似然類似率

2.6互信息/信息增益,相對熵/KL散度

2.7信息檢索--詞頻-逆文檔頻率(TF-IDF)

2.8詞對類似度--點間互信息

3.距離算法與類似度算法的選擇(對比)

內容:

1.常見的距離算法

1.1歐幾里得距離(Euclidean Distance)

公式:

標準歐氏距離的思路:現將各個維度的數據進行標準化:標準化後的值 = ( 標準化前的值 - 份量的均值 ) /份量的標準差,而後計算歐式距離

歐式距離的標準化(Standardized Euclidean distance)

公式:

 

1.2馬哈拉諾比斯距離(Mahalanobis Distance)

公式:

  關係:若協方差矩陣是對角矩陣,公式變成了標準化歐氏距離;若是去掉馬氏距離中的協方差矩陣,就退化爲歐氏距離。歐式距離就比如一個參照值,它表徵的是當全部類別等機率出現的狀況下,類別之間的距離;當類別先驗機率並不相等時,馬氏距離中引入的協方差參數(表徵的是點的稀密程度)來平衡兩個類別的機率。

 特色:量綱無關,排除變量之間的相關性的干擾。 

       擴展

1.3曼哈頓距離(Manhattan Distance)

公式:

  定義:通俗來說,想象你在曼哈頓要從一個十字路口開車到另一個十字路口實際駕駛距離就是這個「曼哈頓距離」,此即曼哈頓距離名稱的來源,同時,曼哈頓距離也稱爲城市街區距離(City Block distance)。

1.4切比雪夫距離(Chebyshev Distance)

公式:

 

1.5明可夫斯基距離(Minkowski Distance)

定義:

關係:明氏距離是歐氏距離的推廣,是對多個距離度量公式的歸納性的表述。p=1退化爲曼哈頓距離;p=2退化爲歐氏距離;切比雪夫距離是明氏距離取極限的形式。這裏明可夫斯基距離就是p-norm範數的通常化定義。

 下圖給出了一個Lp球(||X||p=1)的形狀隨着P的減小的可視化圖:

參照:淺談L0,L1,L2範數及其應用機器學習中的範數與距離淺談壓縮感知(十):範數與稀疏性

   

1.6海明距離(Hamming distance)

定義:在信息論中,兩個等長字符串之間的漢明距離是兩個字符串對應位置的不一樣字符的個數。

場景:在海量物品的類似度計算中可用simHash對物品壓縮成字符串,而後使用海明距離計算物品間的距離 

參考simHash 簡介以及 java 實現類似度計算經常使用方法綜述經過simHash判斷數組內容相同(或者網頁排重)的測試代碼

2.常見的類似度(係數)算法

2.1餘弦類似度(Cosine Similarity)

公式:

定義:兩向量越類似,向量夾角越小,cosine絕對值越大;值爲負,兩向量負相關。

不足:只能分辨個體在維之間的差別,無法衡量每一個維數值的差別(好比用戶對內容評分,5分制,X和Y兩個用戶對兩個內容的評分分別爲(1,2)和(4,5),使用餘弦類似度得出的結果是0.98,二者極爲類似,但從評分上看X彷佛不喜歡這2個內容,而Y比較喜歡,餘弦類似度對數值的不敏感致使告終果的偏差,須要修正這種不合理性)

  調整餘弦類似度(Adjusted Cosine Similarity)

公式:,其中Here $\bar{R_{u}}$ is the average of the u-th user's ratings.

 

2.2皮爾森相關係數(Pearson Correlation Coefficient)

    

定義:兩個變量之間的皮爾遜相關係數定義爲兩個變量之間的協方差和標準差的商

    擴展

2.3Jaccard類似係數(Jaccard Coefficient)

公式:,這裏X,Y再也不是向量,而變成了集合

定義:Jaccard係數主要用於計算符號度量或布爾值度量的個體間的類似度,沒法衡量差別具體值的大小,只能得到「是否相同」這個結果,因此Jaccard係數只關心個體間共同具備的特徵是否一致這個問題。Jaccard係數等於樣本集交集與樣本集合集的比值。

計算:假設樣本A和樣本B是兩個n維向量,並且全部維度的取值都是0或1。例如,A(0,1,1,0)和B(1,0,1,1)。咱們將樣本當作一個集合,1表示集合包含該元素,0表示集合不包含該元素。

p:樣本A與B都是1的維度的個數

q:樣本A是1而B是0的維度的個數

r:樣本A是0而B是1的維度的個數

s:樣本A與B都是0的維度的個數

那麼樣本A與B的傑卡德類似係數能夠表示爲:

      clip_image017

附:與Jaccard Coefficient相對應的是Jaccard 距離:d(X,Y) = 1 - Jaccard(X,Y);傑卡德距離用兩個集合中不一樣元素佔全部元素的比例來衡量兩個集合的區分度。(參考自餘弦距離、歐氏距離和傑卡德類似性度量的對比分析)

 

2.4Tanimoto係數(廣義Jaccard類似係數)

公式:

 

定義:廣義Jaccard類似度,元素的取值能夠是實數。又叫做谷本系數

關係:若是咱們的x,y都是二值向量,那麼Tanimoto係數就等同Jaccard距離。

 

2.5對數似然類似率

對於事件A和事件B,咱們考慮兩個事件發生的次數:

k11:事件A與事件B同時發生的次數
k12:B事件發生,A事件未發生
k21:A事件發生,B事件未發生
k22:事件A和事件B都未發生

    
rowEntropy = entropy(k11, k12) + entropy(k21, k22)
columnEntropy = entropy(k11, k21) + entropy(k12, k22)
matrixEntropy = entropy(k11, k12, k21, k22)
2 * (matrixEntropy - rowEntropy - columnEntropy)

  詳情 擴展

2.6互信息/信息增益,相對熵/KL散度

互信息/信息增益:信息論中兩個隨機變量的相關性程度

公式:

    

    

相對熵/KL散度:又叫交叉熵,用來衡量兩個取值爲正數的函數(機率分佈)的類似性

公式:

    

擴展:知乎問答

  2.7信息檢索--詞頻-逆文檔頻率(TF-IDF)

《數學之美》中看到的TF-IDF算法,在網頁查詢(Query)中相關性以詞頻(TF)與逆文檔頻率(IDF)來度量查詢詞(key)和網頁(page)的相關性;

網頁中出現key越多,該page與查詢結果越相關,可使用TF值來量化

每一個詞的權重越高,也即一個詞的信息量越大;好比「原子能」就比「應用」的預測能力強,可使用IDF值來量化,這裏的IDF《數學之美》中說就是一個特定條件下關鍵詞的機率分佈的交叉熵。

      

      2.8詞對類似度--點間類似度

    

 

3.距離算法與類似度算法的選擇(對比)

3.1 歐式距離和餘弦類似度

歐幾里得距離度量會受指標不一樣單位刻度的影響,因此通常須要先進行標準化,同時距離越大,個體間差別越大

空間向量餘弦夾角的類似度度量不會受指標刻度的影響,餘弦值落於區間[-1,1],值越大,差別越小

當兩用戶評分趨勢一致時,可是評分值差距很大,餘弦類似度傾向給出更優解。例如向量(3,3)和(5,5),這兩位用戶的認知實際上是同樣的,可是歐式距離給出的解顯然沒有餘弦值合理。

餘弦類似度衡量的是維度間相對層面的差別,歐氏度量衡量數值上差別的絕對值;一種長度與方向的度量所形成的不一樣;餘弦類似度只在[0,1]之間,而馬氏距離在[0,無窮)之間(注:以上參考自知乎問題

應用上若是要比較不一樣人的消費能力,可使用歐式距離進行度量(價值度量);若是想要比較不一樣用戶是否喜歡周杰倫,可使用餘弦類似度(定性度量)

相關文章
相關標籤/搜索