相似度就是比較兩個事物的相似性。一般通過計算事物的特征之間的距離,如果距離小,那么相似度大;如果距離大,那么相似度小。
問題定義:有兩個對象X,Y,都包含N維特征,X=(x1,x2,x3,...,xn),Y=(y1,y2,y3,...,yn),計算X和Y的相似性。
閔可夫斯基距離(Minkowski Distance)
曼哈頓距離(Manhattan Distance)
p=1時,閔可夫斯基距離就是曼哈頓距離。
又稱城市街區距離,在方正的北京大街打車,行車距離就是曼哈頓距離,如果在山城重慶就不是了。
歐氏距離(Euclidean Distance)
p=2時,閔可夫斯基距離就是歐氏距離。
在平面幾何或者立體幾何中的距離,通常就是歐氏距離,所以歐氏距離也最容易理解。
np.sqrt(np.sum(np.square(x-y)))
切比雪夫距離(Chebyshev Distance)
p等於無窮大時,閔可夫斯基距離就是切比雪夫距離。
def twoQBXFdis(a,b):
return max( abs(a[0]-b[0]), abs(a[1]-b[1]))
若將國際象棋棋盤放在二維直角坐標系中,格子的邊長定義為1,座標的x軸及y軸和棋盤方格平行,原點恰落在某一格的中心點,則王從一個位置走到其他位置需要的最少步數恰為二個位置的切比雪夫距離,因此切比雪夫距離也稱為棋盤距離
"加權(weighted)"閔可夫斯基距離
當樣本中不同屬性的重要性不同時,可使用"加權距離"(weighted distance)
余弦相似度(Cosine Similarity)
np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y))
余弦相似性取值[-1,1],值越趨於1,表示兩個向量的相似度越高。余弦相似度與向量的幅值無關,只與向量的方向相關,在文檔相似度(TF-IDF)和圖片相似性(histogram)計算上都有它的身影。
二維平面上兩向量a(x1,y1),b(x2,y2)之間的夾角余弦公式:
也可直接通過向量運算:
n維空間上兩點a(x1,x2……..xn),b(y1,y2……..yn)的夾角余弦公式:
皮爾遜相關系數(Pearson Correlation)
余弦相似度會受到向量的平移影響,怎樣才能實現平移不變性?在余弦相似度的基礎上,每個向量減去這個向量均值組成的向量,也就是皮爾遜相關系數,有時候也直接叫相關系數。
x_=x-np.mean(x)
y_=y-np.mean(y)
d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_))
當兩個向量均值都為0時,皮爾遜相對系數等於余弦相似性。
馬氏距離(Mahalanobis Distance)
一個向量的不同維度如果是不同的量綱,更有甚者,維度之間是相關的,比如身高和體重組成的向量,在閔可夫斯基距離中等同對待,有時,這樣是不恰當的。馬氏距離利用 Cholesky transformation 消除了不同維度之間的相關性和尺度不同。
其中,S為樣本的協方差矩陣。當S是單位陣的時候,馬氏距離就是歐式距離;當S是對角陣的時候,馬氏距離是加權歐式距離。
很多時候,一個事物的有點也可能會構成它的缺點。這里馬氏距離可以消除不同維度之間的不同尺度,就可能放大了變化細微維度的作用。
我們可以按照連續性將屬性分為“連續屬性”和“離散屬性”;也可以按照有序性將屬性分為“有序屬性”和“無序屬性”[1]。上面的相似性度量都是關於“連續”並“有序”屬性的,下面給出幾個關於“離散屬性”和“無序屬性”的相似性度量。
漢明距離(Hamming Distance)
兩個等長字符串s1與s2之間的漢明距離定義為將其中一個變為另外一個所需要作的最小替換次數。
例如:字符串“11110011”與“10010010”之間的漢明距離為3。
漢明距離可以在通信中累計定長二進制字中發生翻轉的錯誤數據位,所以它也被稱為信號距離。漢明重量分析在包括信息論、編碼理論、密碼學等領域都有應用。
如果要比較兩個不同長度的字符串,不僅要進行替換,而且要進行插入與刪除的運算,在這種場合下,通常使用更加復雜的編輯距離等算法。
傑卡德相似系數(Jaccard Similarity)
傑卡德相似系數是衡量兩個集合的相似度一種指標。
up=np.double(np.bitwise_and((x != y),np.bitwise_or(x != 0, y != 0)).sum())
down=np.double(np.bitwise_or(x != 0, y != 0).sum())
d1=(up/down)
傑卡德相似系數是從相似性度量的角度來表述的,從距離度量的角度,則有傑卡德距離(Jaccard Distance)。
傑卡德相似系數和傑卡德距離本質上是一樣的,只是表述角度不同。
在聚類中,傑卡德相似系數可以作為聚類的性能度量。在推薦系統中,傑卡德相似系數可以度量兩個購買若干商品的用戶之間的相似性。
KL散度(Kullback-Leibler Divergence)
又叫相對熵,表示兩個隨機分布之間的相似性。
可以證明,KL散度大於等於0,當p=q時等於0;KL散度不滿足對稱性。
Hellinger距離(Hellinger Distance)
Hellinger距離是與KL散度類似的距離,表示隨機分布之間的相似性。
當α=0時
這時,Hellinger距離就是兩個隨機分布取平方根之后的歐式距離,符合距離度量的四個性質,是嚴格的距離度量。
總結
- 如果數據存在“分數膨脹“問題,就使用皮爾遜相關系數
- 如果數據比較密集,變量之間基本都存在共有值,且這些距離數據都是非常重要的,那就使用歐幾里得或者曼哈頓距離
- 如果數據是稀疏的,就使用余弦相似度