2

我想计算 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 中的余弦相似度?

4

1 回答 1

3

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

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

$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))
于 2013-05-24T14:00:10.623 回答