自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通透!機(jī)器學(xué)習(xí)中常用的幾種距離度量方法

人工智能 機(jī)器學(xué)習(xí)
余弦相似度是通過計(jì)算兩個向量之間的余弦角度來度量它們的相似性。余弦相似度的值介于 -1 和 1 之間,1 表示完全相似,-1 表示完全不相似。

大家好,我是小寒。

今天給大家分享機(jī)器學(xué)習(xí)中經(jīng)常使用的不同類型的距離度量。

在機(jī)器學(xué)習(xí)中,距離度量是一種用于計(jì)算兩個數(shù)據(jù)點(diǎn)之間相似性或差異性的方法。它在許多算法中起著至關(guān)重要的作用,尤其是在無監(jiān)督學(xué)習(xí)(如聚類)和監(jiān)督學(xué)習(xí)(如最近鄰分類)中。

向量距離測量

讓我們首先了解機(jī)器學(xué)習(xí)中使用的不同向量距離測量。

1.歐幾里得距離

歐幾里得距離是最常見的距離度量,用于計(jì)算兩個點(diǎn)在 n 維空間中的直線距離。

import numpy as np

def euclidean_distance(x, y):
    return np.sqrt(np.sum((np.array(x) - np.array(y))**2))

# 示例
x = [1, 2, 3]
y = [4, 5, 6]
print(euclidean_distance(x, y))  # 輸出:5.196152422706632

2.曼哈頓距離

曼哈頓距離計(jì)算兩個點(diǎn)之間的絕對坐標(biāo)差的總和,適用于在規(guī)則網(wǎng)格上測量距離的情況,例如城市街道、棋盤格等。

曼哈頓距離的公式為

其中, x 和 y 是 n 維空間中的兩個點(diǎn),

def manhattan_distance(x, y):
    return sum(abs(a - b) for a, b in zip(x, y))

# 示例
x = [1, 2]
y = [4, 6]
print(manhattan_distance(x, y))  # 輸出:7

3.明科夫斯基距離

明科夫斯基距離是歐幾里得距離和曼哈頓距離的廣義形式,取決于參數(shù) p 的值。

當(dāng) p 為 1時(shí),為曼哈頓距離;當(dāng) p 為 2時(shí),為歐幾里得距離;當(dāng) p 為無窮大時(shí),為切比雪夫距離。

def minkowski_distance(x, y, p=2):
    return np.sum(np.abs(np.array(x) - np.array(y))**p)**(1/p)

# 示例
x = [1, 2, 3]
y = [4, 5, 6]
print(minkowski_distance(x, y, p=3))  # 輸出:4.3267487109222245

統(tǒng)計(jì)相似性

1.余弦相似度

余弦相似度是通過計(jì)算兩個向量之間的余弦角度來度量它們的相似性。

余弦相似度的值介于 -1 和 1 之間,1 表示完全相似,-1 表示完全不相似。

import numpy as np

def cosine_similarity(A, B):
    dot_product = np.dot(A, B)
    norm_A = np.linalg.norm(A)
    norm_B = np.linalg.norm(B)
    return dot_product / (norm_A * norm_B)

# 示例向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])

# 計(jì)算余弦相似度
similarity = cosine_similarity(A, B)
print("余弦相似度:", similarity)

2.皮爾遜相關(guān)系數(shù)

皮爾遜相關(guān)系數(shù)衡量的是兩個變量之間的線性相關(guān)性,取值范圍為 -1 到 1。

1 表示完全正相關(guān),-1 表示完全負(fù)相關(guān),0 表示無相關(guān)性。

import numpy as np

def pearson_correlation(A, B):
    mean_A = np.mean(A)
    mean_B = np.mean(B)
    numerator = np.sum((A - mean_A) * (B - mean_B))
    denominator = np.sqrt(np.sum((A - mean_A)**2)) * np.sqrt(np.sum((B - mean_B)**2))
    return numerator / denominator

# 示例向量
A = np.array([1, 2, 3, 4, 5])
B = np.array([5, 4, 3, 2, 1])

# 計(jì)算皮爾遜相關(guān)系數(shù)
correlation = pearson_correlation(A, B)
print("皮爾遜相關(guān)系數(shù):", correlation)

3.杰卡德指數(shù)

杰卡德指數(shù)(Jaccard Index),又稱杰卡德相似系數(shù)(Jaccard Similarity Coefficient),是一種用于衡量兩個集合之間相似度的統(tǒng)計(jì)指標(biāo)。

它通過計(jì)算兩個集合的交集和并集的比率來衡量它們的相似性。

def jaccard_index(set1, set2):
    intersection = len(set(set1).intersection(set(set2)))
    union = len(set(set1).union(set(set2)))
    return intersection / union

# 示例數(shù)據(jù)
set1 = {1, 2, 3}
set2 = {2, 3, 4}

print(jaccard_index(set1, set2))  # 輸出:0.5

基于編輯的距離測量

1.漢明距離

它測量兩個等長字符串之間不同字符的數(shù)量。

def hamming_distance(x, y):
    if len(x) != len(y):
        raise ValueError("Strings must be of the same length")
    return sum(el1 != el2 for el1, el2 in zip(x, y))

# 示例
x = '1011101'
y = '1001001'
print(hamming_distance(x, y))

2.編輯距離

它根據(jù)將一個字符串轉(zhuǎn)換為另一個字符串需要多少次更正來計(jì)算。允許的更正包括插入、刪除和替換。

def edit_distance(s1, s2):
    m, n = len(s1), len(s2)
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    
    for i in range(m + 1):
        for j in range(n + 1):
            if i == 0:
                dp[i][j] = j
            elif j == 0:
                dp[i][j] = i
            elif s1[i - 1] == s2[j - 1]:
                dp[i][j] = dp[i - 1][j - 1]
            else:
                dp[i][j] = 1 + min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1])
    
    return dp[m][n]

# 示例
s1 = "kitten"
s2 = "sitting"
print(edit_distance(s1, s2))

責(zé)任編輯:武曉燕 來源: 程序員學(xué)長
相關(guān)推薦

2022-10-28 15:19:28

機(jī)器學(xué)習(xí)距離度量數(shù)據(jù)集

2023-11-29 14:34:15

機(jī)器學(xué)習(xí)統(tǒng)計(jì)學(xué)

2023-11-28 12:08:56

機(jī)器學(xué)習(xí)算法人工智能

2016-09-06 22:16:42

JavaDOCXPDF

2024-07-15 08:13:12

BERT模型嵌入

2018-09-13 22:56:15

機(jī)器學(xué)習(xí)損失函數(shù)深度學(xué)習(xí)

2024-05-23 16:48:42

機(jī)器學(xué)習(xí)算法人工智能

2024-04-12 14:04:17

機(jī)器學(xué)習(xí)DNN

2009-06-09 10:05:41

jQuery

2023-05-18 07:48:01

.NET網(wǎng)絡(luò)編程

2024-06-13 08:36:11

2012-06-04 09:36:50

2024-07-11 11:07:41

2009-06-11 13:49:30

2020-08-25 08:53:02

Linux端口轉(zhuǎn)發(fā)

2010-05-17 15:17:06

MySQL常用操作

2015-09-21 15:00:38

機(jī)器學(xué)習(xí)

2022-12-28 08:44:47

機(jī)器學(xué)習(xí)空間距離

2024-01-17 13:58:00

算法C#冒泡排序

2024-06-12 08:05:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號