摘要:實現參考鏈接計算各類距離關于機器學習距離的理解機器學習中的相似性度量如何通俗易懂地理解皮爾遜相關系數數學應用
8種相似度度量方式的原理及實現 歐氏距離(Euclidean Distance)
歐氏距離(也稱歐幾里得度量)指在m維空間中兩個點之間的真實距離,或者向量的自然長度(即該點到原點的距離)計算公式
$$dist(A,B)=sqrt{sum_{i=1}^n(A_i-B_i)^2}$$
試用場景在數據完整(無維度數據缺失)的情況下, 維度間的衡量單位是一致的, 否則需要標準化處理
python實現import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) d = np.linalg.norm(vec1-vec2, ord=2) # 或者 d = np.sqrt(np.sum(np.square(vec1-vec2)))曼哈頓距離(Manhattan Distance)
在歐幾里得空間的固定直角坐標系上兩點所形成的線段對軸產生的投影的距離總和計算公式
$$dist(A,B)=sum_{i=1}^n|A_i-B_i|$$
試用場景在數據完整(無維度數據缺失)的情況下, 需要將空間劃分成網格, 然后以網格為單位來進行度量, 允許4個方向
python實現import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) d = np.linalg.norm(vec1-vec2, ord=1) # 或者 d = np.sum(np.abs(vec1-vec2))切比雪夫距離(Chebyshev Distance)
切比雪夫距離(Chebyshev distance)是向量空間中的一種度量,二個點之間的距離定義為其各座標數值差的最大值計算公式
$$dist(A,B)=max_i|A_i-B_i|$$
or
$$dist(A,B)=lim_{p→infty}(sum_{i=1}^n|A_i-B_i|^p)^{frac{1}{p}}$$
需要將空間劃分成網格, 然后以網格為單位來進行度量, 允許8個方向
python實現import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) d = np.linalg.norm(vec1-vec2, ord=np.inf) # 或者 d = np.abs(vec1-vec2).max()閔可夫斯基距離(Minkowski Distance)
歐氏空間中的一種測度,被看做是歐氏距離和曼哈頓距離的一種推廣計算公式
$$dist(A,B)=sqrt[p]{sum_{i=1}^n|A_i-B_i|^p}$$
試用場景當 $p=1$ 時,就是曼哈頓距離
當 $p=2$ 時,就是歐氏距離
當 $p→∞$ 時,就是切比雪夫距離
python實現import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) """ ord=1: 一范數 ord=2: 二范數 ord=np.inf: 無窮范數 """ d = np.linalg.norm(vec1-vec2, ord=arg)漢明距離(Hamming Distance)
在信息論中,兩個等長字符串之間的漢明距離(Hamming distance)是兩個字符串對應位置的不同字符的個數計算公式
$$dist(A,B)=sum_{i=0}^n{A[i]igoplus B[i]}$$
試用場景信息編碼(為了增強容錯性,應使得編碼間的最小漢明距離盡可能大)
python實現import numpy as np vec1 = np.array([1, 1, 0, 1, 0, 1, 0, 0, 1]) vec2 = np.array([0, 1, 1, 0, 0, 0, 1, 1, 1]) d = len(np.nonzero(vec1-vec2)[0]) # 或者 d = np.shape(np.nonzero(vec1-vec2)[0])[0]余弦相似度(Cosine Similarity)
余弦相似度,又稱為余弦相似性,是通過計算兩個向量的夾角余弦值來評估他們的相似度計算公式
$$cos( heta)=cfrac{Acdot B}{|A||B|}$$
or
$$cos( heta)=cfrac{sum_{i=1}^nA_iB_i}{sqrt{sum_{i=1}^nA_i^2}sqrt{sum_{i=1}^nB_i^2}}$$
衡量兩個向量方向的差異
python實現import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) d = np.dot(vec1,vec2)/(np.linalg.norm(vec1)*(np.linalg.norm(vec2)))皮爾森相關系數(Pearson Correlation Coefficient)
用于度量兩個變量之間的相關程度計算公式
$$P(A,B)=cfrac{sum_{i=1}^n(A_i-overline A)(B_i-overline B)}{sqrt{sum_{i=1}^n(A_i-overline A)^2sum_{i=1}^n(B_i-overline B)^2}}$$
試用場景反映兩個變量是正相關還是負相關
python實現import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) p = np.corrcoef(vec1, vec2)杰卡德相似系數(Jaccard Similarity Coefficient)及杰卡德距離(Jaccard Distance)
用于比較有限樣本集之間的相似性與差異性杰卡德相似系數計算公式
$$J(A,B)=cfrac{|Aigcap B|}{|Aigcup B|}$$
杰卡德距離計算公式$$J_delta(A,B)=1-J(A,B)=cfrac{|Aigcup B|-|Aigcap B|}{|Aigcup B|}$$
試用場景比較文本相似度,用于文本查重與去重;
計算對象間距離,用于數據聚類或衡量兩個集合的區分度等。
python實現import numpy as np import scipy.spatial.distance as dist vec1 = np.array([1, 1, 0, 1, 0, 1, 0, 0, 1]) vec2 = np.array([0, 1, 1, 0, 0, 0, 1, 1, 1]) d = dist.pdist(np.array([vec1, vec2]), "jaccard")
參考鏈接
Python Numpy計算各類距離
關于機器學習距離的理解
機器學習中的相似性度量
如何通俗易懂地理解皮爾遜相關系數
GeoGebra 數學應用
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43885.html
摘要:在近鄰推薦中,最常用的相似度是余弦相似度。這就是由于余弦相似度被向量長度歸一化后的結果。用余弦相似度計算出來,兩個用戶的相似度達到。余弦相似度適用于評分數據,杰卡德相似度適合用于隱式反饋數據。 今天,我們來聊聊協同過濾中的相似度計算方法有哪些。相似度的本質推薦系統中,推薦算法分為兩個門派,一個是機器學習派,另一個就是相似度門派。機器學習派是后起之秀,而相似度派則是泰山北斗,以致撐起來推...
閱讀 1420·2021-11-22 15:11
閱讀 2848·2019-08-30 14:16
閱讀 2766·2019-08-29 15:21
閱讀 2924·2019-08-29 15:11
閱讀 2463·2019-08-29 13:19
閱讀 2995·2019-08-29 12:25
閱讀 428·2019-08-29 12:21
閱讀 2841·2019-08-29 11:03