文章目錄
- 前言
- 一、距離度量
- 1.1 歐幾里得距離(Euclidean Distance)
- 1.2 曼哈頓距離(Manhattan Distance)
- 1.3 切比雪夫距離(Chebyshev Distance)
- 1.4 閔可夫斯基距離(Minkowski Distance)
- 1.5 余弦距離(Cosine Distance)
- 代碼演示
- 總結
- 二、相似度度量
- 2.1 余弦相似度(Cosine Similarity)
- 2.2 皮爾遜相關系數(Pearson Correlation Coefficient)
- 2.3 杰卡德相似系數(Jaccard Similarity Coefficient)
- 2.4 漢明距離(Hamming Distance)
- 2.5 相關距離(Correlation Distance)
- 代碼演示
- 總結
前言
計算樣本之間的相似度通常可以通過計算樣本之間的距離來實現,盡管這不是唯一的方法。距離度量和相似度度量是兩個相關但不同的概念。距離度量通常用于表示樣本之間的不相似程度,而相似度度量則用于表示樣本之間的相似程度。
一、距離度量
1.1 歐幾里得距離(Euclidean Distance)
歐氏距離是兩個點在 n 維空間中直線距離的度量。它是最常見的距離度量方法之一,用于計算兩個向量之間的距離。
1.2 曼哈頓距離(Manhattan Distance)
曼哈頓距離,又稱為城市街區距離,是指兩個點在 n 維空間中各個坐標軸上的距離之和。
1.3 切比雪夫距離(Chebyshev Distance)
切比雪夫距離,又稱為棋盤距離,是指兩個點在 n 維空間中各個坐標軸上的最大距離。
1.4 閔可夫斯基距離(Minkowski Distance)
閔可夫斯基距離是歐氏距離和曼哈頓距離的廣義形式,通過調整參數 𝑝,可以得到不同的距離度量。
1.5 余弦距離(Cosine Distance)
通過計算兩個樣本點之間夾角的余弦值的補值來衡量相似度。
代碼演示
import numpy as np
from sklearn.metrics.pairwise import euclidean_distances, manhattan_distances
from scipy.spatial.distance import chebyshev, minkowski, cosine# 示例向量
vector1 = np.array([1.2, 2.3, 3.4, 4.5])
vector2 = np.array([4.1, 5.2, 6.3, 7.4])# 歐幾里得距離
euclidean_dist = euclidean_distances([vector1], [vector2])
print(f'Euclidean Distance: {euclidean_dist[0][0]}')# 曼哈頓距離
manhattan_dist = manhattan_distances([vector1], [vector2])
print(f'Manhattan Distance: {manhattan_dist[0][0]}')# 切比雪夫距離
chebyshev_dist = chebyshev(vector1, vector2)
print(f'Chebyshev Distance: {chebyshev_dist}')# 閔可夫斯基距離(p=3)
minkowski_dist = minkowski(vector1, vector2, p=3)
print(f'Minkowski Distance (p=3): {minkowski_dist}')# 余弦相似度
cosine_dist = cosine(vector1, vector2)
print(f'Cosine Distance: {cosine_dist}')
總結
在距離度量的五種方法中,歐幾里得距離(Euclidean Distance)、曼哈頓距離(Manhattan Distance)、余弦距離 是最常用的三種。
歐幾里得距離:適用于低維和中維數據,廣泛用于各種機器學習算法。(低維通常在1-10維之間,中維在10—100之間)
曼哈頓距離:適用于高維數據,尤其是特征獨立時。(高維>100維)
余弦距離:適用于高維稀疏數據,特別是文本數據和推薦系統。
二、相似度度量
2.1 余弦相似度(Cosine Similarity)
衡量兩個向量的方向相似度,而不關注它們的大小。
2.2 皮爾遜相關系數(Pearson Correlation Coefficient)
衡量兩個變量之間的線性相關性。
2.3 杰卡德相似系數(Jaccard Similarity Coefficient)
衡量兩個集合的交集與并集的比值,常用于文本或集合相似度。
2.4 漢明距離(Hamming Distance)
計算兩個樣本在相同位置上不同元素的數量,常用于二進制數據。
2.5 相關距離(Correlation Distance)
計算兩個變量之間的相關性,反映了兩個向量在統計上的相似程度,是皮爾遜相關系數的補數。
代碼演示
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from scipy.spatial.distance import correlation, jaccard, hamming
from scipy.stats import pearsonr# 示例向量
vector1 = np.array([1.2, 2.3, 3.4, 4.5])
vector2 = np.array([4.1, 5.2, 6.3, 7.4])# 1. 余弦相似度(Cosine Similarity)
cosine_sim = cosine_similarity([vector1], [vector2])
print(f'Cosine Similarity: {cosine_sim[0][0]}')# 2. 皮爾遜相關系數(Pearson Correlation Coefficient)
pearson_corr, _ = pearsonr(vector1, vector2)
print(f'Pearson Correlation Coefficient: {pearson_corr}')# 3. 杰卡德相似系數(Jaccard Similarity Coefficient)
# 將向量轉為布爾型(示例中使用大于2的值作為示例)
vector1_bool = vector1 > 2
vector2_bool = vector2 > 2
jaccard_sim = 1 - jaccard(vector1_bool, vector2_bool)
print(f'Jaccard Similarity Coefficient: {jaccard_sim}')# 4. 漢明距離(Hamming Distance)
# 這里的計算漢明距離先計算不相似度,再計算相似度
hamming_dist = hamming(vector1_bool, vector2_bool)
print(f'Hamming Distance: {hamming_dist}')
hamming_sim = 1 - hamming_dist
print(f'Hamming Similarity: {hamming_sim}')# 5. 相關距離(Correlation Distance)
# 這里的計算相關距離先計算不相似度,再計算相似度
correlation_dist = correlation(vector1, vector2)
correlation_sim = 1 - correlation_dist
print(f'Correlation Similarity: {correlation_sim}')
總結
在相似度度量的五種常見方法中,余弦相似度(Cosine Similarity) 和 皮爾遜相關系數(Pearson Correlation Coefficient) 是最常用的兩種。
余弦相似度:適用于高維稀疏數據,如文本數據和推薦系統。
皮爾遜相關系數:適用于數值數據,衡量線性相關性。