背景
在計算相似度時,常常用到餘弦夾角來判斷相似度,Cosine(餘弦相似度)取值範圍[-1,1],當兩個向量的方向重合時夾角餘弦取最大值1,當兩個向量的方向完全相反夾角餘弦取最小值-1,兩個方向正交時夾角餘弦取值為0。
在實際業務中運用的地方還是挺多的,比如:可以根據曆史異常行為的使用者,找出現在有異常行為的其他使用者;在文本分析領域,可以根據一些文章,找出一些相似文章(把文章轉換為向量)。
計算相似度的方法除了餘弦夾角,還可以利用距離來判斷相似,距離越近越相似,這裡不做詳細展開。
自定義函數法
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也是二維的矩陣
sklearn餘弦相似度
曆史相關文章
以上是自己實踐中遇到的一些問題,分享出來供大家參考學習,歡迎關注微信公衆号DataShare,不定期分享幹貨