[machine Learning]推荐系统

其实严格来说推荐系统也是一种监督学习,我们需要根据已有数据进行预测,但是这种训练数据不是单纯的输入和输出问题,所以被归类为"超越监督学习"的一种?

今天去旁听了隔壁专业的机器学习课程,感觉自己的知识确实不是很系统,所以后面会找个机会把前面的代码给补充上.

下面将会介绍两种推荐系统还有一些我了解到的计算细节,以一个电影推荐为具体的案例,可能不够详细,还请多多担待啦

1.协同过滤算法:

协同过滤算法的内容很多,所以这里我们先不直接将协同过滤的情况,我们先拟定一个情景,加入我们正在做一个电影推荐网站,我们需要给一些用户推荐电影(说白了就是这个用户可能没看过这个电影,但是我们可以根据这个用户的其他相关数据和电影相关的数据来推断用户可能会给这个电影打上多少分数,从而确定要不要给这个用户推荐这个电影)

我们从头开始讲起,最后再告诉你为什么这东西叫协同过滤,而不是简简单单的监督学习

首先我们认为,用户的打分是基于这个公式

y=\omega _{j}*x_{i} +b_{i}

w,b代表了用户的喜好权重和偏好,而x则代表某个电影的特征数值

(1)假设已知电影的特征

然后我们有如下的一些数据

可以看到这张图里我们通过某种手段知道了电影的特征数值,比如这个电影是不是动作片,这个电影是不是浪漫电影,并且我们可以看到一些用户一些电影的打分.

我们需要预测某个用户对这个电影会打上多少分数,就必须直到整个用户的喜好,也就是我们要训练出一个合适的w和b.万幸的是,再这种图中,我们可以看到这个用户对其他电影有一些评价,我们就可以使用机器学习的手段预测出一个合适的w和b,最后再带入想要预测的电影的特征值x,就能得到用户对这个电影可能的打分.

代价函数为:(假设j为用户,i为电影)

J(w_{j},b_{j})=\frac{1}{2}\sum_{i:y(i,j)\neq 0}^{m_{movie}}(w_{j}*x_{i}+b_{j}-y(i,j))^{2} + \frac{\lambda }{2}\sum_{k=1}^{n}(w_{j}^{(k)})^{2}

训练出某个用户的喜好,就要用该用户看过的所有电影的特征值训练,最后对权重进行惩罚

最后得到代价最小的w和b,就可以用来估算用户的喜好了

如果是想要一次性对所有用户的喜好都进行计算,也是可行的

J(w_{j},b_{j})=\frac{1}{2}\sum_{j}^{m_{user}}\sum_{i:y(i,j)\neq 0}^{m_{movie}}(w_{j}*x_{i}+b_{j}-y(i,j))^{2} + \frac{\lambda }{2}\sum_{j}^{m_{user}}\sum_{k=1}^{n}(w_{j}^{(k)})^{2}

(2)已知用户的一些喜好

我们可以换个角度想一想,有时候上线了一部新电影,但是我们的员工没有足够的时间去看这个部电影,但是很多老客户已经打完分了,我们可以从这些了解过的老用户的打分,来推断出这个可能是什么电影.

这个时候的意思就是,我们知道很多用户的w和b,以及打分y,但是不知道某部电影的特征x.

 比如这张图的情况,我们只知道打分y,以及通过某种手段知道了用户的一些特征

我们就可以用类似上面的方法计算出可能的特征值

同样的,我们直接上代价函数

J(x_{i})=\frac{1}{2}\sum_{j:y(i,j)\neq 0}^{m_{user}}(w_{j}*x_{i}+b_{j}-y(i,j))^{2} + \frac{\lambda }{2}\sum_{k=1}^{n}(x_{i}^{(k)})^{2}

这个代价函数的意义就算根据所有看过这部电影的用户的打分,喜好,来判断和训练出这部电影可能的分值.

同样的,如果想要一次性囊括所有电影的代价,可以再原本的基础上加上全部的电影

J(x_{i})=\frac{1}{2}\sum_{i}^{m_{movie}}\sum_{j:y(i,j)\neq 0}^{m_{user}}(w_{j}*x_{i}+b_{j}-y(i,j))^{2} + \frac{\lambda }{2}\sum_{i}^{m_{movie}}\sum_{k=1}^{n}(x_{i}^{(k)})^{2}

这样就可以计算出电影特征值了

(3)协同过滤算法是怎么做的

这个时候你可能会问,这不就是很简单神经网络拟合吗,为什么要叫协同过滤

其实是因为第三种情况,如果我们的员工今天出去吃麦乐鸡,回来一看很多不知底细的新用户已经对新上线的电影打完分了,这个时候该怎么做推荐?就算是分开按照步骤做,我们不知道用户的喜好wb,也不知道电影的特征x,只知道用户的打分(很大概率打分都不全),然而我们仍然想要做一些推荐

答案就是综合以上两种情况,直接使用用户打分来预测其他的打分,也就是说我们要同时获取的数据是w,b,x.

还记得我们之前分别尝试过整体训练所有人的喜好和所有电影的特征,这个式子组合起来是这样的

J(x_{i})=\frac{1}{2}\sum_{i}^{m_{movie}}\sum_{j:y(i,j)\neq 0}^{m_{user}}(w_{j}*x_{i}+b_{j}-y(i,j))^{2} + \frac{\lambda }{2}\sum_{i}^{m_{movie}}\sum_{k=1}^{n}(x_{i}^{(k)})^{2}+ \frac{\lambda }{2}\sum_{j}^{m_{user}}\sum_{k=1}^{n}(w_{j}^{(k)})^{2}

直接把两个综合代价函数组合起来得到最终的结果.

然后具体的梯度下降操作的时候,对每个用户的喜好,每个电影的特征都要做gradient descent

repeat \{\\ \\w_{1}=w_{1}-\frac{\theta }{\theta w_{1}}J(w,b,x), \\................... \\w_{j}=w_{j}-\frac{\theta }{\theta w_{j}}J(w,b,x),\\\\ \\b_{1}=b_{1}-\frac{\theta }{\theta b_{1}}J(w,b,x) \\................... \\b_{j}=b_{j}-\frac{\theta }{\theta b_{j}}J(w,b,x),\\\\ \\x_{1}=x_{1}-\frac{\theta }{\theta x_{1}}J(w,b,x) \\................... \\x_{i}=x_{i}-\frac{\theta }{\theta x_{i}}J(w,b,x),\\ \\\}

这就是整体梯度下降的方法,最终合适的迭代结果可以用来估计出某个用户的某个电影的评分

(4)均值归一化

有些时候我们会碰到这样一个情况,一个纯纯的新电影,或者一个纯纯的新用户在我们的数据里面,我们仍然要想办法给他实现一些推荐.其实空白数据强行训练完全可行,但是可能数据不是很理想

其实我们的基本思想是想办法按照大家的平均值,给他来个预测打分,实际实现有点这个意思,但是不多

首先我们计算出对各个电影,看过的用户打分的平均值

然后,矩阵中原有的数据全部减去对应的平均值

则接下来的,用户对于某个电影的估计评分,要再把平均值加回来

 

剩下的代价函数计算一致,这种方法叫做均值归一化,避免了因为某个极端数据或者空白数据导致推荐效果出现很大偏差

2.基于内容的推荐算法 

上面我们提到的情况是协同过滤算法,其实再本质上是基于相似度,比如用户可能有些特征上的相似度(相似度使用范式2计算,这里不细细解释了)

而在基于内容过滤中,如果我们想要推荐一个显影,我们需要检测的是用户和电影的匹配程度,best match.

由于这个没有计算和理解上的难度,所以我们直接将具体的算法推荐出来

假设我们还是做点听推荐,与之不同的是这次我们知道用户的喜好和电影的特征,我们可以根据数据对来进行训练

((w,b,x),y)这样的数据,结合两个神经网络最终得到合适的一个训练模型,接下来就可以根据这个模型判断最终的计算结果,得到用户的可能打分

我们首先把用户特征和电影特征转化为另一种统一的形式,使用向量v来表示

然后这两个直接相乘,就是我们的预测分数 y

接下来根据训练数据,训练这个模型即可

3.大型目录系统的推荐 

基于上面的内容过滤算法,我们可以检查用户和电影的匹配程度

但是有个问题,一个成熟的流媒体可能会产生大量的电影或者上百万的商品,进行匹配度深度网络计算,然后再排序放出来,无疑是很大的消耗,所以在一般的大型推荐系统中,我们走的是retrieve和rank两个步骤

(1)retrieve 获取一个初步的list,包含了用户可能喜欢的部分

比如从用户最近看过的10部电影,在寻找十个相似的电影

本地区的用户看到的前10个电影,或者说是每个系列最高的十部电影

(2)rank,计算用户和这个list的匹配程度,然后进行排序推荐即可

这样就避免了对于整体的排序推荐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/71346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt打开及创建项目,运行程序(1)

安装之后, 1.文件->新建文件或项目 2.Application->Qt Widgets Application 3.自己设置名称和路径 4.这一步非常非常重要,要选择编译器,(MinGW是可以在Qt里用,如果想与VS交互,要选择MSVC&#xff09…

uniapp 路由不要显示#

在Uniapp中,路由默认使用的是hash模式,即在URL中添加#符号。如果你不想在URL中显示#,可以切换为使用history模式。 要在Uniapp中使用history模式,可以按照以下步骤进行操作: 打开manifest.json文件。在"app&qu…

解决charles只能使用30分钟

问题描述 Charles 30分钟会自动关闭,弹出一个弹窗。 解决步骤 1.网上查找后发现是需要注册一下。 2.打开Charles,如图的操作顺序 3.框内输入 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 4.重启即可

在css中设计好看的阴影

在css中设计好看的阴影 在本文中,我们将学习如何将典型的盒子阴影转换为更好看的的阴影。 统一角度 当我们想要一个元素有阴影时,会添加box-shadow属性并修改其中的数字,直到满意为止。 问题是,通过像这样单独创建每个阴影&…

vue的第2篇 开发环境vscode的安装以及创建项目空间

一 环境的搭建 1.1常见前端开发ide 1.2 安装vs.code 1.下载地址:Visual Studio Code - Code Editing. Redefined 2.进行安装 1.2.1 vscode的中文插件安装 1.在搜索框输入“chinese” 2.安装完成重启,如下变成中文 1.2.2 修改工作区的颜色 选中[浅色]…

python实现某音自动登录+获取视频数据

前言 Dy这个东西想必大家都用过,而且还经常刷,今天就来用代码,获取它的视频数据 环境使用 Python 3.8 Pycharm 模块使用 requests selenium json re 一. 数据来源分析 1. 明确需求 明确采集网站以及数据内容 网址: https://www.dy.com/…

【LeetCode-中等题】40. 组合总和 II

文章目录 题目方法一:递归回溯去重 题目 本题需要注意的就是去重操作因为nums数组里面的元素可能存在重复: 不重复的版本:【LeetCode-中等题】39. 组合总和 不去重版 方法一:递归回溯去重 参考讲解视频—回溯算法中的去重&#…

深入了解苹果证书及其分类,提升iOS应用开发效率

目录 1. 企业证书 2. 开发者证书 开发证书: 发布证书: 3. 推送证书 4. 分发证书 5. MDM证书 摘要:本文将详细介绍苹果证书的作用及分类,包括企业证书、开发者证书、推送证书、分发证书和MDM证书,帮助开发者了解…

04-Apache Directory Studio下载安装(LDAP连接工具)

1、下载 官网下载Apache Directory Studio 注意Apache Directory Studio依赖于jdk,对jdk有环境要求 请下载适配本机的jdk版本的Apache Directory Studio,下图为最新版下载地址 Apache Directory Studio Version 2.0.0-M16 基于 Eclipse 2020-12,最低要…

AJAX学习笔记2发送Post请求

AJAX学习笔记1发送Get请求_biubiubiu0706的博客-CSDN博客 继续 AJAX发送POST请求 无参数 测试 改回来 测试 AJAX POST请求 请求体中提交参数 测试 后端打断点 如何用AJAX模拟form表单post请求提交数据呢? 设置请求头必须在open之后,send之前 请求头里的设置好比…

mysql8 Found option without preceding group错误

这个错误说起来是真的坑,今晚帮同学在window操作系统上安装mysql8当自定义my.ini文件的时候 就出现一下错误,死活启动不起来 一直报错。当删掉这个my.ini文件的时候却能启动,刚开始以为是my.ini里的配置选项不对,一个一个筛查后依…

Mysql 备份与恢复

日志 MySQL 的日志默认保存位置为 /usr/local/mysql/data 常见的日志 错误日志:mysql本身启动,停止,运行期间发生的错误信息一般查询日志二进制日志:用于基于日志形式的数据恢复。用于主从复制,实现主从同步&#xf…

赛宁网安有力保障淮安市网络安全技能竞赛决赛

9月6日,由中共淮安市委网信办、淮安市总工会、淮安市人社局、淮安市教育局、淮安市公安局、共青团淮安市委共同主办,淮阴工学院协办,淮安市网络信息和数据安全协会、淮安市信息安全等级保护工作协调小组办公室承办,中国电信股份有…

2023年MySQL实战核心技术第一篇

目录 四 . 基础架构:一条SQl查询语句是如何执行的? 4.1 MySQL逻辑架构图: 4.2 MySQL的Server层和存储引擎层 4.2.1 连接器 4.2.1.1 解释 4.2.1.2 MySQL 异常重启 解决方案: 4.2.1.2.1. 定期断开长连接: 4.2.1.2.2. 初始…

EasyPhoto:基于 SD WebUI 的艺术照生成插件来啦!

作者 :wuziheng 背景介绍 最近,基于生成式AI技术批量产出真/像/美的个人写真应用非常受欢迎。同时,随着 Stable Diffusion 领域开源社区的快速发展,社区也涌现了类似 FaceChain 的开源项目,帮助开发者开发个性化的真…

docker-compose 部署 Seata整合nacos,Postgresql 为DB存储

docker-compose 部署 Seata整合nacos,Postgresql 为DB存储 环境 详情环境可参考 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 我这里 <spring.cloud.alibaba-version>2021.1</spring.cloud.alibaba-version>所…

高压放大器在机械制造领域的应用有哪些

在机械制造领域&#xff0c;高压放大器扮演着至关重要的角色。它们被广泛应用于各种机械设备和系统中&#xff0c;提供高压力、高精度的电信号放大。下面安泰电子将详细介绍高压放大器在机械制造领域的几个关键应用。 材料测试和强度试验 高压放大器广泛应用于材料测试和强度试…

基于Python开发的DIY字符画程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python开发的DIY字符画程序&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&…

I.MX RT1176笔记(9)-- 程序异常追踪(CmBacktrace 和 segger rtt)

前言 在使用 ARM Cortex-M 系列 MCU时候&#xff0c;有时候会遇到各种异常&#xff08;Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault&#xff09;&#xff0c;这时候我们根据经验查询PC指针&#xff0c;LR寄存器&#xff0c;堆栈数据定位地址然…

Apache Tomcat漏洞复现

文章目录 弱口令启动环境漏洞复现 本地文件包含启动环境漏洞复现 弱口令 启动环境 来到vulhub/tomcat/tomcat8/靶场 cd vulhub/tomcat/tomcat8/安装环境并启动&#xff1a; sudo docker-compose up -d && sudo docker-compose up -d修改端口后启动&#xff1a; su…