我正在设计一个网站,该网站基于根据用户的口味向用户推荐各种商品的概念而构建。 (即,他们对商品评分,将商品添加到“我的收藏夹”列表等)。例如,Amazon,Movielens和Netflix。
现在,我的问题是,对于该系统的数学部分,我不确定从哪里开始。我愿意学习所需的数学,只是我不知道所需的数学类型。
我浏览了Grouplens.org上的一些出版物,特别是“Towards a Scalable kNN CF Algorithm: Exploring Effective Applications of Clustering”。 (pdf)在第5页“预测生成”之前,我非常擅长理解所有内容
p.s.尽管这可能会有所帮助,但我并不是正在寻找正在发生的情况的解释,但是我对我需要了解的数学更感兴趣。这样,我可以了解发生了什么。
最佳答案
让我解释一下作者介绍的过程(据我了解):
输入:
必然每个用户都对所有
项)
预测它的等级。
输出:
目标用户对目标项目的
可以针对一堆商品重复执行此操作,然后我们返回N项最高的商品(最高预测评分)
过程:
该算法与朴素的KNN方法非常相似(搜索所有训练数据以找到具有与目标用户相似的评分的用户,然后组合其评分以进行预测[投票])。
随着用户/项目数量的增加,这种简单的方法无法很好地扩展。
提出的算法是首先将训练用户聚类到 K 组(对项目进行类似评分的人群),其中 K << N ( N 是用户总数)。
然后,我们扫描这些集群以找到目标用户最接近的集群(而不是查看所有训练用户)。
最后,我们从中选择 l ,然后根据与这些 l 聚类的距离加权得出平均值作为预测值。
注意,所使用的相似性度量是correlation系数,聚类算法是二等分K-Means算法。我们可以简单地使用标准kmeans,也可以使用其他相似性指标,例如Euclidean distance或余弦距离。
第5页上的第一个公式是相关性的定义:
corr(x,y) = (x-mean(x))(y-mean(y)) / std(x)*std(y)
第二个公式基本上是加权平均值:
predRating = sum_i(rating_i * corr(target,user_i)) / sum(corr(target,user_i))
where i loops over the selected top-l clusters
希望这可以澄清一些事情:)
关于math - 建立协作式过滤/推荐系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512624/