任務:現有特徵矩陣x∈r
n×
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度。因此可以看出,余...