2010-08-06 219 views
0

我试图在PHP中使用代码adjusted cosine similarity调整后的余弦相似度

我建我的数据是这样的:

$data[UserID][ItemID] = Rating 

数据例如:

$data[1][1] = 5; 
$data[1][2] = 3; 
$data[1][3] = 4; 

$data[2][1] = 3; 
$data[2][2] = 2; 
$data[2][4] = 3; 
$data[2][5] = 3; 

$data[3][1] = 4; 
$data[3][3] = 3; 
$data[3][5] = 5; 

$data[4][1] = 1; 
$data[4][2] = 4; 
$data[4][4] = 2; 
$data[4][5] = 1; 

$data[5][3] = 4; 
$data[5][4] = 3; 

我想编写一个函数来计算的2项的调整余弦,像

adjusted_cosine(itemID1,itemID2) 
+2

看起来像我的功课。 – 2010-08-06 16:47:59

+0

对不起,交配。我们不是在这里为你写代码。如果你首先尝试将它们放在一起,我们可能会帮助纠正它。 – treeface 2010-08-06 16:50:53

+1

hehehe,这不是作业。我只是想在我的网络中构建推荐系统。但我只建立皮尔森相似之一。但是在许多来源中,调整后的余弦比皮尔逊好。 但是,谢谢你的评论。我会补充它。 :D – user413266 2010-08-06 17:01:51

回答

2

我认为应该这样做:

sim(i,j) { 
    item1 = 0 
    item2 = 0 

    // calculate the sums for the ith and jth items 
    // minus each users' avg rating. 
    for (k = 0; k < length(data); k++) { 
     item1 += (data[k][i] - avg(data[k])) 
     item2 += (data[k][j] - avg(data[k])) 
    } 

    result (item1*item2)/(sqrt(item1*item1)*sqrt(item2*item2)) 
    return result 
} 

你仍然需要实现平均功能,但我想一个简单的方法可以做到这一点。

+0

非常感谢你的maffel。我会试试看。 :D – user413266 2010-08-06 17:19:38

+0

请注意,对于i和j的简单均值将在皮尔森相关函数中转换此相似性。 – Medeiros 2013-06-26 16:16:00