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。

  • 相关阅读:
    爬虫学习---美丽汤
    爬虫学习--使用百度api---天气
    爬虫学习----案例
    爬虫学习---模拟提交
    爬虫学习---糗事百科
    爬虫学习----pattern
    Android:控件AutoCompleteTextView 客户端保存搜索历史自动提示
    Android:res之selector背景选择器
    安卓--selector简单使用
    【Android基础】android shape详解(二)
  • 原文地址:https://www.cnblogs.com/dtstack/p/10271551.html
Copyright © 2011-2022 走看看