優化計算相似度矩陣

2021-10-03 19:10:11 字數 1204 閱讀 5393

任務:現有特徵矩陣x∈r

fx\in r^

x∈rn×f

,n為樣本個數,f為特徵大小,需要計算相似度矩陣a

aa,aij

=aji

a_=a_

aij​=a

ji​為第i個樣本和第j個樣本的相似度,利用歐式距離求解兩個樣本間的距離:

a ij

=aji

=∑f=

1f(x

if−x

jf)2

a_=a_=\sum_^(x_-x_)^

aij​=a

ji​=

f=1∑

f​(x

if​−

xjf​

)2未優化的雙重迴圈寫法

def

dobule_loop

(x):

n =len(x)

a = numpy.zeros(

(n, n)

)for i in

range

(n):

for j in

range

(i+1

, n)

: a[j]

[i]= a[i]

[j]= numpy.

sum(numpy.square(x[i]

-x[j]))

return a

優化寫法

去掉第二個迴圈,使用批量計算,例如第i個樣本需要和i+1到n的樣本計算歐式距離,則將i+1到n個樣本取出與第i個樣本批量計算

def

optimize_loop

(x):

n =len(x)

a = numpy.zeros(

(n, n)

)for i in

range

(n):

deta = numpy.

sum(numpy.square(x[i]

-x[i+

1:n]

), axis=1)

a[i, i+

1: n]

= deta

a[i+1:

, i]

= deta

return a

時間上,後者比前者高效,例如當x的維度是(4000,3)時,前者時間為43.92秒,而後者只需0.56秒。

相似度計算

從多個維度分析兩組資料的相似度,比如大的文字使用word2vec轉成向量,類別根據最大的類別數量n拆成n維0或1表示的vector,數值型別歸一化之後表示乙個維度,然後根據cos l1 l2等方式計算相似度 可以用於推薦系統 協同過濾等演算法 注意double值的精度處理 將向量根據座標值,繪製到向...

相似度計算

author wepon blog machine learning in action 筆記,相似度計算,基於python numpy。假如我們希望相似度的值在0 1之間,並且越相似,值越大,有哪些辦法?1 計算歐式距離,然後根據 相似度 1 1 距離 計算相似度。2 皮爾遜相關係數,在numpy...

相似度計算之余弦相似度

一 定義及概念 余弦取值範圍為 1,1 求得兩個向量的夾角,並得出夾角對應的余弦值,此余弦值就可以用來表徵這兩個向量的相似性。夾角越小,趨近於0度,余弦值越接近於1,它們的方向更加吻合,則越相似。當兩個向量的方向完全相反夾角余弦取最小值 1。當余弦值為0時,兩向量正交,夾角為90度。因此可以看出,余...