2013-05-28 105 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