7. 夾角餘弦(Cosine)html
也能夠叫餘弦類似度。 幾何中夾角餘弦可用來衡量兩個向量方向的差別,python
import numpy as np x=np.random.random(10) y=np.random.random(10) #方法一:根據公式求解 d1=np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y)) #方法二:根據scipy庫求解 from scipy.spatial.distance import pdist X=np.vstack([x,y]) d2=1-pdist(X,'cosine')
兩個向量徹底相等時,餘弦值爲1,以下的代碼計算出來的d=1。dom
d=1-pdist([x,x],'cosine')
8. 皮爾遜相關係數(Pearson correlation)機器學習
(1) 皮爾遜相關係數的定義
學習
前面提到的餘弦類似度只與向量方向有關,但它會受到向量的平移影響,在夾角餘弦公式中若是將 x 平移到 x+1, 餘弦值就會改變。怎樣才能實現平移不變性?這就要用到皮爾遜相關係數(Pearson correlation),有時候也直接叫相關係數。編碼
若是將夾角餘弦公式寫成:spa
表示向量x和向量y之間的夾角餘弦,則皮爾遜相關係數則可表示爲:3d
皮爾遜相關係數具備平移不變性和尺度不變性,計算出了兩個向量(維度)的相關性。code
在python中的實現:orm
import numpy as np x=np.random.random(10) y=np.random.random(10) #方法一:根據公式求解 x_=x-np.mean(x) y_=y-np.mean(y) d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_)) #方法二:根據numpy庫求解 X=np.vstack([x,y]) d2=np.corrcoef(X)[0][1]
相關係數是衡量隨機變量X與Y相關程度的一種方法,相關係數的取值範圍是[-1,1]。相關係數的絕對值越大,則代表X與Y相關度越高。當X與Y線性相關時,相關係數取值爲1(正線性相關)或-1(負線性相關)。
9. 漢明距離(Hamming distance)
(1)漢明距離的定義
兩個等長字符串s1與s2之間的漢明距離定義爲將其中一個變爲另一個所須要做的最小替換次數。例如字符串「1111」與「1001」之間的漢明距離爲2。
應用:信息編碼(爲了加強容錯性,應使得編碼間的最小漢明距離儘量大)。
在python中的實現:
import numpy as np from scipy.spatial.distance import pdist x=np.random.random(10)>0.5 y=np.random.random(10)>0.5 x=np.asarray(x,np.int32) y=np.asarray(y,np.int32) #方法一:根據公式求解 d1=np.mean(x!=y) #方法二:根據scipy庫求解 X=np.vstack([x,y]) d2=pdist(X,'hamming')
10. 傑卡德類似係數(Jaccard similarity coefficient)
(1) 傑卡德類似係數
兩個集合A和B的交集元素在A,B的並集中所佔的比例,稱爲兩個集合的傑卡德類似係數,用符號J(A,B)表示。
傑卡德類似係數是衡量兩個集合的類似度一種指標。
(2) 傑卡德距離
與傑卡德類似係數相反的概念是傑卡德距離(Jaccard distance)。傑卡德距離可用以下公式表示:
傑卡德距離用兩個集合中不一樣元素佔全部元素的比例來衡量兩個集合的區分度。
(3) 傑卡德類似係數與傑卡德距離的應用
可將傑卡德類似係數用在衡量樣本的類似度上。
樣本A與樣本B是兩個n維向量,並且全部維度的取值都是0或1。例如:A(0111)和B(1011)。咱們將樣本當作是一個集合,1表示集合包含該元素,0表示集合不包含該元素。
在python中的實現:
import numpy as np from scipy.spatial.distance import pdist x=np.random.random(10)>0.5 y=np.random.random(10)>0.5 x=np.asarray(x,np.int32) y=np.asarray(y,np.int32) #方法一:根據公式求解 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) #方法二:根據scipy庫求解 X=np.vstack([x,y]) d2=pdist(X,'jaccard')
11. 佈雷柯蒂斯距離(Bray Curtis Distance)
Bray Curtis距離主要用於生態學和環境科學,計算座標之間的距離。該距離取值在[0,1]之間。它也能夠用來計算樣本之間的差別。
樣本數據:
計算:
在python中的實現:
import numpy as np from scipy.spatial.distance import pdist x=np.array([11,0,7,8,0]) y=np.array([24,37,5,18,1]) #方法一:根據公式求解 up=np.sum(np.abs(y-x)) down=np.sum(x)+np.sum(y) d1=(up/down) #方法二:根據scipy庫求解 X=np.vstack([x,y]) d2=pdist(X,'braycurtis')
轉自:https://www.cnblogs.com/denny402/p/7028832.html