推荐系统(Recommender Systems)

一、问题形式化

        在接下来的内容中,我将开始讲解推荐系统的一些理论知识。我们从一个例子开始定义推荐系统,假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分

前三部电影是爱情片,后两部是动作片,我们可以看出Alice和Bob似乎更倾向于爱情片,而 Carol 和 Dave 似乎更倾向于动作片,并且没有一个用户给所有的电影都打过分。因此我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据,下面引入一些标记:

二、基于内容的推荐系统

        在基于内容的推荐系统中,项目或对象是通过相关特征的属性来定义的,系统基于用户评价对象的特征、学习用户的兴趣,考察用户资料与待预测项目的匹配程度。用户的资料模型取决于所用的学习方法,常用的有决策树、神经网络和基于向量的表示方法等。基于内容的用户资料需要有用户的历史数据,用户资料模型可能随着用户的偏好改变而发生变化。

       在我们的例子中,我们假设每部电影都有两个特征,如x_1代表电影的浪漫程度,x_2代表电影的动作程度,则每部电影都有一个特征向量,如x^{(1)}是第一部电影的特征向量为[0.9 0]。

下面我们要基于这些特征来构建一个推荐系统算法, 假设我们采用线性回归模型,我们可以针对每一个用户都训练一个线性回归模型,如{​{\theta }^{(1)}}是第一个用户的模型的参数,下面引入一些标记:

其中 i:r(i,j)表示我们只计算那些用户$j$ 评过分的电影,在一般的线性回归模型中,误差项和正则项应该都是乘以1/2m,在这里我们将m去掉。并且我们不对$\theta_0$进行正则化处理。

上面的代价函数只是针对一个用户的,为了学习所有用户,我们将所有用户的代价函数求和:

如果我们要用梯度下降法来求最优解,我们计算代价函数的偏导数后得到梯度下降的更新公式为:

三、协同过滤

        在之前的基于内容的推荐系统中,对于每一部电影我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。

但是如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了,协同过滤算法可以同时学习这两者,我们的优化目标便改为同时针对$x$$\theta$进行,如下图:

 对代价函数求偏导数的结果如下:

注:在协同过滤算法中我们通常不使用$\theta_0$$x_0$项,如果需要的话算法会自动学得。 协同过滤算法使用步骤如下:

①初始x^{(1)},x^{(2)},...x^{(nm)},\ \theta^{(1)},\theta^{(2)},...,\theta^{(nu)}为一些随机小值

②使用梯度下降算法最小化代价函数

③在训练完算法后,我们预测(\theta^{(j)})^Tx^{(i)}为用户 j 给电影 i 的评分

我们可以通过获得的特征矩阵作为给用户推荐电影的依据,例如如果一位用户正在观看电影x^{(i)},我们可以寻找另一部电影x^{(j)},选择使得两部电影的特征向量之间的距离\left\| {​{x}^{(i)}}-{​{x}^{(j)}} \right\|最小。

 四、向量化:低秩矩阵分解

        在上几节内容中,我们谈到了协同过滤算法,本节中我将会讲到有关该算法的向量化实现以及说说有关该算法我们可以做的其他事情。

我们有五部电影以及四位用户,那么这个矩阵 Y 就是一个5行4列的矩阵,它将这些电影的用户评分数据都存在矩阵里:

 

 推出评分:

找到相关影片:

        现在你已经对特征参数向量进行了学习,那么我们就会有一个很方便的方法来度量两部电影之间的相似性。例如说:电影 i 有一个特征向量x^{(i)},你是否能找到一部不同的电影 j,保证两部电影的特征向量之间的距离x^{(i)}x^{(j)}很小,那就能很有力地表明电影i和电影 j 在某种程度上有相似,至少在某种意义上,某些人喜欢电影 i,或许更有可能也对电影 j 感兴趣。

        通过这个方法,希望你能知道如何进行一个向量化的计算来对所有的用户和所有的电影进行评分计算。同时希望你也能掌握,通过学习特征参数来找到相关电影和产品的方法。

  五、推行工作上的细节:均值归一化

让我们来看下面的用户评分数据:

        如果我们新增一个用户 Eve,并且 Eve 没有为任何电影评分,那么我们以什么为依据为Eve推荐电影呢?我们首先需要对结果 Y 矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值

然后我们利用这个新的 Y 矩阵来训练算法,如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测值为(\theta^{(j)})^T x^{(i)}+\mu_i。对于Eve,我们的新模型会认为她给每部电影的评分都是该电影的平均分。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPT用来润色论文\生成完整长篇论文\进行AI绘图,真的太香了!

详情点击公众号:技术科研吧 链接:GPT用来润色论文\生成完整长篇论文\进行AI绘图,真的太香了! 一:AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百…

歌声悠扬如往昔

有一首歌 - 朱晓琳(网易云单曲) 作词 : 陈彼得作曲 : 陈彼得有一首歌我想起你那时候微风轻轻有一首歌我想起你你的感觉温馨有多少的欢笑就有多少的忧伤 愿时光在这里停住(好景不常在)歌声悠扬如往昔哦哦哦咿咿咿有一首歌我和你词意朦胧旋律依稀唱一首歌…

云端录制直播流视频,上传云盘

前言 哪一天我心血来潮,想把我儿子学校的摄像头视频流录制下来,并保存到云盘上,这样我就可以在有空的时候看看我儿子在学校干嘛。想到么就干,当时花了一些时间开发了一个后端服务,通过数据库配置录制参数,…

Vue引入Axios

1.命令安装axios和vue-axios npm install axios --save npm install vue-axios --save 2.package.json查看版本 3.在main.js中引用 import axios from axios; import VueAxios from vue-axios; Vue.use(VueAxios,axios) 4.如何使用 (初始化方法) 将下列代…

微信小程序实现时间轴效果

目录 引言时间轴效果的应用场景微信小程序的优势时间轴效果的设计思路时间轴界面布局数据结构设计实现时间轴效果WXML结构设计WXSS样式设计JavaScript逻辑实现说明引言 时间轴效果的应用场景 时间轴效果作为一种独特且直观的信息展示形式,已经被广泛应用于各种场景中,提供了…

2023年最受欢迎的4款绘图软件全面评测!

无论你是一个专业的插画家,还是一个有创造力的人,想要随时记录生活的灵感,现在你只需要拿起平板电脑或打开电脑浏览器来描述你脑海中的图片。在这篇文章中,我们选择了四个强大、方便和易于使用的绘图软件,其中一个必须…

【算法】{画决策树 + dfs + 递归 + 回溯 + 剪枝} 解决排列、子集问题(C++)

文章目录 1. 前言2. 算法例题46.全排列78.子集 1. 前言 dfs问题 我们已经学过,对于排列、子集类的问题,一般可以想到暴力枚举,但此类问题用暴力解法 一般都会超时,时间开销过大。对于该种问题,重点在于尽可能详细的 画…

【python】pyqt6信号与槽的代码与designer设置方法

pyqt6信号与槽的作用 整体过程 对象(控件)接收到一个信号(类似clicked这样的函数),就会对接受者(自身或者其他控件)发出一个我被点击了的信息,然后这个接受者就会执行槽&#xff0…

计算机网络_1.6.3 计算机网络体系结构分层思想举例

1.6.3 计算机网络体系结构分层思想举例 1、实例引入(用户在主机中使用浏览器访问web服务器)2、从五层原理体系结构的角度研究该实例3、练习题 笔记来源: B站 《深入浅出计算机网络》课程 本节通过一个常见的网络应用实例,来介绍计…

代码混淆技术综述与优化方法

摘要 本文介绍了代码混淆的概念和目的,并提供了Python代码混淆的宏观思路。同时,还介绍了一种在线网站混淆Python代码的方法,并给出了混淆前后的示例代码。 引言 在当今信息时代,软件代码的保护显得尤为重要。代码混淆是一种常…

ReentrantLock相较于synchronized有哪些区别(一)?

ReentrantLock特点 相对于 synchronized 它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量 与 synchronized 一样,都支持可重入 基本使用语法如下: public class Test {public static void main(String[] args) {Reentran…

第十一章[文件系统]:11.2:文件的复制/删除/移动

一,相关文档: os模块: os --- 多种操作系统接口 — Python 3.12.1 文档源代码: Lib/os.py 本模块提供了一种使用与操作系统相关的功能的便捷式途径。 如果你只是想读写一个文件,请参阅 open() ,如果你想操作文件路径,请参阅 os.path 模块,如果你想读取通过命令行给出的所…

Java GC-常见垃圾回收器

目录 前言一、垃圾回收器分类二、垃圾回收器介绍1、Serial 收集器2、ParNew 收集器3、Parallel Scavenge 收集器4、Serial Old 收集器5、Parallel Old 收集器6、CMS 收集器(多线程标记清除算法)7、G1 收集器 三、项目中垃圾收集器选型 前言 Java的垃圾回…

蓝桥杯每日一题-----数位dp

前言 今天浅谈一下数位dp的板子,我最初接触到数位dp的时候,感觉数位dp老难了,一直不敢写,最近重新看了一些数位dp,发现没有想象中那么难,把板子搞会了,变通也会变的灵活的多! 引入…

如何以管理员身份删除node_modules文件

今天拉项目,然后需要安装依赖,但是一直报错,如下: 去搜这个问题会让把node_modules文件先删掉 再去安装依赖。我在删除的过程中会说请以管理员身份来删除。 那么windows如何以管理员身份删除node_modules文件呢? wi…

Python绘制热力图

最近投SCI论文的时候,有些实验结果需要热力图展示,所以专门试了一下如何用python绘制热力图,发现简单好用,下面分享给大家具体方法。 一、安装python库 需要安装pandas、seaborn、matplotlib安装包依赖,均用pip一键安…

深入了解 Ansible:全面掌握自动化 IT 环境的利器

本文以详尽的篇幅介绍了 Ansible 的方方面面,旨在帮助读者从入门到精通。无论您是初学者还是有一定经验的 Ansible 用户,都可以在本文中找到对应的内容,加深对 Ansible 的理解和应用。愿本文能成为您在 Ansible 自动化旅程中的良师益友&#…

vue学习91-105

vue的基本认知p91 创建一个空仓库p93 vue 路由 vuex版本 2 3 3 3 4 4 npm的vuex装包npm install vuex --save vuex里有仓库,仓库放vuex核心代码,所有组件都能访问到 const store new Vuex.Store()//访问stored this.$store如何提供$访问vuex的数据p94 核心概念-…

GNSS模块的惯导技术:引领定位科技的前沿

全球导航卫星系统(GNSS)模块的惯导技术是一项颇具前瞻性的科技,它结合了全球定位系统和惯性导航技术,为各个领域的定位需求提供了更为精准和可靠的解决方案。本文将深入探讨GNSS模块的惯导技术,以及它如何在多个领域中…

DATAX改造支持geometry类型数据同步

数据库使用postgresql安装了postgis插件存储了geometry空间数据,想使用datax做数据同步,但datax本身不支持geometry类型数据,如何改造呢? 1.首先下载已改造支持geometry类型的datax引擎,下载地址 https://download.c…