zoukankan      html  css  js  c++  java
  • 基于矩阵分解的推荐系统

    简介

    推荐系统产生推荐列表的方式通常有两种:协同过滤以及基于内容推荐,或者基于个性化推荐。协同过滤方法根据用户历史行为(例如其购买的、选择的、评价过的物品等)结合其他用户的相似决策建立模型。这种模型可用于预测用户对哪些物品可能感兴趣(或用户对物品的感兴趣程度)。基于内容推荐利用一些列有关物品的离散特征,推荐出具有类似性质的相似物品。而本文使用协同过滤的方法来构建整个推荐系统。
    

    推荐方式

    • 根据流行程度

      **优点**:能够给使用者推荐一些东西,了解到最新流行动向。
      
      **缺点**:没有代表性,因为这仅仅是该平台的数据集合。推荐的并不符合个性化的需求。
      
    • 根据个人特征

      通过用户信息和商品特征给出推荐。但这往往也有很多问题:用户信息不完善,商品信息不全,给分类的方式带来很大不确定性。
      

    • 根据协同过滤

      这也是今天的主角。首先说说什么是协同过滤:**通过其他人的个人特征,商品的特征,用户和商品的一般化关联关系给用户推荐相应的产品。**举个例子:比如你买了一个手机,那么该平台看看和你相似买了手机的用户都会买哪些东西,然后给你进行推荐。
      

    实现步骤

    step 1:

    需要根据用户购买的东西和商品对应建一个矩阵:(列为商品,横为用户)


    问题:一个人可能会购买多件商品这样会产生计算误差。

    这时需要对矩阵进行规范化处理(将数据按比例缩放,使之落入一个小的特定区间),引入Jaccard相似性系数:


    step 2:

    将购物历史加入其中,进行权重的计算。假如一名用户买了牛奶和尿布,那么他买湿巾的可能:

    最后将加权平均分排序后,即可按排序进行推荐。


    step 3:

    现象:对一些产品来说,用户可能喜欢,但是他用购买记录没办法得到推荐。

    解决方案: 首先拿已经评价过的商品和用户对应构成如下矩阵(列为商品,横为用户),黑块是已经进行评价的,而白块是评价过的,那么将白块变成黑块便是我们下面要做的。

    为了计算白块,我们为商品和用户建立向量。而向量里有一系列关于商品和用户特征取值。如一用户喜欢计算机那么他的计算机属性值就较高。而每个商品也具有计算机的属性值并赋值。

    Lu = [ 0.3 0.6 1.6 ... ] --用户取值
    Ru = [ 0.6 0.8 4.2 ... ] --商品取值
    

    再对Lu和Ru取点乘,便能取得用户和商品的相关性。以这样的思路我们便能建立起矩阵因子分解模型(L为用户集合,R为商品的集合,集合的每项便为特征取值):

    通过得到模型与商品评价矩阵Rating进行残差平方和来判断模型的好坏。这种预测也仅仅是数据层面上的,下面介绍具体判断模型好坏的参数:召回率和精准度。

    用户喜欢的商品并且被展示出来的商品 / 喜欢的商品

    用户喜欢的商品并且被展示出来的商品 / 被展示出来的商品

    不同模型得到的不同函数

  • 相关阅读:
    hive on hbase
    django多表操作
    django单表操作
    django模板
    django路由初识
    python 相关模块安装 国内镜像地址
    django初识
    Python中属性和描述符的简单使用
    pip安装包(python安装gevent(win))
    jQuery 事件方法
  • 原文地址:https://www.cnblogs.com/hello-world-n/p/7784542.html
Copyright © 2011-2022 走看看