度量学习方法总结
目錄
一.距離度量
閔可夫斯基距離
歐式距離(Euclidean Distance):
標準化歐氏距離(Standardized Euclidean distance )
曼哈頓距離(ManhattanDistance)
切比雪夫距離(Chebyshevdistance)
馬氏距離
馬氏距離代碼示例:
夾角余弦
相關系數( Correlation coefficient )與相關距離(Correlation distance)
交叉熵與相對熵(kl散度)
漢明距離
度量學習 (Metric Learning) == 距離度量學習 (Distance Metric Learning,DML) == 相似度學習
根據不同的任務來自主學習出針對某個特定任務的度量距離函數。通過計算兩張圖片之間的相似度,使得輸入圖片被歸入到相似度大的圖片類別中去。
一.距離度量
閔可夫斯基距離
假設數值點 P 和 Q 坐標如下:
那么,閔可夫斯基距離定義為:
歐式距離(Euclidean Distance):
兩點之間的直線距離。p 是 2的閔可夫斯基距離。
(1)二維平面上兩點a(x1,y1),b(x2,y2)之間的歐式距離公式:
(2) n維空間上兩點a(x1,x2……..xn),b(y1,y2……..yn)的歐式距離公式:
標準化歐氏距離(Standardized Euclidean distance )
樣本集的標準化過程(standardization)用公式描述就是:
標準化后的值 = ( 標準化前的值 - 分量的均值 ) /分量的標準差
經過簡單的推導就可以得到兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的標準化歐氏距離的公式:
如果將方差的倒數看成是一個權重,這個公式可以看成是一種加權歐氏距離(Weighted Euclidean distance)。
曼哈頓距離(ManhattanDistance)
p 是 1 的閔可夫斯基距離。
(1)二維平面上兩點a(x1,y1),b(x2,y2)之間的曼哈頓距離公式:
(2) n維空間上兩點a(x1,x2……..xn),b(y1,y2……..yn)的曼哈頓距離公式:
閔可夫斯基距離與數據的分布無關,具有一定的局限性,如果 x 方向的幅值遠遠大于 y 方向的值,這個距離公式就會過度放大 x 維度的作用。所以,在計算距離之前,我們可能還需要對數據進行z-transform處理,即減去均值,除以標準差:
: 該維度上的均值
: 該維度上的標準差
Z變換(Z-transform) 將離散系統的時域數學模型——差分方程轉化為較簡單的頻域數學模型——代數方程,以簡化求解過程的一種數學工具。
https://zhuanlan.zhihu.com/p/45114376
切比雪夫距離(Chebyshevdistance)
各對應坐標數值差的最大值。p 趨近于無窮大時的閔可夫斯基距離。
(1)二維平面上兩點a(x1,y1),b(x2,y2)之間的切比雪夫距離公式:
(2) n維空間上兩點a(x1,x2……..xn),b(y1,y2……..yn)的切比雪夫距離公式:
如果維度相互之間數據相關(例如:身高較高的信息很有可能會帶來體重較重的信息,因為兩者是有關聯的),這時候就要用到馬氏距離(Mahalanobis distance)了。
馬氏距離
馬氏距離是基于樣本分布的一種距離。有M個樣本向量X1~Xm,協方差矩陣記為S,均值記為向量μ,則其中樣本向量X到u的馬氏距離表示為:
假設樣本點(列向量)之間的協方差對稱矩陣是, 通過 Cholesky Decomposition(實際上是對稱矩陣 LU 分解的一種特殊形式)可以轉化為下三角矩陣和上三角矩陣的乘積:。消除不同維度之間的相關性和尺度不同,只需要對樣本點 x 做如下處理:。處理之后的歐幾里得距離就是原樣本的馬氏距離:為了書寫方便,這里求馬氏距離的平方):
而其中向量Xi與Xj之間的馬氏距離定義為:
若協方差矩陣是單位矩陣(各個樣本向量之間獨立同分布),則公式就成了:
也就是歐氏距離了。
若協方差矩陣是對角矩陣(協方差矩陣的對角線上即為方差),公式變成了標準化歐氏距離。
馬氏距離的計算是建立在總體樣本的基礎上的,如果拿同樣的兩個樣本,放入兩個不同的總體中,最后計算得出的兩個樣本間的馬氏距離通常是不相同的,除非這兩個總體的協方差矩陣碰巧相同;計算馬氏距離過程中,要求總體樣本數大于樣本的維數,否則得到的總體樣本協方差矩陣逆矩陣不存在,這種情況下,用歐式距離計算即可。
馬氏距離代碼示例:
# -*- coding=utf-8 -*-
# code related at: http://www.cnblogs.com/daniel-D/
import numpy as np
import pylab as pl
import scipy.spatial.distance as dist
def plotSamples(x, y, z=None):
stars = np.matrix([[3., -2., 0.], [3., 2., 0.]])
if z is not None:
x, y = z * np.matrix([x, y])
stars = z * stars
pl.scatter(x, y, s=10) # 畫 gaussian 隨機點
pl.scatter(np.array(stars[0]), np.array(stars[1]), s=200, marker='*', color='r') # 畫三個指定點
pl.axhline(linewidth=2, color='g') # 畫 x 軸
pl.axvline(linewidth=2, color='g') # 畫 y 軸
pl.axis('equal')
pl.axis([-5, 5, -5, 5])
pl.show()
# 產生高斯分布的隨機點
mean = [0, 0] # 平均值
cov = [[2, 1], [1, 2]] # 協方差
x, y = np.random.multivariate_normal(mean, cov, 1000).T
plotSamples(x, y)
covMat = np.matrix(np.cov(x, y)) # 求 x 與 y 的協方差矩陣
Z = np.linalg.cholesky(covMat).I # 仿射矩陣
plotSamples(x, y, Z)
# 求馬氏距離
print '\n到原點的馬氏距離分別是:'
print dist.mahalanobis([0,0], [3,3], covMat.I), dist.mahalanobis([0,0], [-2,2], covMat.I)
# 求變換后的歐幾里得距離
dots = (Z * np.matrix([[3, -2, 0], [3, 2, 0]])).T
print '\n變換后到原點的歐幾里得距離分別是:'
print dist.minkowski([0, 0], np.array(dots[0]), 2), dist.minkowski([0, 0], np.array(dots[1]), 2)
夾角余弦
機器學習中可以把兩點看成是空間中的兩個向量,通過衡量兩向量之間的相似性來衡量樣本之間的相似性。
(1)二維平面上兩向量a(x1,y1),b(x2,y2)之間的夾角余弦公式:
也可直接通過向量運算:
(2) n維空間上兩點a(x1,x2……..xn),b(y1,y2……..yn)的夾角余弦公式:
余弦相似度(Cosine similarity):
余弦相似度與向量的幅值無關,只與向量的方向相關,夾角余弦越大表示兩個向量的夾角越小,夾角余弦越小表示兩向量的夾角越大。當兩個向量的方向重合時夾角余弦取最大值1,當兩個向量的方向完全相反夾角余弦取最小值-1。
相關系數( Correlation coefficient )與相關距離(Correlation distance)
(1) 相關系數的定義
相關系數是衡量隨機變量X與Y相關程度的一種方法,相關系數的取值范圍是[-1,1]。相關系數的絕對值越大,則表明X與Y相關度越高。當X與Y線性相關時,相關系數取值為1(正線性相關)或-1(負線性相關)。
(2)相關距離的定義
交叉熵與相對熵(kl散度)
參考之前的博客https://blog.csdn.net/qq_28266311/article/details/83994605
漢明距離
兩個等長字符串之間的漢明距離是兩個字符串對應位置的不同字符的個數。
例如:
1011101與 1001001 之間的漢明距離是2
2143896與 2233796 之間的漢明距離是3
irie與 rise之間的漢明距離是 3
杰卡德距離(Jaccard Distance)
杰卡德相似系數(Jaccard similarity coefficient):兩個集合A和B的交集元素在A,B的并集中所占的比例,稱為兩個集合的杰卡德相似系數,用符號J(A,B)表示:
- 杰卡德距離(Jaccard Distance):與杰卡德相似系數相反,用兩個集合中不同元素占所有元素的比例來衡量兩個集合的區分度:
參考
https://blog.csdn.net/wangpei1949/article/details/52926651
https://www.cnblogs.com/daniel-D/p/3244718.html
https://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html
總結
- 上一篇: 英雄祭坛培养哪个英雄
- 下一篇: 80×86汇编语言_站长窝