距離計(jì)算在自然語(yǔ)言處理中得到廣泛使用,不同距離計(jì)算方式應(yīng)用與不同的環(huán)境,其中也產(chǎn)生了很多不同的效果。
1 余弦距離
余弦?jiàn)A角也可以叫余弦相似度。集合中夾角可以用來(lái)衡量?jī)蓚€(gè)向量方向的差異,機(jī)器學(xué)習(xí)中借用這一概念來(lái)衡量樣本向量之間的差異。
余弦取值范圍為[-1,1]。求得兩個(gè)向量的夾角,并得出夾角對(duì)應(yīng)的余弦值,詞余弦值就可以用來(lái)表示這兩個(gè)向量的相似性。夾角越小,趨近于0度,余弦值越接近于1,它們的方向就更加吻合,即更加相似。當(dāng)兩個(gè)向量的方向完全相反時(shí),夾角的余弦取最小值-1。當(dāng)余弦值為0時(shí),兩向量正交,夾角為90度。因此可以看出,余弦相似度于向量的幅值無(wú)關(guān),于向量的方向相關(guān)。
公式描述:
Python代碼實(shí)現(xiàn):
import numpy as np# np.dot(vec1,vec2) 量向量(數(shù)組):兩個(gè)數(shù)組的點(diǎn)積,即元素對(duì)應(yīng)相乘后求和# np.linalg.norm(vec1):即求vec1向量的二范數(shù)(向量的模)vec1 = [1,2,3,4]vec2 = [5,6,7,8]dist1 = np.dot(vec1, vec2)/(np.linalg.norm(vec1)*np.linalg.norm(vec2))print("余弦距離測(cè)試結(jié)果為:\t"+str(dist1))
2 歐氏距離
歐幾里得距離即歐幾里得空間中兩點(diǎn)間的直線距離。
Python實(shí)現(xiàn):
import numpy as npvec1 = np.mat([1,2,3,4]) # 生成numpy矩陣vec2 = np.mat([5,6,7,8])# 根據(jù)公式求解1dist1 = np.sqrt(np.sum(np.square(vec1 - vec2)))print("歐式距離測(cè)試結(jié)果是:\t"+ str(dist1))dist2 = np.sqrt((vec1-vec2)*(vec1-vec2).T)# 根據(jù)公式求解2print("歐式距離測(cè)試結(jié)果是:\t"+ str(dist2))
3 曼哈頓距離
曼哈頓距離也成為城市街區(qū)距離。用來(lái)表示兩個(gè)點(diǎn)在標(biāo)準(zhǔn)坐標(biāo)系上的絕對(duì)軸距之和,即從一個(gè)路口到另外一個(gè)路口,駕駛距離不是兩點(diǎn)之間的直線距離。
Python實(shí)現(xiàn)
import numpy as npvec1 = np.mat([1,2,3,4])vec2 = np.mat([6,7,8,9])dist = np.sum(np.abs(vec1 - vec2))print("曼哈頓距離測(cè)試結(jié)果是:\t"+str(dist))
4 明可夫斯基距離
明氏距離又叫明可夫斯基距離,是歐氏空間中的一種測(cè)度,被看作歐氏距離和曼哈頓距離的一種推廣。
當(dāng)p=1時(shí),就是曼哈頓距離
當(dāng)p=2時(shí),就是歐氏距離
當(dāng)p=3時(shí),就是切比雪夫距離
python實(shí)現(xiàn)
可參照之前代碼
5 切比雪夫距離
python實(shí)現(xiàn)
import numpy as npvec1 = np.mat([1,2,3,4])vec2 = np.mat([5,6,7,8])dist = np.max(np.abs(vec1 - vec2))print("切比雪夫距離測(cè)試結(jié)果是:\t" + str(dist))
6 杰卡德距離
杰卡德(Jaccard)相似系數(shù):兩個(gè)集合A和B的交集在元素在A、B的并集中所占的比例,稱為兩個(gè)集合的杰卡德相似系數(shù),用符號(hào)J(A,B)表示。杰卡德距離:在占比中所取的是兩個(gè)集合中不同元素。
Python實(shí)現(xiàn):
import numpy as npv1 = np.random.random(10) > 0.5
# 生成10個(gè)true false數(shù)據(jù)(即0,1)v2 = np.random.random(10) > 0.5vec1 = np.asanyarray(v1, np.int32)
# 轉(zhuǎn)換位0、1矩陣vec2 = np.asanyarray(v2, np.int32)# 距離計(jì)算up = np.double(np.bitwise_and((vec1 != vec2),np.bitwise_or(vec1 !=0,vec2!=0)).sum())
# 涉及到數(shù)學(xué)邏輯運(yùn)算down = np.double(np.bitwise_or(vec1 !=0 ,vec2!=0).sum())
# 取并集, (vec1 !=0 ,vec2!=0)先轉(zhuǎn)對(duì)應(yīng)元素為true ,false的矩陣dist = (up/down)print("杰卡德距離測(cè)試結(jié)果是:\t"+str(dist))
7 漢明距離
在信息論中,兩個(gè)登場(chǎng)字符串之間的漢明距離對(duì)應(yīng)位置上的不同字符的個(gè)數(shù)。也就是說(shuō),將一個(gè)字符串變換成另一個(gè)字符串所需要替換的字符個(gè)數(shù)。
例如:“toned”與“roses”之間的漢明距離就是3
python實(shí)現(xiàn):
import numpy as npv1=np.random.random(10)>0.5v2=np.random.random(10)>0.5vec1=np.asarray(v1,np.int32)vec2=np.asarray(v2,np.int32)dist=np.mean(vec1!=vec2)
# 取均值print("漢明距離測(cè)試結(jié)果是:\t"+str(dist))
-
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86343
原文標(biāo)題:距離計(jì)算總結(jié)
文章出處:【微信號(hào):NLP_lover,微信公眾號(hào):自然語(yǔ)言處理愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
關(guān)于TCP/IP協(xié)議的知識(shí)總結(jié)

關(guān)于怎樣提高無(wú)線通信距離
關(guān)于電機(jī)選型的總結(jié)
關(guān)于計(jì)算機(jī)組成原理的知識(shí)點(diǎn)總結(jié)的太棒了
關(guān)于通信原理介紹總結(jié)
云計(jì)算轉(zhuǎn)型技巧歸納總結(jié)
DXP關(guān)于板層說(shuō)明及總結(jié)
關(guān)于Linux下多線程編程技術(shù)學(xué)習(xí)總結(jié)

LED投光燈的投射距離應(yīng)該如何計(jì)算
基于曼哈頓距離的隱私安全計(jì)算協(xié)議綜述

評(píng)論