math - 建立协作式过滤/推荐系统

标签 math coldfusion recommendation-engine collaborative-filtering

我正在设计一个网站,该网站基于根据用户的口味向用户推荐各种商品的概念而构建。 (即,他们对商品评分,将商品添加到“我的收藏夹”列表等)。例如,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/

    相关文章:

    algorithm - 解释逐步到达目标位置背后的数学原理

    perl - 如何从 Perl 中的用户输入解析数学函数?

    java - Integer.valueOf 不适用于 Java 中 -1 的二进制表示

    ColdFusion 8 调度程序不重新安排任务

    machine-learning - Mahout推荐人: What relative preference values are suitable for a GenericUserBasedRecommender?

    php - 如何修复我的氡转化?

    java - 使用 Java 转换 ColdFusion 中的时区但无法获取新时间

    apache-flex - 嗅探 Flex 应用程序和 ColdFusion 后端之间的流量

    machine-learning - 推荐系统 : Is it content-based filtering?

    php - 如何将登录的用户与数据库系统中所有现有用户进行比较?