常見的相似度度量算法




本文目錄:

  1. 歐幾里得距離相似度

  2. 曼哈頓距離

  3. 切比雪夫距離(Chebyshev Distance)

  4. 閔可夫斯基距離(Minkowski Distance)

  5. 標(biāo)準(zhǔn)化歐氏距離 (Standardized Euclidean distance )

  6. 馬氏距離(Mahalanobis Distance)

  7. 余弦相似度

  8. 漢明距離(Hamming distance)

  9. 杰卡德相似系數(shù)(Jaccard similarity coefficient)

  10. 皮爾遜相關(guān)系數(shù)(Pearson product-moment correlation coefficient)




1 歐幾里得距離相似度:

??定義在兩個向量(兩個點)上:點x和點y的歐式距離為:

歐幾里得距離相似度

??常利用歐幾里得距離描述相似度時羡铲,需要取倒數(shù)歸一化究恤,sim = 1.0/(1.0+distance)北救,利用numpy實現(xiàn)如下:

python實現(xiàn)歐式距離

# 計算歐式距離
distance = np.linalg.norm(data_np[i]-data_np[j])
# 歸一化
sim[i][j] = 1.0 / (1.0 + dis)

2 曼哈頓距離

??從名字就可以猜出這種距離的計算方法了衔瓮。想象你在曼哈頓要從一個十字路口開車到另外一個十字路口淮椰,駕駛距離是兩點間的直線距離嗎?顯然不是最蕾,除非你能穿越大樓钧忽。實際駕駛距離就是這個“曼哈頓距離”。而這也是曼哈頓距離名稱的來源省咨, 曼哈頓距離也稱為城市街區(qū)距離(City Block distance)肃弟。

??(1)二維平面兩點a(x1,y1)與b(x2,y2)間的曼哈頓距離

image

??(2)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的曼哈頓距離

image

??python實現(xiàn)曼哈頓距離:

distance = np.sum(np.abs(data_np[i] - data_np[j]))  # 方法一,采用numpy直接計算

distance = np.linalg.norm(data_np[i] - data_np[j], ord = 1) # np.linalg.norm(x, ord=None, axis=None, keepdims=False), ord表示范數(shù)類型零蓉,axis表示處理維度笤受,keepding:是否保持矩陣的二維特性;


3 切比雪夫距離(Chebyshev Distance)

??國際象棋玩過么敌蜂?國王走一步能夠移動到相鄰的8個方格中的任意一個箩兽。那么國王從格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走試試章喉。你會發(fā)現(xiàn)最少步數(shù)總是max( | x2-x1 | , | y2-y1 | ) 步 汗贫。有一種類似的一種距離度量方法叫切比雪夫距離。

??(1)二維平面兩點a(x1,y1)與b(x2,y2)間的切比雪夫距離

image

??(2)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的切比雪夫距離

image

??python實現(xiàn)切比雪夫距離:

distance = np.abs(data_np[i] - data_np[j]).max()    #方法一秸脱,采用numpy直接計算
distance = np.linalgnorm(data_np[i]- data_np[j], ord = np.inf)  # 方法二落包,np.linalgnorm,np.inf指無窮大;


4 閔可夫斯基距離(Minkowski Distance)

??閔氏距離不是一種距離撞反,而是一組距離的定義妥色。

4.1 閔氏距離的定義

??兩個n維變量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的閔可夫斯基距離定義為:

image

??其中p是一個變參數(shù)搪花。

??當(dāng)p=1時遏片,就是曼哈頓距離

??當(dāng)p=2時,就是歐氏距離

??當(dāng)p→∞時撮竿,就是切比雪夫距離

??根據(jù)變參數(shù)的不同吮便,閔氏距離可以表示一類的距離。

4.2 閔氏距離的缺點

??閔氏距離幢踏,包括曼哈頓距離髓需、歐氏距離和切比雪夫距離都存在明顯的缺點。

??舉個例子:二維樣本(身高,體重)房蝉,其中身高范圍是150190僚匆,體重范圍是5060微渠,有三個樣本:a(180,50),b(190,50)咧擂,c(180,60)逞盆。那么a與b之間的閔氏距離(無論是曼哈頓距離、歐氏距離或切比雪夫距離)等于a與c之間的閔氏距離松申,但是身高的10cm真的等價于體重的10kg么云芦?因此用閔氏距離來衡量這些樣本間的相似度很有問題。

??簡單說來贸桶,閔氏距離的缺點主要有兩個:

??(1)將各個分量的量綱(scale)舅逸,也就是“單位”當(dāng)作相同的看待了。

??(2)沒有考慮各個分量的分布(期望皇筛,方差等)可能是不同的琉历。

4.3 python實現(xiàn)閔氏距離:

distance = np.linalg.norm(np_data[i] - data_np[j], ord = p) # ord表示范數(shù)類型


5 標(biāo)準(zhǔn)化歐氏距離 (Standardized Euclidean distance )

??標(biāo)準(zhǔn)歐氏距離的定義

??標(biāo)準(zhǔn)化歐氏距離是針對簡單歐氏距離的缺點而作的一種改進(jìn)方案。標(biāo)準(zhǔn)歐氏距離的思路:既然數(shù)據(jù)各維分量的分布不一樣设联,好吧善已!那我先將各個分量都“標(biāo)準(zhǔn)化”到均值、方差相等吧离例。均值和方差標(biāo)準(zhǔn)化到多少呢换团?這里先復(fù)習(xí)點統(tǒng)計學(xué)知識吧,假設(shè)樣本集X的均值(mean)為m宫蛆,標(biāo)準(zhǔn)差(standard deviation)為s艘包,那么X的“標(biāo)準(zhǔn)化變量”表示為:

??而且標(biāo)準(zhǔn)化變量的數(shù)學(xué)期望為0,方差為1耀盗。因此樣本集的標(biāo)準(zhǔn)化過程(standardization)用公式描述就是:

image

??標(biāo)準(zhǔn)化后的值 = ( 標(biāo)準(zhǔn)化前的值 - 分量的均值 ) /分量的標(biāo)準(zhǔn)差

??經(jīng)過簡單的推導(dǎo)就可以得到兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的標(biāo)準(zhǔn)化歐氏距離的公式:

image

??如果將方差的倒數(shù)看成是一個權(quán)重想虎,這個公式可以看成是一種加權(quán)歐氏距離(Weighted Euclidean distance)。


6 馬氏距離(Mahalanobis Distance)

6.1 馬氏距離定義

??有M個樣本向量X1~Xm叛拷,協(xié)方差矩陣記為S舌厨,均值記為向量μ,則其中樣本向量X到u的馬氏距離表示為:

image

??而其中向量Xi與Xj之間的馬氏距離定義為:

image

??若協(xié)方差矩陣是單位矩陣(各個樣本向量之間獨立同分布),則公式就成了:

image

??也就是歐氏距離了忿薇。

??若協(xié)方差矩陣是對角矩陣裙椭,公式變成了標(biāo)準(zhǔn)化歐氏距離。

6.2 馬氏距離的優(yōu)缺點

??馬氏距離的優(yōu)缺點:量綱無關(guān)署浩,排除變量之間的相關(guān)性的干擾揉燃。


7 余弦相似度

??幾何中夾角余弦可用來衡量兩個向量方向的差異,機(jī)器學(xué)習(xí)中借用這一概念來衡量樣本向量之間的差異筋栋。

??在二維空間中向量A(x1,y1)與向量B(x2,y2)的夾角余弦公式:

image

??兩個n維樣本點a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夾角余弦

??類似的炊汤,對于兩個n維樣本點a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用類似于夾角余弦的概念來衡量它們間的相似程度。

image

??即:

image

??夾角余弦取值范圍為[-1,1]抢腐。夾角余弦越大表示兩個向量的夾角越小姑曙,夾角余弦越小表示兩向量的夾角越大。當(dāng)兩個向量的方向重合時夾角余弦取最大值1迈倍,當(dāng)兩個向量的方向完全相反夾角余弦取最小值-1渣磷。

python實現(xiàn)余弦相似度:

num = np.dot(data_np[i], data_np[j]) #若為行向量則 A * B 
denom = linalg.norm(A) * linalg.norm(B)  
cos = num / denom #余弦值  
sim = 0.5 + 0.5 * cos #歸一化 


8 漢明距離(Hamming distance)

??兩個等長字符串s1與s2之間的漢明距離定義為將其中一個變?yōu)榱硗庖粋€所需要作的最小替換次數(shù)。例如字符串“1111”與“1001”之間的漢明距離為2授瘦。

??應(yīng)用:信息編碼(為了增強(qiáng)容錯性醋界,應(yīng)使得編碼間的最小漢明距離盡可能大)。

python實現(xiàn)漢明距離:

smstr=np.nonzero(np_data[i] - np_data[j])
sim= np.shape(smstr[0])[0]


9 杰卡德相似系數(shù)(Jaccard similarity coefficient)

9.1 杰卡德相似系數(shù)

??兩個集合A和B的交集元素在A提完,B的并集中所占的比例形纺,稱為兩個集合的杰卡德相似系數(shù),用符號J(A,B)表示徒欣。

image

??杰卡德相似系數(shù)是衡量兩個集合的相似度一種指標(biāo)逐样。

9.2 杰卡德距離

??與杰卡德相似系數(shù)相反的概念是杰卡德距離(Jaccard distance)。杰卡德距離可用如下公式表示:

image

??杰卡德距離用兩個集合中不同元素占所有元素的比例來衡量兩個集合的區(qū)分度打肝。

9.3 杰卡德相似系數(shù)與杰卡德距離的應(yīng)用

??可將杰卡德相似系數(shù)用在衡量樣本的相似度上脂新。

??樣本A與樣本B是兩個n維向量,而且所有維度的取值都是0或1粗梭。例如:A(0111)和B(1011)争便。我們將樣本看成是一個集合,1表示集合包含該元素断医,0表示集合不包含該元素滞乙。

??p :樣本A與B都是1的維度的個數(shù)

??q :樣本A是1,樣本B是0的維度的個數(shù)

??r :樣本A是0鉴嗤,樣本B是1的維度的個數(shù)

??s :樣本A與B都是0的維度的個數(shù)

??這里p+q+r可理解為A與B的并集的元素個數(shù)斩启,而p是A與B的交集的元素個數(shù)。

??而樣本A與B的杰卡德距離表示為:

image
import scipy.spatial.distance as dist

matv=np.array([data_np[i],data_np[j]])
dis=dist.pdist(matv,'jaccard')


10 皮爾遜相關(guān)系數(shù)(Pearson product-moment correlation coefficient)

??皮爾遜相關(guān)系數(shù)即為相關(guān)系數(shù) ( Correlation coefficient )與相關(guān)距離(Correlation distance)

??相關(guān)系數(shù)的定義

image

??相關(guān)系數(shù)是衡量隨機(jī)變量X與Y相關(guān)程度的一種方法醉锅,相關(guān)系數(shù)的取值范圍是[-1,1]兔簇。相關(guān)系數(shù)的絕對值越大,則表明X與Y相關(guān)度越高硬耍。當(dāng)X與Y線性相關(guān)時垄琐,相關(guān)系數(shù)取值為1(正線性相關(guān))或-1(負(fù)線性相關(guān))。

image








Reference:

1.機(jī)器學(xué)習(xí)中的相似性度量

2.推薦算法入門(1)相似度計算方法大全

3.Python Numpy計算各類距離

4.皮爾遜積矩相關(guān)系數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末默垄,一起剝皮案震驚了整個濱河市此虑,隨后出現(xiàn)的幾起案子甚纲,更是在濱河造成了極大的恐慌口锭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鹃操,居然都是意外死亡韭寸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門荆隘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恩伺,“玉大人,你說我怎么就攤上這事椰拒【” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵燃观,是天一觀的道長褒脯。 經(jīng)常有香客問我,道長缆毁,這世上最難降的妖魔是什么番川? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮脊框,結(jié)果婚禮上颁督,老公的妹妹穿的比我還像新娘。我一直安慰自己浇雹,他們只是感情好沉御,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昭灵,像睡著了一般嚷节。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虎锚,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天硫痰,我揣著相機(jī)與錄音,去河邊找鬼窜护。 笑死效斑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柱徙。 我是一名探鬼主播缓屠,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼护侮!你這毒婦竟也來了敌完?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤羊初,失蹤者是張志新(化名)和其女友劉穎滨溉,沒想到半個月后什湘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡晦攒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年闽撤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脯颜。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡哟旗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栋操,到底是詐尸還是另有隱情闸餐,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布矾芙,位于F島的核電站绎巨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蠕啄。R本人自食惡果不足惜场勤,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一蘑险、第九天 我趴在偏房一處隱蔽的房頂上張望劫瞳。 院中可真熱鬧,春花似錦狠鸳、人聲如沸哈街。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骚秦。三九已至她倘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間作箍,已是汗流浹背硬梁。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留胞得,地道東北人荧止。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像阶剑,于是被迫代替她去往敵國和親跃巡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容