中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現距離和相似性計算

發布時間:2023-03-08 09:21:21 來源:億速云 閱讀:144 作者:iii 欄目:開發技術

本篇內容主要講解“Python如何實現距離和相似性計算”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python如何實現距離和相似性計算”吧!

歐氏距離

也稱歐幾里得距離,是指在m維空間中兩個點之間的真實距離。歐式距離在ML中使用的范圍比較廣,也比較通用,就比如說利用k-Means對二維平面內的數據點進行聚類,對魔都房價的聚類分析(price/m^2 與平均房價)等。

兩個n維向量a

(x11,x12.....x1n)

與 b

(x21,x22.....x2n)

間的歐氏距離

python 實現為:

def EuclideanDistance(x, y):
    import numpy as np
    x = np.array(x)
    y = np.array(y)
    return np.sqrt(np.sum(np.square(x-y)))

這里傳入的參數可以是任意維的,該公式也適應上邊的二維和三維

曼哈頓距離

Python如何實現距離和相似性計算

python 實現為:

def ManhattanDistance(x, y):
    import numpy as np
    x = np.array(x)
    y = np.array(y)
    return np.sum(np.abs(x-y))

切比雪夫距離

切比雪夫距離(Chebyshev Distance)的定義為:max( | x2-x1 | , |y2-y1 | , … ), 切比雪夫距離用的時候數據的維度必須是三個以上

python 實現為:

def ChebyshevDistance(x, y):
    import numpy as np
    x = np.array(x)
    y = np.array(y)
    return np.max(np.abs(x-y))

馬氏距離

有M個樣本向量X1~Xm,協方差矩陣記為S,均值記為向量μ,則其中樣本向量X到u的馬氏距離表示為

Python如何實現距離和相似性計算

python實現:

def MahalanobisDistance(x, y):
    '''
    馬氏居立中的(x,y)與歐幾里得距離的(x,y)不同,歐幾里得距離中的(x,y)指2個樣本,每個樣本的維數為x或y的維數;這里的(x,y)指向量是2維的,樣本個數為x或y的維數,若要計算n維變量間的馬氏距離則需要改變輸入的參數如(x,y,z)為3維變量。
    '''
    import numpy as np
    x = np.array(x)
    y = np.array(y)
    
    X = np.vstack([x,y])
    X_T = X.T
    sigma = np.cov(X)
    sigma_inverse = np.linalg.inv(sigma)
    
    d1=[]
    for i in range(0, X_T.shape[0]):
        for j in range(i+1, X_T.shape[0]):
            delta = X_T[i] - X_T[j]
            d = np.sqrt(np.dot(np.dot(delta,sigma_inverse),delta.T))
            d1.append(d)
        
    return d1

夾角余弦

Python如何實現距離和相似性計算

def moreCos(a,b):
    sum_fenzi = 0.0
    sum_fenmu_1,sum_fenmu_2 = 0,0
    for i in range(len(a)):
        sum_fenzi += a[i]*b[i]
        sum_fenmu_1 += a[i]**2 
        sum_fenmu_2 += b[i]**2 

    return sum_fenzi/( sqrt(sum_fenmu_1) * sqrt(sum_fenmu_2) )

閔可夫斯基距離

Python如何實現距離和相似性計算

當p=1時,就是曼哈頓距離

當p=2時,就是歐氏距離

當p→∞時,就是切比雪夫距離

python實現:

def MinkowskiDistance(x, y, p):
    import math
    import numpy as np
    zipped_coordinate = zip(x, y)
    return math.pow(np.sum([math.pow(np.abs(i[0]-i[1]), p) for i in zipped_coordinate]), 1/p)

漢明距離

兩個等長字符串s1與s2之間的漢明距離定義為將其中一個變為另外一個所需要作的最小替換次數

def hanmingDis(a,b):
    sumnum = 0
    for i in range(len(a)):
        if a[i]!=b[i]:
            sumnum += 1
    return sumnum

杰卡德距離 & 杰卡德相似系數

杰卡德距離,杰卡德距離用兩個集合中不同元素占所有元素的比例來衡量兩個集合的區分度。

Python如何實現距離和相似性計算

def jiekadeDis(a,b):
    set_a = set(a)
    set_b = set(b)
    dis = float(len( (set_a | set_b) - (set_a & set_b) ) )/ len(set_a | set_b)
    return dis

杰卡德相似系數

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

Python如何實現距離和相似性計算

def jiekadeXSDis(a,b):
    set_a = set(a)
    set_b = set(b)
    dis = float(len(set_a & set_b)  )/ len(set_a | set_b)
    return dis

相關系數 & 相關距離

相關系數

Python如何實現距離和相似性計算

import math

def c_Pearson(x, y):

    x_mean, y_mean = sum(x)/len(x), sum(y)/len(y)
    cov =0.0
    x_pow = 0.0
    y_pow = 0.0
    for i in range(len(x)):
        cov += (x[i]-x_mean) *(y[i] - y_mean)
    for i in range(len(x)):
        x_pow += math.pow(x[i] - x_mean, 2)
    for i in range(len(x)):
        y_pow += math.pow(y[i] - y_mean, 2)
    sumBm = math.sqrt(x_pow * y_pow)
    p = cov / sumBm

    return p

信息熵

衡量分布的混亂程度或分散程度的一種度量.

Python如何實現距離和相似性計算

import numpy as np

data=['a','b','c','a','a','b']
data1=np.array(data)
#計算信息熵的方法
def calc_ent(x):
    """
        calculate shanno ent of x
    """

    x_value_list = set([x[i] for i in range(x.shape[0])])
    ent = 0.0
    for x_value in x_value_list:
        p = float(x[x == x_value].shape[0]) / x.shape[0]
        logp = np.log2(p)
        ent -= p * logp

    return ent

到此,相信大家對“Python如何實現距離和相似性計算”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌拉特中旗| 延津县| 霍山县| 同心县| 德保县| 仙桃市| 商城县| 右玉县| 会宁县| 姜堰市| 临沧市| 抚顺县| 措美县| 沂源县| 治多县| 靖江市| 上饶市| 宁明县| 古浪县| 江阴市| 惠安县| 眉山市| 杂多县| 安康市| 鄂温| 琼中| 西藏| 金川县| 阿坝县| 浠水县| 莒南县| 南康市| 铁岭县| 怀柔区| 荆门市| 新化县| 溧阳市| 镇康县| 唐海县| 屯昌县| 潞城市|