PHP中的余弦相似度

时间:2013-05-24 13:50:18

标签: php cosine-similarity

我想计算PHP中1(ID1)和3(ID1)之间的余弦相似度。 公式将是这样的:

similarity = (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中的余弦相似度?

1 个答案:

答案 0 :(得分:2)

矢量A和B之间的相似性可以看作是A和B之间的点积,通过将它除以两个范数的乘积来归一化。

PHP中的点积可以不用循环编写:

$dot_product=array_sum(array_map(create_function('$a, $b', 'return $a * $b;'), $a1, $a2));

所以首先创建函数:

function dotp($arr1, $arr2){
     return array_sum(array_map(create_function('$a, $b', 'return $a * $b;'), $arr1, $arr2));
}

现在余弦相似度

$similarity=dotp($id1,$id2)/sqrt(dotp($id1,$id1)*dotp($id2,$id2))