zoukankan      html  css  js  c++  java
  • 基于物品的协同过滤算法(ItemCF)

    最近在学习使用阿里云的推荐引擎时,在使用的过程中用到很多推荐算法,所以就研究了一下,这里主要介绍一种推荐算法—基于物品的协同过滤算法。
    ItemCF算法不是根据物品内容的属性计算物品之间的相似度,而是通过分析用户的行为记录来计算用户的相似度。该算法认为物品A和物品B相似的依据是因为喜欢物品A的用户也喜欢物品B。
    基于物品的协同过滤算法实现步骤:
    1、计算物品之间的相似度
    2、根据物品的相似度和用户的历史行为记录给用户生成推荐列表
    下面我们一起来看一下这两部是如何实现的:
    一、计算物品之间的相似度
    通过查询一下资料,ItemCF的物品相似度计算模型如下:
    screenshot
    公式中|N(i)|表示喜欢物品i的用户数,|N(j)|表示喜欢物品j的用户数, |N(i)∩N(j)|表示同时喜欢物品i和物品j的用户数。从上面的公式我们可以看出物品i和物品j相似是因为他们共同别很多的用户喜欢,相似度越高表示同时喜欢他们的用户数越多。
    下面举例讲解一下相似度的计算过程:
    假设用户A对物品a,b,d有过评价,用户B对物品b,c,e有过评价,如下图:

    A : a b d
    B : b c e
    C : c d
    D : b c d
    E : a d
    根据上面用户的行为构建:用户——物品倒排表:例如:物品a有用户A和E做过评价。
    a : A E
    b : A B D
    c : B C D
    d : A C D E
    e : B
    根据上面的倒排表我们可以构建一个相似度矩阵:
    screenshot

    图 1.1 计算物品的相似度
    图中最左边的是用户输入的用户行为记录,每一行代表用户感兴趣的物品集合,然后对每个物品集合,我们将里面的物品两两加一,得到一个矩阵。最终将这些矩阵进行相加得到上面的C矩阵。其中Ci记录了同时喜欢物品i和j的用户数。这样我们就得到了物品之间的相似度矩阵W。

    二、根据物品的相似度和用户的历史行为记录给用户生成推荐列表
    ItemCF通过下面的公式计算用户u对一个物品j的兴趣:

    screenshot
    这里的N(u)代表用户喜欢的物品的集合,S(j,k)是和物品j最相似的的k个物品的集合,wij是物品j和i的相似度,r_ui代表用户u对物品i的兴趣。该公式的含义是,和用户历史上最感兴趣的物品月相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
    下面是查阅资料找到的一些优化方法:
    (1)、用户活跃度对物品相似度的影响
    即认为活跃用户对物品相似度的贡献应该小于不活跃的用户,所以增加一个IUF(Inverse User Frequence)参数来修正物品相似度的计算公式:
    screenshot
    用这种相似度计算的ItemCF被记为ItemCF-IUF。
    ItemCF-IUF在准确率和召回率两个指标上和ItemCF相近,但它明显提高了推荐结果的覆盖率,降低了推荐结果的流行度,从这个意义上说,ItemCF-IUF确实改进了ItemCF的综合性能。

    (2)、物品相似度的归一化
    Karypis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化,可以提高推荐的准确度。其研究表明,如果已经得到了物品相似度矩阵w,那么可用如下公式得到归一化之后的相似度矩阵w':
    screenshot
    最终结果表明,归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。用这种相似度计算的ItemCF被记为ItemCF-Norm。

  • 相关阅读:
    第002篇 深入体验C#项目开发(一)
    C#编程打字指法练习
    第001篇——C#学习计划开启
    2020杭电多校第一场(待更新)
    LeetCode双周赛11
    LeetCode双周赛10
    LeetCode Weekly 156
    NOIP模板复习(4)区间操作之莫队算法,树状数组,线段树
    NOIP模板复习(3) 最短路三巨头Floyd,Dijkstra与SPFA
    NOIP模板复习(2) LCA的三种解法
  • 原文地址:https://www.cnblogs.com/dtstack/p/10271551.html
Copyright © 2011-2022 走看看