协同过滤类算法

优点

协同过滤算法应用早,不需要设损失函数、梯度下降求最优解这些现在模型训练常规操作,原理和实现可谓十分简便,所要求的数据也非常简约(只需要用户的对商品的评分数据),曾经是许多大型互联网公司的主推荐模型,在某些推荐场景下使用效果和思想仍旧良好。

缺点

其表达能力不强:不能在模型中加入其它特征(如用户年龄、性别、商品属性等)进行训练,只能用了用户的评分数据特征,这极大了限制了模型的上限。由于互联网应用的场景下,用户的历史数据相对于总商品数而言总数极度的稀疏,导致协同类算法不适用应用于获取用户评分数据较为困难的场景。对于新用户、新商品,由于极度缺乏,很难保证推荐质量。

基于用户的协同过滤

目前为止绝大部分的描述的都是基于用户的协同过滤算法,将一个用户和其他所有用户进行对比,去找到相似的人。这种算法会有两个弊端:

扩展性

上文已经提到,随着用户数量的增加,其计算量也会增加。这种算法在只有几千个用户的情况下能够工作得很好,但达到一百万个用户时就会出现瓶颈。

稀疏性

大多数推荐系统中,物品的数量要远大于用户的数量,因此用户仅仅对一小部分物品进行了评价,这就造成了数据的稀疏性。比如亚马逊有上百万本书,但用户只评论了很少一部分,于是就很难找到两个相似的用户了。

鉴于以上两个局限性,我们不妨考察一下基于物品的协同过滤算法。

基于物品的协同过滤

假设我们有一种算法可以计算出两件物品之间的相似度,比如A的乒乓球拍子和B的乒乓球拍子很相似。如果一个用户给A打了很高的分数,我们就可以向他推荐B了。需要注意这两种算法的区别:基于用户的协同过滤是通过计算用户之间的距离找出最相似的用户,并将他评价过的物品推荐给目标用户;而基于物品的协同过滤则是找出最相似的物品,再结合用户的评价来给出推荐结果。

复现过程

将/root/CollaborativeFiltering/production/itemcf.py使用数据量小的数据集,适用于小样本观察。抽取3883个电影数量,836478 个样本评估,适当修改路径参数,得到目标推荐需求以及总的评测指标量:

接下来过程项目寻找并推荐关于推荐目标‘Toy Story (1995), Animation|Children's|Comedy’相似的物品并计算相似度:

综上,根据基于物品的协同过滤推荐算法得出的有关于‘Toy Story (1995), Animation|Children's|Comedy’的物品相似程度在0.3-0.6之间。

FM因子分解机模型

优点

可以自动进行特征组合,即使在数据稀疏的情况下也表现依然良好,即FM模型可以在非常稀疏的数据中进行合理的参数轨迹。FM模型的复杂度是线性的,优化效果很好,而且不需要像SVM一样依赖于支持向量,FM是一个通用模型,它可以用于任何特征值为实值的情况。而其他因式分解模型只能用于一些输入数据比较固定的情况。由于易于整合交叉特征、可以处理高度稀疏数据的特点,并且处理的效果不错,在推荐系统及广告CTR预估等领域得到了大规模使用。

缺点

因子分解机会学习所有的交叉特征,在这其中肯定会包含无用的交叉组合,这些组合会引入噪音,从而降低模型表现

综上,在最开始的训练过程mseloss损失函数很大,通过不断训练,得到的loss结果在300左右,相对来说模型为欠拟合,解决方案:增加batch_size(或者增大epoch):

由于之前loss数据太大,适当微调参数,降低了loss函数,增强了模型的鲁棒性,实践表明,适当增加batch_size数量和增加epoch训练次数对此模型的效果会更好。

文档复现地址:GitHub - birdskyws/CollaborativeFiltering: 推荐系统协同过滤算法

数据集下载链接:MovieLens | GroupLens

基于矩阵分解的协同过滤推荐算法相关推荐

  1. 基于矩阵分解的协同过滤推荐

    基于矩阵分解的协同过滤推荐 Traditional SVD 通常SVD矩阵分解指的是SVD奇异值分解,我们姑且将其命名为Traditional SVD(传统并经典着)其公式如下: M m × n = ...

  2. 机器学习(37)之矩阵分解在协同过滤推荐中的应用

    微信公众号 关键字全网搜索最新排名 [机器学习算法]:排名第一 [机器学习]:排名第一 [Python]:排名第三 [算法]:排名第四 前言 在协同过滤推荐算法总结(机器学习(36)之协同过滤典型算法 ...

  3. 基于矩阵分解的协同过滤算法

    基于矩阵分解的协同过滤算法 基于矩阵分解的CF算法实现(一):LFM LFM原理解析 损失函数 随机梯度下降法优化 基于矩阵分解的CF算法实现(二):BiasSvd BiasSvd 损失函数 随机梯度 ...

  4. 基于云模型的协同过滤推荐算法代码实现(附源代码)

    基于云模型的协同过滤推荐算法代码实现(附源代码) 一.云模型介绍 针对传统推荐系统数据稀疏.相似性计算方法导致共同评分用户少的问题,提出利用云模型概念与定量数值转换的优势,研究云模型(百度百科查看概念 ...

  5. 基于KMeans聚类的协同过滤推荐算法推荐原理、过程、代码实现 Canopy聚类算法 KMeans+Canopy聚类算法 聚类算法程序实现 KMEans聚类算法代码java

    基于KMeans聚类的协同过滤推荐算法可运用于基于用户和基于项目的协同过滤推荐算法中,作为降低数据稀疏度和提高推荐准确率的方法之一,一个协同过滤推荐过程可实现多次KMeans聚类. 一.基于KMean ...

  6. 个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 基于用户/项目的协同过滤推荐算法 混合协同过滤推荐算法 协同过滤混合推荐算法

    个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 一.项目开发技术及功能介绍 1.SSH开发框架(spring+struts+hibernate) 2.js.jquery.bootstrap ...

  7. SVD++:推荐系统的基于矩阵分解的协同过滤算法的提高

    1.背景知识 在讲SVD++之前,我还是想先回到基于物品相似的协同过滤算法.这个算法基本思想是找出一个用户有过正反馈的物品的相似的物品来给其作为推荐.其公式为: 其中 rui 表示预测用户u对物品i的 ...

  8. 基于音乐/电影/图书的协同过滤推荐算法代码实现(基于用户推荐、基于项目推荐、基于SlopeOne算法推荐、基于SVD算法推荐、混合加权推荐)

    基于音乐/电影/图书的协同过滤推荐算法代码实现(基于用户推荐.基于项目推荐.基于SlopeOne算法推荐.基于SVD算法推荐.加权混合推荐) 一.开发工具及使用技术 MyEclipse10.jdk1. ...

  9. 基于Mahout实现协同过滤推荐算法的电影推荐系统

    1 Mahout介绍 Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更 ...

  10. 什么是协同过滤推荐算法?

    剖析千人千面的大脑--推荐引擎部分,其中这篇是定位:对推荐引擎中的核心算法:协同过滤进行深挖. 首先,千人千面融合各种场景,如搜索,如feed流,如广告,如风控,如策略增长,如购物全流程等等:其次千人 ...

最新文章

  1. 计算机光驱参数,请问,电脑光驱插入关盘,打开时显示“参数不正确,无法打开”,这是什么故障,怎么处理?...
  2. 根据文法画出语法树_更多确定子句语法
  3. 定时发布任务,在global.asax中获取文件的物理路径的方法
  4. 连接oracle报错:Invalid connection string format, a valid format is: host:port:sid
  5. ethtool -g rx_魔兽怀旧服:黑G团避坑指南
  6. app里面可以运行php,我可以在googleappengine for Python上运行PHP文件吗?
  7. 查找出现次数 oracle,ORACLE计算某个列中出现次数最多的值
  8. lisp把多段线顶点连成表_读取多段线顶点并将顶点坐标标到数组中
  9. Ubuntu1604安装pycharm
  10. Hi3519A 开发板重装系统(烧写uboot、kernel、fs) + 重新加载驱动
  11. 广联达提示盗版文件修复工具
  12. 17位企业老总及行业大腕联袂推荐——《数据化管理:洞悉零售及电子商务运营》...
  13. 比特大陆“政变”72小时
  14. linux 建树软件,新一代建树工具IQ-Tree介绍
  15. 可拖拽的弹出窗口Js插件
  16. 外贸开发信用什么邮箱好?这个邮箱靓号注册网站不要错过
  17. JTopo添加动态连线
  18. 金融风控-贷款违约预测
  19. android bmp合成mpeg4,FFmpeg 图片合成视频
  20. maven 配置多个仓库

热门文章

  1. android 修改wifi信道,学会修改WiFi信道,让你的WIFI提速
  2. 基于JAVAEE公共自行车租赁系统
  3. 计算机主机电源灯不亮,电脑电源指示灯不亮怎么回事
  4. 【工作笔记001】SuperMap配准TransCAD底图
  5. linux 外接网卡驱动下载,绿联USB外置显卡+网卡驱动程序
  6. 利用Python处理Excel数据
  7. Java基础入门第二版 课后答案
  8. python雷达算法实现_一种基于Python的雷达信号处理系统及方法与流程
  9. electron编写我们第一个hello world程序和文件引入
  10. Builder模式创建pojo类