协同过滤推荐系统

如今,推荐系统在互联网上随处可见。从电子商务网站到餐馆、酒店、门票、活动等,到处都在向我们推荐。我们有没有问过自己,它们是如何知道什么最适合我们的?它们是如何计算出我们可能喜欢的商品的?答案是,大多数网站都使用协同过滤(CF)来推荐东西。协同过滤是通过分析其他用户的选择或偏好(协同)来自动预测(过滤)用户兴趣的过程。我们将使用皮尔逊相关法建立一个简单的推荐系统,计算两个人之间的相似度得分,范围为-1 到+1。如果相似度得分+1,则表示两人完全匹配。如果相似度得分为 0,则表示两人之间不存在相似性;如果得分为-1,则表示两人之间存在负相似性。通常,分数大多是小数。

皮尔逊相关性用以下公式计算:

image 2023 11 09 09 51 02 632

这里,x 表示第一人的偏好,y 表示第二人的偏好,N 表示偏好中 x 和 y 共有的项目数。有一些评论者评论过一些餐馆。其中有些是常见的,有些则不是。我们的工作就是根据其他人的评论为 X 找到推荐的餐馆。我们的评论是这样的:

Unresolved include directive in modules/ROOT/pages/ch11/ch11-11.adoc - include::example$Chapter11/10.php[]

现在,根据该结构,我们可以编写两位审稿人之间的皮尔逊相关性计算。下面是实现方法:

Unresolved include directive in modules/ROOT/pages/ch11/ch11-11.adoc - include::example$Chapter11/10.php[]

在这里,我们只是实现了皮尔逊相关性计算器的等式。现在,我们将编写基于皮尔逊评分的推荐函数:

Unresolved include directive in modules/ROOT/pages/ch11/ch11-11.adoc - include::example$Chapter11/10.php[]

在前面的函数中,我们计算了每个评论者之间的相似度得分,并对他们的评论进行了加权。根据最高得分,我们显示了对评论者的推荐。让我们运行下面的代码来获得一些推荐:

Unresolved include directive in modules/ROOT/pages/ch11/ch11-11.adoc - include::example$Chapter11/10.php[]

输出结果如下:

Restaurant recommendations for Arush
McDonalds
Pizza Roma
Sbarro

我们可以使用皮尔逊相关性评分系统来推荐项目,或向用户展示应该关注谁以获得更好的评论。让协同过滤发挥作用的方法还有很多,但这已超出了本书的范围。