一、餘弦值的概念與使用場景
餘弦值是三角函數中的一種,定義為三角形斜邊和直角邊的比值。在數學和計算機科學領域中,餘弦值經常出現在向量和實數序列之間的相似度計算中,例如在自然語言處理中使用餘弦相似度計算兩個句子的相似度。
在Python中,計算餘弦值的模塊是math,其中cos()函數用於計算角度的餘弦值。
import math angle = math.pi/4 cos_value = math.cos(angle) print("cos(45度) = ", cos_value)
二、利用餘弦值進行相似度計算
餘弦相似度是一種常見的文本相似度計算方法,我們可以用它來比較兩個句子之間的相似度。
具體來說,我們需要先將兩個句子轉換成向量,例如將每個單詞作為一個維度,每個維度上的值是單詞在句子中出現的次數。然後,我們可以利用餘弦相似度計算這兩個向量之間的相似度。
import numpy as np from sklearn.feature_extraction.text import CountVectorizer def cos_sim(text1, text2): vectorizer = CountVectorizer().fit_transform([text1, text2]) v1, v2 = vectorizer.toarray() return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) text1 = "I love Python" text2 = "Python is my favorite language" similarity = cos_sim(text1, text2) print("兩個句子的餘弦相似度為:", similarity)
三、用餘弦值實現相似度匹配功能
除了計算兩個向量之間的餘弦相似度之外,Python還可以使用scipy庫中的spatial.distance.cdist()函數來計算多個向量之間的餘弦相似度,並快速找到最相似的向量。
例如,我們可以用餘弦相似度匹配程序員的職業技能,來找到與職位要求最匹配的候選人。
import numpy as np from scipy.spatial.distance import cdist skills = ["Python", "Java", "C++", "R"] candidates = ["Lucy: Python, C++", "Tom: Java, R", "Anna: Python", "Mike: Java, C++"] candidate_skills = [] for candidate in candidates: skill_list = candidate.split(":")[-1].split(",") skill_vec = [0]*len(skills) for skill in skill_list: skill_vec[skills.index(skill.strip())] = 1 candidate_skills.append(skill_vec) requirements = "Python, C++" req_vec = [0]*len(skills) for req in requirements.split(","): req_vec[skills.index(req.strip())] = 1 similarity = 1 - cdist(candidate_skills, [req_vec], 'cosine') best_match_index = np.argmax(similarity) best_match_name = candidates[best_match_index].split(":")[0] print("最符合要求的候選人是:", best_match_name)
四、總結
在Python中,利用math模塊可以輕鬆地計算單個角度的餘弦值,而利用numpy、scipy等庫可以實現多個向量之間的餘弦相似度計算,廣泛應用於文本、圖像等各種領域,是一種非常優雅地計算餘弦值的方法。
原創文章,作者:ZOQXR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329114.html