2013-05-28 106 views
2

我要計算的餘弦相似性1(ID1)和3(ID1)在PHP之間,類似地,對於圖1和4,3和4的公式將是這樣的:餘弦相似度PHP

相似=(1.1×3.1 + 1.4×3.4)/(((1.1)^ 2 +(1.3)^ 2 +(1.4)^ 2)^ 0.5)(((3.1)^ 2 +(3.4)^ 2)^ 0.5 )=(4 * 4 + 8×4)/(((16 + 16 + 64)^ 0.5)(16 + 16)^ 0.5))

我的數據集看起來像這樣:

ID1 ID2 Value 
1  1  4  
1  3  4  
1  4  8  
3  1  4  
3  4  4  
4  1  8  
4  3  4 

是否有任何代碼來計算PHP中的餘弦相似度?

+0

[餘弦相似度](http://en.wikipedia.org/wiki/Cosine_similarity)是基本的,看起來不像你的公式......你可以分享更多的光線,並打破它與價值觀之間的關係ID1,ID2和值 – Baba

+0

ID1中的每個值表示一個向量,並且ID2表示相應的部分,即,如果1.1 1.3 1.4是向量,點之後的值在ID2中爲1.因此,ID1的1是向量。所以我比較了1和3的相應值(將它們作爲A和B矢量)。因此,餘弦相似度與維基中給出的相同。 – user2044770

回答

3

無論編程語言如何,該公式在數學中都很常見。

如果有長度爲n的兩個向量:

u = (u1, u2, ...., un) and v = (v1, v2, ...., vn) 

然後餘弦相似性(又名點積)爲:

u1*v1 + u2*v2 + .... + un*vn 
_____________________________ 
    len(u) * len(v) 

len(u) = sqrt(u1*u1 + u2*u2 + .... + un*un)哪裏;類似的len(v)

+0

是的,但我有大數據集。我應該如何循環以便計算每個Id1值之間的相似度,同時代碼是最優的? – user2044770

+1

你問公式。現在你認爲這是次優?你剛纔還不明白。應該可以像瘋了似的並行。 – duffymo

+0

我已經在我的問題中編寫了公式。我的問題顯然要求編碼不是公式。請先閱讀這個問題。 – user2044770