Scala實現機器學習中常用的相識度和距離計算

2021-09-25 02:36:02 字數 2720 閱讀 1999

在機器學習和人工智慧領域,距離(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的不同型別 實值,向量,矩陣 給出了具體的求導公式,以及一堆相關的公式,查起來都費勁。其實在實際的機器學習工...