哪有做網(wǎng)站的seo排名快速
本文詳細介紹了如何使用 NumPy 實現(xiàn)兩個向量之間的余弦相似度計算,幫助理解向量相似度在推薦系統(tǒng)、文本處理等領域的應用。
1. 余弦相似度定義
余弦相似度是衡量兩個向量在高維空間中夾角大小的指標,其公式為:
c o s ( θ ) = A ? B ∥ A ∥ ∥ B ∥ {cos(\theta)} = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} cos(θ)=∥A∥∥B∥A?B?
其中:
- A ? B A?B A?B 表示向量的點積,即 A 1 B 1 + A 2 B 2 + . . . + A n B n A_1B_1+A_2B_2+...+A_nB_n A1?B1?+A2?B2?+...+An?Bn?
- ∥ A ∥ ∥A∥ ∥A∥ 和 ∥ B ∥ ∥B∥ ∥B∥ 是向量的 L2 范數(shù)(即歐幾里得長度)
如果 A = [ 1 , 2 , 3 ] A=[1,2,3] A=[1,2,3] B = [ 2 , 3 , 4 ] B=[2,3,4] B=[2,3,4] 則有:
- A ? B = 1 ? 2 + 2 ? 3 + 3 ? 4 = 20 A?B =1*2+2*3+3*4=20 A?B=1?2+2?3+3?4=20
- ∥ A ∥ = 1 2 + 2 2 + 3 2 ∥A∥=\sqrt{1^2+2^2+3^2} ∥A∥=12+22+32?
- ∥ B ∥ = 2 2 + 3 2 + 4 2 ∥B∥ = \sqrt{2^2+3^2+4^2} ∥B∥=22+32+42?
余弦相似度的取值范圍為 [-1, 1]:
- 1 表示兩個向量方向完全相同。
- 0 表示兩個向量正交(沒有相關性)。
- ?1 表示兩個向量方向完全相反。
2. Python Numpy實現(xiàn)
代碼實現(xiàn):
import numpy as np
def cosine_similarity(vec1, vec2):# 計算點積dot_product = np.dot(vec1, vec2)norm_a = np.linalg.norm(vec1)norm_b = np.linalg.norm(vec2)# 防止分母為0if norm_a == 0 or norm_b == 0:return 0.0# 余弦相似度return dot_product/(norm_a * norm_b)
3. 擴展:矩陣形式計算余弦相似度
代碼實現(xiàn):
def batch_cosine_similarity(matrix_a, matrix_b):"""計算兩個矩陣中對應向量之間的余弦相似度:param matrix_a: 矩陣 A (m x d):param matrix_b: 矩陣 B (n x d):return: 相似度矩陣 (m x n)"""norm_a = np.linalg.norm(matrix_a, axis=1, keepdims=True)norm_b = np.linalg.norm(matrix_b, axis=1, keepdims=True)similarity_matrix = np.dot(matrix_a, matrix_b.T) / (norm_a * norm_b.T)return similarity_matrix
實際應用:
- 在文本分析中,如果兩個文本的余弦相似度接近 1,說明這兩篇文本內(nèi)容相似;而如果相似度接近 0,則說明文本之間沒有明顯的聯(lián)系。
- 在推薦系統(tǒng)中,用戶的行為向量與商品的描述向量的余弦相似度可以幫助計算推薦結果。
- 在圖像處理領域,計算圖像特征向量之間的余弦相似度也可以用于檢索相似圖像。
- 余弦相似度也可以用于信號分析,表示兩個信號的波形相似性。例如,某些電子設備的狀態(tài)診斷可能基于當前信號與歷史信號的余弦相似度。