天天看點

python用角度計算餘弦值_Python 使用sklearn計算餘弦相似度

背景

在計算相似度時,常常用到餘弦夾角來判斷相似度,Cosine(餘弦相似度)取值範圍[-1,1],當兩個向量的方向重合時夾角餘弦取最大值1,當兩個向量的方向完全相反夾角餘弦取最小值-1,兩個方向正交時夾角餘弦取值為0。

python用角度計算餘弦值_Python 使用sklearn計算餘弦相似度

在實際業務中運用的地方還是挺多的,比如:可以根據曆史異常行為的使用者,找出現在有異常行為的其他使用者;在文本分析領域,可以根據一些文章,找出一些相似文章(把文章轉換為向量)。

計算相似度的方法除了餘弦夾角,還可以利用距離來判斷相似,距離越近越相似,這裡不做詳細展開。

自定義函數法

import numpy as np

def cosine_similarity(x,y):

num = x.dot(y.T)

denom = np.linalg.norm(x) * np.linalg.norm(y)

return num / denom

輸入兩個np.array向量,計算餘弦函數的值

cosine_similarity(np.array([0,1,2,3,4]),np.array([5,6,7,8,9]))

#0.9146591207600472

cosine_similarity(np.array([1,1]),np.array([2,2]))

#0.9999999999999998

cosine_similarity(np.array([0,1]),np.array([1,0]))

#0.0

基于sklearn

import numpy as np

from sklearn.metrics.pairwise import cosine_similarity

a1=np.arange(15).reshape(3,5)

a2=np.arange(20).reshape(4,5)

cosine_similarity(a1,a2) #第一行的值是a1中的第一個行向量與a2中所有的行向量之間的餘弦相似度

cosine_similarity(a1) #a1中的行向量之間的兩兩餘弦相似度

cosine_similarity(X, Y=None, dense_output=True)

X : ndarray or sparse array, shape: (n_samples_X, n_features)

Input data.---------------X是二維的矩陣

Y : ndarray or sparse array, shape: (n_samples_Y, n_features)

Input data. If None, the output will be the pairwise

similarities between all samples in X.---------------Y也是二維的矩陣

python用角度計算餘弦值_Python 使用sklearn計算餘弦相似度

sklearn餘弦相似度

曆史相關文章

以上是自己實踐中遇到的一些問題,分享出來供大家參考學習,歡迎關注微信公衆号DataShare,不定期分享幹貨