在機器學習和人工智慧領域,距離(distance)、相似度(similarity)是經常出現的基本概念,關於距離和相似度度量的方法也多種多樣,本文將總結一些常用的距離計算方法:
歐氏距離 d=(
xi−y
i)2d = \sqrt
d=(xi
−yi
)2在二維平面即是兩點間的直線距離,是最常用的距離度量的方法之一:
/**
** @param p1
* @param p2
* @return euclidean distance
*/def euclidean(p1: seq[double], p2: seq[double]) =
曼哈頓距離 d=∑
r=1n
∣xi−
yi∣d = \sum_^n|x_i-y_i|
d=r=1∑
n∣x
i−y
i∣曼哈頓距離(manhattan distance)是由十九世紀的赫爾曼·閔可夫斯基所創詞彙 ,是種使用在幾何度量空間的幾何學用語,用以標明兩個點在標準座標系上的絕對軸距總和。
/**
** @param p1
* @param p2
* @return manhattan distance
*/def manhattan(p1: seq[double], p2: seq[double]) =
歐式距離和曼哈頓距離在二維平面空間的圖示:
切比雪夫距離 d=m
ax(∣
xi−y
i∣)d= max(|x_i-y_i|)
d=max(
∣xi
−yi
∣)是向量空間中的一種度量,二個點之間的距離定義是其各座標數值差絕對值的最大值:
閔氏距離
閔氏距離不是一種距離,而是一組距離的定義,上面提到的歐氏距離、曼哈頓距離、切比雪夫距離都是屬於閔氏距離。
閔氏距離的定義如下:
d =∑
r=1n
∣xi−
yi∣p
pd = \sqrt[p]^n|x_i-y_i|^p }
d=pr=1
∑n∣
xi−
yi∣
p
/**
** @param p1
* @param p2
* @param p
* @return minkowski distance
*/def minkowski(p1: seq[double], p2: seq[double], p: int) =
當 p=1 時,就是曼哈頓距離
當 p=2 時,就是歐式距離
當 p趨於無窮 時,就是閔氏距離
傑卡德距離
傑卡德距離(jaccard distance) 是用來衡量兩個集合差異性的一種指標。
/**
** @param p1
* @param p2
* @return jaccard distance d(a,b) = 1-j(a,b) 表示jaccard相似係數
*/def jaccard(p1: seq[any], p2: seq[any]) =
tanimoto 距離
tanimoto係數是jaccard係數的擴充套件
d =x
ty∣∣
x∣∣2
+∣∣y
∣∣2+
xtyd =
d=∣∣x∣
∣2+∣
∣y∣∣
2+xt
yxty
/**
** @param p1
* @param p2
* @return tanimoto distance
*/def tanimoto(p1: seq[double], p2: seq[double]) =
余弦距離
余弦相似度是計算兩個向量夾角的余弦值來度量兩個向量的相似度,取值在0-1之間,越大則表示兩個向量相似度越高:
d =x
ty∣∣
x∣∣∣
∣y∣∣
d =
d=∣∣x∣
∣∣∣y
∣∣xt
y
/**
** @param p1
* @param p2
*/def cos(p1: seq[double], p2: seq[double]) =
機器學習中常用距離的小結
設有兩個n維向量a x11,x12,x1n 和b x21,x22,x2n 1 曼哈頓距離 曼哈頓距離也稱為城市街區距離,數學表示式為 2 歐氏距離 歐氏距離就是我們熟悉的l2範數,數學表示式為 3 閔可夫斯基距離 閔可夫斯基距離可以看作歐氏距離的一種推廣,數學表示式為 可以看到,當p值取1時,閔可夫...
機器學習 深度學習中常用的Linux命令
作為一名coder,linux命令是基本生存技能,但linux的命令何其多,要想完全掌握可不易。在我平常的學習和工作中,linux伺服器主要是用來跑ml dl 的 linux運維大神請略過 因此本文將主要從跑 的角度 一下常用的linux操作。告別手指抽筋的方向鍵 ctrl e 游標回到行末 ctr...
機器學習中常用的矩陣求導公式
機器學習中常用的矩陣求導公式 矩陣求導好像讀書的時候都沒學過,因為講矩陣的課程上不講求導,講求導的課又不提矩陣。如果從事機器學習方面的工作,那就一定會遇到矩陣求導的東西。維基百科上 根據y與x的不同型別 實值,向量,矩陣 給出了具體的求導公式,以及一堆相關的公式,查起來都費勁。其實在實際的機器學習工...