基于深度学习的推荐系统(一)

2023-11-06

本文主要介绍推荐系统基本概念以及基本的协同过滤算法原理。

推荐系统

快速有效地从复杂的数据中获取有价值的信息成为大数据大战的关键难题。
推荐系统根据用户需求与兴趣,通过推荐算法从海量数据中挖掘出用户感兴趣的项目(如信息,服务,物品),将结果以个性化列表的形式推荐给用户。(信息检索–百度,位置服务、新闻推送–今日头条)

协同过滤算法

经典的推荐算法。根据用户的历史行为数据挖掘用户的兴趣爱好,基于不同的兴趣爱好对用户进行划分并推荐兴趣相似的商品给用户。
利用用户与项目之间的交互信息为用户进行推荐。
包括基于物品的协同过滤算法、基于用户的协同过滤算法、混合推荐

如矩阵因子分解,利用用户与项目之间的交互关系为用户进行推荐。

传统的协同过滤算法存在如下问题:

  • 数据稀疏。一个用户评分过的项目仅仅占总项目数量的极少部分。
  • 冷启动问题。新的用户和新的项目往往没有评分数据。

基于用户的协同过滤算法

当一个用户A需要个性化推荐的时候, 我们可以先找到和他有相似兴趣的其他用户, 然后把那些用户喜欢的, 而用户A没有听说过的物品推荐给A。

算法步骤 UserCF:

  • 找到与当前用户A相似的用户B。例如可以根据不同用户对多个相同物品的打分情况综合判断,分数越高代表越喜欢。计算A与其他用户的相似程度,找到与A最相似的n个用户。
  • 将B喜欢的而A没有见过的物品推荐给A。根据这最象素的n个用户对该物品的打分情况,计算出A对该物品的最可能评分,若评分较高,则推荐给A。

优缺点:

  • 只用到用户的历史评分数据,简单。
  • 数据稀疏问题。用户的评分数据相对项目总量来说还是很少。
  • 存在冷启动问题,没有评分数据无法推荐。

基于物品的协同过滤

利用用户已选择的项目来寻找其他类似属性的项目进行推荐。
使用显示反馈(评分、喜欢、不喜欢)或隐式反馈(观看、搜索、点击)的方式获取用户交互过的项目,从项目的特征中学习用户的偏好
预先根据所有用户的历史偏好数据计算物品之间的相似性,然后把与用户喜欢的物品相类似的物品推荐给用户。

算法步骤 itemCF:

  • 计算物品间的相似度。
  • 根据物品的相似度和用户的历史行为生成排序后的推荐列表。

优缺点:

  • 依赖于用户偏好于项目的特征信息,不需要大量评分记录,不存在评分记录稀疏的问题。
  • 对于新项目,只要特征提取就可以向用户进行推荐,解决了冷启动问题。但体征提取较为困难。

混合推荐

采用组合不同的推荐算法。
常见3种:后融合、中融合、前融合。

后融合:
将两种/两种以上的推荐算法产生的推荐结果以投票、线性组合、或可信度选择组合等方式产生最终推荐结果。(决策层面的混合)
中融合:
以一种推荐算法为基础,融合另一种推荐算法。(模型层面的混合)
前融合:
将多种推荐算法融合到统一的模型里,从各类数据中提取的特征作为模型的输入,由统一的模型产生推荐结果。(特征层面的融合)

相似度计算

杰卡德相似系数

Jaccard相似系数主要用于计算符号度量/布尔值度量的样本间相似度。
是样本交集个数与并集个数的比值。
在这里插入图片描述
Jaccard距离是两个集合中不同元素所占比例衡量两个集合的区分度。
应用场景:
1、用于过滤相似度很高的新闻,或网页去重。
2、论文查重系统。

余弦相似度

计算两个向量夹角余弦值判断相似度。
在这里插入图片描述
应用场景:
1、推荐系统中的协同过滤算法。
2、计算文本相似性。

欧式距离(欧几里得距离)

最常用的距离计算公式,计算多维空间中各个点之间的绝对距离。
更适用于在数据稠密且连续时的计算。

曼哈顿距离

表示的是两点之间连线对各个坐标抽投影的长度之和。
在二维空间中,公式如下:
在这里插入图片描述
欧氏距离与曼哈顿距离可以用于从数值上判断样本间相似度,如果需要从方向上(趋势上)判断时,可以用余弦相似度。

皮尔逊相关系数

前提:
1、两个变量是线性关系,都是连续数据。
2、两个变量总体上是正态分布。

一般用于计算两个定距变量间联系的紧密程度。
衡量两个用户的相似性。首先找到两个用户共同评分过的数据集,计算这两个向量的相关系数。
公式如下:
在这里插入图片描述
正相关:相关系数在0~1之间
负相关:相关系数在-1~0之间。

深度学习

用在图像处理、NLP、语音识别、在线广告等领域。
融合传统推荐算法,可以缓解数据稀疏与冷启动问题。

通过学习一种深层次非线性网络结构,表示用户和项目相关的海量数据,具有从样本中学习数据集本质特征的能力,能获取用户与项目的深层次特征表示。
学习多源异构数据,组合低层特征形成高层语义抽象,自动发现数据的分布式特征表示,解决了传统机器学习中需要人工设计特征的问题。

常用的深度学习模型

自编码器AE

三层神经网络结构,输入层与输出层的规模相同。
在这里插入图片描述
使得输入x与输出y尽可能接近。
模型改进:
1、稀疏编码器。在损失函数中加入L1正则项,对过大权重进行惩罚。
2、降噪编码器。在输入数据中加入噪声。
使用场景:
对用户/项目相关信息(评分数据、文本、图像)进行重构学习用户与项目的偏好。
用于评分预测、文本推荐、图像推荐。

受限玻尔兹曼机RBM

能够学习数据中复杂的规则,强大的无监督学习能力。
去除同层变量之间的所有连接,提高学习效率。两层之间节点全连接,同层节点间不连接。
在这里插入图片描述
使用场景:
对用户的评分数据进行重构学习,实现对未知评分的预测。
主要用于用户评分预测。

卷积神经网络CNN

多层感知机,用来处理二维图像数据。池化操作减少了模型中的神经元数量。
由输入层、卷积层、池化层、全连接层、输出层 组成。层层之间全连接,每层之间的节点无连接。
使用场景:
用于从图像、文本、音频中提取项目的隐藏特征。用于图像推荐、音乐推荐、文本推荐。

循环神经网络RNN

通过获取输入层的输出和前一时刻的隐层状态来计算当前时刻隐层的输出。
能够对过去的信息进行记忆。
在这里插入图片描述
使用场景:
用于建模用户和项目相关的文本信息中词语之间序列影响。
评分预测、图像推荐、文本推荐、基于位置社交网络中的兴趣点推荐等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于深度学习的推荐系统(一) 的相关文章

随机推荐

  • MySQL中视图与表的区别

    1 MySQL中视图和表的区别以及联系 1 视图是已经编译好的SQL语句 是基于SQL语句的结果集的可视化的表 而表不是 2 视图没有实际的物理记录 而表有 3 表是内存 视图是窗口 4 表占用物理存储空间而视图不占用物理存储空间 视图只是
  • undefined reference to ‘mysql_init@4‘ error: ld returned 1 exit status<-报错信息,用codeblocks连接MySQL时的报错

    解决方案 本文引用的是别人的文章 我自己总结一下 你能走到这一步出错说明你前面看了其他博主的文章 那么你只用利用文中提供网盘资源来代替你本来需要添加的include头文件的引用和lib库文件的链接即可 剩下的参考其他文章实现会更简单易懂 由
  • React组件之间如何通信?

    父组件向子组件传递 父组件在调用子组件的时候 在子组件标签内传递参数 子组件通过props属性就能接收父组件传递过来的参数 子组件向父组件传递 父组件向子组件传一个函数 然后通过这个函数的回调 拿到子组件传过来的值 兄弟组件之间的通信 父组
  • Spring源码分析(四)Bean生命周期源码分析2:合并BeanDefinition、FactoryBean

    Spring容器启动 扫描得到所有BeanDefinition之后 就会先实例化所有非懒加载的单例Bean的 入口 Spring容器启动刷新的方法里 org springframework context support AbstractA
  • 烂怂if-else代码优化方案

    0 问题概述 代码可读性是衡量代码质量的重要标准 可读性也是可维护性 可扩展性的保证 因为代码是连接程序员和机器的中间桥梁 要对双边友好 Quora 上有一个帖子 What are some of the most basic things
  • 【神经网络】图解LSTM和GRU

    图解LSTM和GRU 1 问题 循环神经网络 RNN Recurrent Neural Network 受到短期记忆的影响 如果一个序列足够长 就很难将早期产生的信息带到后续的步骤中来 因此 如果试图处理一段文字来做预测 RNN可能会从一开
  • 使用rke搭建k8s集群

    1 下载rke 选择合适的版本 https github com rancher rke 下载后上传到服务器 修改为rke 且移动号可执行目录 mv rke linux amd64 usr local bin rke 修改为可执行权限 ch
  • markdown+CSDN+Typora+知乎+微信公众号最佳偷懒写作方法

    目录 markdown 思想 适用范畴 基本语法 重点语法 高级语法 Typora 补充工具 公式编辑 保存和导出 导入 定制化主题 图片拖拽 超链接 列表 LaTex 公式 表格 生成目录 编辑模式 导出与公众号 md与CSDN 导入 导
  • 用户留存分析—SQL

    SELECT log day 日期 count user id day0 新增数量 count user id day1 count user id day0 次日留存率 count user id day3 count user id d
  • 星罗棋布:关于VPS测试脚本集锦内容

    2021 09 25 更新 优化排版 引言 莫忧世事兼身事 须著人间比梦间 勿埋我心 当我们获得一个服务器后 会想知道它的性能如何 宝塔自带跑分的应用 但是测试的数据比较片面 所以就有了各种各样的测试脚本 勿埋我心带你了解一下有哪些常用的V
  • VMware安装win10系统的心路历程

    友情提示 尽量使用原版或别人用过的 很早之前使用VMware装过win2008和centos7 都是傻瓜安装 没想到这次安装win10一点都不傻瓜 软件版本 VMware Workstation 15 Pro 1 按照常识先下载iso文件
  • hive建表

    https blog csdn net wgyzzzz article details 107446435 一 hive建表语法 二 hive外部表 1 准备测试数据 放入虚拟机 data目录下 2 创建外部表 3 装载数据 4 查询tes
  • unity使用setTrigger需注意地方

    使用上可以参考另一篇文章 RPG游戏主角状态机 Trigger触发器 注意都是从Any State开始的 否则你在使用Aniamtor的Trigger参数触发时没反应
  • 网页开发基础常见html、css

    目录 HTML基础 一 段落 行内和换行标签 二 文本样式标签 三 表格标签 四 表单标签 五 多行文本标签 六 列表标签 七 超链接标签 八 图像标签 HTML基础 html语言基本格式 常用的HTML标签 一 段落 行内和换行标签 二
  • 我为什么不在乎人工智能

    有人听说我想创业 给我提出了一些 忽悠 的办法 他们说 既然你是程序语言专家 而现在人工智能 AI 又非常热 那你其实可以搞一个 自动编程系统 号称可以自动生成程序 取代程序员的工作 节省许许多多的人力支出 这样就可以趁着 AI 热 拉到投
  • 记录一下:使用 python -m SimpleHTTPServer 快速搭建http服务

    为什么80 的码农都做不了架构师 gt gt gt 在 Linux 服务器上或安装了 Python 的机器上 Python自带了一个WEB服务器 SimpleHTTPServer 我们可以很简单的使用 python m SimpleHTTP
  • WinForm显示3D图(Sharpgl)

    总述 Sharpgl是 NET平台的Opengl 可以用来绘画 展示3D图 本文将介绍如何显示SOlidWorks等软件制作的3D模型 安装Sharpgl 下载SharpGL vsix文件并点击安装 VS中就会有相应的项目出现了 之后创建工
  • C语言(Head First C)-7:数据结构与动态存储

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 7 数据结构与动态存储 一个结构根本不够 本章内容 1 如何用结构指针吧自定义数据类型连接成复杂的大型数据结构 通过创建链表探索其中的基本原理 2 通过在堆上动态分配
  • Jmeter元件正则表达式提取Response headers的数据

    本文以cookie提取为例来介绍用正则表达式如何提取Response headers的数据 实际cookie的获取只需要一个cookies管理器即可 jmeter会自动获取cookie 如果是用正则表达式提取Response headers
  • 基于深度学习的推荐系统(一)

    本文主要介绍推荐系统基本概念以及基本的协同过滤算法原理 推荐系统 快速有效地从复杂的数据中获取有价值的信息成为大数据大战的关键难题 推荐系统根据用户需求与兴趣 通过推荐算法从海量数据中挖掘出用户感兴趣的项目 如信息 服务 物品 将结果以个性