zoukankan      html  css  js  c++  java
  • 协同过滤

    推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。

    协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为“邻居”,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。
    为了方便了解,举个简单的例子。
    最近新上映了10部电影,你不知道看哪一部,问你周围的人,身边的人中你觉得有少数几个人跟你的观影品味一致,然后你会倾向于选择观看和你观影品味一致的人所推荐的电影,这个和你观影品味一致的人,就成了你的“邻居”。这就是协同过滤的核心思想。

    协同过滤(Collaborative Filtering)作为推荐算法中最经典的类型,包括在线的协同和离线的过滤两部分。所谓在线协同,就是通过在线数据找到用户可能喜欢的物品,而离线过滤,则是过滤掉一些不值得推荐的数据,比如推荐值评分低的数据,或者虽然推荐值高但是用户已经购买的数据。

      协同过滤的模型一般为m个物品,n个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

      一般来说,协同过滤推荐分为三种类型。
    第一种是基于用户(user-based)的协同过滤,
    第二种是基于物品(item-based)的协同过滤,
    第三种是基于模型(model based)的协同过滤。

      基于用户(user-based)的协同过滤主要考虑的是用户和用户之间的相似度,只要找出相似用户喜欢的物品,并预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户。

    基于项目(item-based)的协同过滤和基于用户的协同过滤类似,只不过这时我们转向找到物品和物品之间的相似度,只有找到
    了目标用户对某些物品的偏好,那么我们就可以对相似度高的类似物品进行预测,将评分最高的若干个相似物品推荐给用户。
    比如你在网上买了一本机器学习相关的书,网站马上会推荐一堆机器学习、大数据相关的书给你,这里就明显用到了基于项目的协同过滤思想。

      我们可以简单比较下基于用户的协同过滤和基于项目的协同过滤:基于用户的协同过滤需要在线找用户和用户之间的相似度关系,计算复杂度肯定会比基于项目的协同过滤高。但是可以帮助用户找到新类别的有惊喜的物品。而基于项目的协同过滤,由于考虑的物品的相似性一段时间不会改变,因此可以很容易的离线计算,准确度一般也可以接受,但是推荐的多样性来说,就很难带给用户惊喜了。一般对于小型的推荐系统来说,基于项目的协同过滤肯定是主流。但是如果是大型的推荐系统来说,则可以考虑基于用户的协同过滤,当然更加可以考虑我们的第三种类型,基于模型的协同过滤。

      基于模型(model based)的协同过滤是目前最主流的协同过滤类型了,我们的一大堆机器学习算法也可以在这里找到用武之地。关联算法、聚类算法、分类算法、神经网络等等。

    ---------------------------------

    基于物品的协同过滤算法主要有两步:

    1. 计算物品之间的相似度
    共现次数 余弦夹角 欧氏距离

    2. 根据物品的相似度

    用户的历史购买记录
    给用户生成推荐列表


    最终推荐的是什么物品,是由推荐度决定的。
    单个物品的推荐度
    偏好过的 商品i 商品j

    物品j推荐度=用户对物品i的偏好度×物品i和物品j的相似度

    推荐向量1 = 向量 × 矩阵
    推荐向量 2 = 向量 × 矩阵
    推荐向量 3 = 向量 × 矩阵
    推荐向量 4 = 向量 × 矩阵

    矩阵


    由此可以推导多用户多商品推荐度 。。。。

  • 相关阅读:
    How Many Answers Are Wrong
    Agri-Net —poj1258
    食物链
    A Bug's Life
    畅通工程
    Shortest path of the king
    Alex and Number
    KMP
    快速幂
    0x04
  • 原文地址:https://www.cnblogs.com/Diyo/p/11332200.html
Copyright © 2011-2022 走看看