談談余弦相似度

2022-09-01 23:45:30 字數 1282 閱讀 1062

基於餘弦定理計算相似度的應用很多,比如推薦系統中的協同過濾,計算文字的相似性等等。它用計算兩者空間向量的夾角來表示兩者的相似性。

先看一下餘弦定理的公式:

$$w_=\frac\sqrt}

$$上訴公式表示uv兩者的相似度,ui表示u在i緯度的數值。

在使用者行為資料(使用者只有操作和未操作兩種狀態,也就是0,1)中公式可以表示為:

$$w_=\frac}

$$我們預設資料是使用者行為資料,如使用者a操作了物品a表示為:a a

我們的資料來源是log日誌:

a aa c

b cb b

c a把資料整理成乙個user_item表

a a c

b c b

c a我們發現這個矩陣是稀疏的,如果兩兩算相似性,有操作交集是0的情況,複雜度太高。可以換一種思路,現求得交集不為零的使用者對,再除以公式的分母。,這就需要乙個倒排表了。

a a c

c a b

b b下面是python實現的例子,輸入的是使用者行為資料

(a,a),

(a ,c),

(b, c),

(b, b),

(c, a)

import math

def usersimilarity(train):

user_item=dict()

item_user=dict()

n=dict()

for line in train:

u=line[0]

i=line[2]

if u not in user_item:

user_item[u]=set()

user_item[u].add(i)

if u not in n:

n[u]=0

n[u]+=1

if i not in item_user:

item_user[i]=set()

item_user[i].add(u)

c=dict()

for u in user_item:

c[u]=dict()

for i in user_item[u]:

for v in item_user[i]:

if u==v:

continue

c[u][v]+=1

for u in c:

for v in c[u]:

c[u][v]=c[u][v]/math.sqrt(n[u]*n[v])

return c

余弦相似度

余弦距離 歐氏距離和傑卡德相似性度量的對比分析 1 余弦距離 余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。向量,是多維空間中有方向的線段,如果兩個向量的方向一致,即夾角接近零,那麼這兩個向量就相近。而要確定兩個向量方向是否一致,這就要用到餘弦定理...

余弦相似度

基於餘弦定理計算相似度的應用很多,比如推薦系統中的協同過濾,計算文字的相似性等等。它用計算兩者空間向量的夾角來表示兩者的相似性。先看一下餘弦定理的公式 wu v u ivi u2i v 2i 上訴公式表示uv兩者的相似度,ui表示u在i緯度的數值。在使用者行為資料 使用者只有操作和未操作兩種狀態,也...

余弦相似度

余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。相比距離度量,余弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。公式如下 python實現如下 import numpy as np from scipy.spatial.distance i...