推荐系统(Recommender Systems)
本博客是针对Andrew Ng在Coursera上的machine learning课程的学习笔记。
基于内容的推荐(Content-based recommendation)
问题表述
假设我们有如下评分矩阵(纵向为同一用户的评分对不同电影的评分,横向为不同用户对同一部电影的评分):
$n_u$表示用户数目,$n_m$表示电影数目,$\theta{(j)}$表示用户j对电影特征的喜好程度参数(一个向量),$x{(i)}$表示电影i的特征向量。当我们要预测用户j对电影i的评分时,就可以使用以下公式:$$Rating=(\theta{(j)})Tx^{(i)}$$
即用户对电影不同特征的喜好向量的转置,与电影的特征向量相乘。
问题范式
那么,用公式化的语言来总结上述的问题,形式如下:
总结而言,我们通过以$\theta{(j)}$为目标参数最小化损失函数(加上正则项),以学习到$\theta{(j)}$的最优值,以用于预测用户j对于其尚未评分 的电影的评分。(删除$m^{(j)}$是因为其是一个常数,在最小化损失函数的过程中对结果没有影响)
接下来,我们将最优化目标做进一步转化:将所有需要预测的用户的损失函数加总在一起,得到我们最终的优化目标(如下图):
参数学习的方式还是用梯度下降(注意对截距项和非截距项参数的更新上,正则项是否存在的差别)
协同过滤(collaborative filtering)
问题引入
我们之前假设了已经获得了每部电影的特征向量,但实际情况中,往往电影的特征向量数据也可能没有,这种情况下,我们怎么预测用户对电影的评分呢?假设我们的每个用户已经告诉了我们他们对于不同的电影特征的喜好程度($\theta{(j)}$),那么根据$\theta{(j)}$,以及已知的用户给电影的评分,我们可以大致判断某些电影中的特征向量的值:
最优化算法
给定各用户的喜好向量$\theta{(j)}$,我们以学习到电影的特征向量$x{(i)}$为目的,以以下损失函数的最小化为优化目标(上面的式子是以学习到某电影i的特征向量为目的,下面的式子是一学习到所有电影的特征向量为目的):
上一个部分讲的是如何通过电影的特征向量和电影评分学习到用户的喜好向量,而协同过滤是通过用户的喜好向量学习到电影的特征向量,因此这两个过程的结果可以互相为对方所用,因此可以将结果交给对方交互进行学习过程,以达到最终最优的效果。
协同过滤的最优化目标
当我们将上述的两种学习过程组合在一起,便可以同时学习用户的喜好向量和电影的特征向量,这便是我们的协同过滤算法的最优化目标:
协同过滤算法
低阶矩阵因式分解(Low Rank Matrix Factorization)。
假设我们有以下四个用户对五部电影的评分数据(有部分缺失),我们将用户的评分放入一个矩阵Y:
我们可以通过协同过滤算法获得用户对于电影的完整的评分矩阵(用拟合模型获得估计评分填入缺失部分)。而如果想通过向量化的方式直接获得这个评分矩阵,可以对X和$\Theta$作处理,如下图:
而这里通过$X*\Theta^T$的做法其实就是低阶矩阵因式分解,因为获得的运算结果的完整评分矩阵就是一个被称为低阶矩阵的东西(名称来源)。
来自《集体智慧编程》的非负矩阵因式分解(Non-Negative Matrix Factorization)的参考内容,以帮助读者更好理解矩阵因式分解的知识:
对矩阵进行因式分解,其本质就是要找到两个更小的矩阵,使得二者相乘可以得到原来的矩阵,而这两个更小的矩阵分别称为特征矩阵和权重矩阵。
那么我们如何来找两部彼此相似度高的电影呢?
对于每个电影,我们可以得到它的一个特征向量$x^{(i)}\in R^n$,如下图,只需找到特征向量之间距离小的两部电影即可:
均值标准化(Mean Normalization)
同样,对于如下评分矩阵,我们用协同过滤的算法去尝试进行估计:
我们仍然将评分放入一个Y矩阵中,并可以算出每一行的一个均值,将Y的均值提取出来$\mu$,并利用均值将Y矩阵进行相应地改变:保证每一行均值不变的情况下,使得评分值均匀分布,这便是均值标准化的步骤:
然后,我们将均值标准化后的Y矩阵假设为我们从用户那边得到的真实评分矩阵,从该矩阵中学习参数$\theta{(j)}$和$x{(i)}$。于是,当我们要预测用户j对电影i的评分值时,就可以用$(\theta{(i)})T(x^{(i)})+\mu_i$的方式来进行预测。那么这时,假若用户j的$\theta$为0向量(用户j没有对任何电影给过评分),我们即用其它用户对电影i的平均评分作为对用户j对电影i的评分值。
推荐系统(Recommender Systems)的更多相关文章
- [C11] 推荐系统(Recommender Systems)
推荐系统(Recommender Systems) 问题阐述(Problem Formulation) 将 推荐系统 纳入这门课程来讲有以下两个原因: 第一.仅仅因为它是机器学习中的一个重要的应用.在 ...
- 斯坦福第十六课:推荐系统(Recommender Systems)
16.1 问题形式化 16.2 基于内容的推荐系统 16.3 协同过滤 16.4 协同过滤算法 16.5 矢量化:低秩矩阵分解 16.6 推行工作上的细节:均值归一化 16.1 问题形式 ...
- Ng第十六课:推荐系统(Recommender Systems)
16.1 问题形式化 16.2 基于内容的推荐系统 16.3 协同过滤 16.4 协同过滤算法 16.5 矢量化:低秩矩阵分解 16.6 推行工作上的细节:均值归一化 16.1 问题形式 ...
- 推荐系统(recommender systems):预测电影评分--问题描述
推荐系统很重要的原因:1>它是机器学习的一个重要应用2>对于机器学习来说,特征是非常重要的,对于一些问题,存在一些算法能自动帮我选择一些优良的features,推荐系统就可以帮助我们做这样 ...
- 推荐系统(recommender systems):均值归一化(mean normalization)
均值归一化可以让算法运行得更好. 现在考虑这样一个情况:一个用户对所有的电影都没有评分,即上图所示 的Eve用户.现在我们要学习特征向量(假设n=2) 以及用户5的向量θ(5),因为用户Eve没有对任 ...
- 推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:低秩矩阵分解(low rank matrix factorization)
如上图中的predicted ratings矩阵可以分解成X与ΘT的乘积,这个叫做低秩矩阵分解. 我们先学习出product的特征参数向量,在实际应用中这些学习出来的参数向量可能比较难以理解,也很难可 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 16—Recommender Systems 推荐系统
Lecture 16 Recommender Systems 推荐系统 16.1 问题形式化 Problem Formulation 在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到 ...
- 【RS】Matrix Factorization Techniques for Recommender Systems - 推荐系统的矩阵分解技术
[论文标题]Matrix Factorization Techniques for Recommender Systems(2009,Published by the IEEE Computer So ...
- 【RS】Improving Implicit Recommender Systems with View Data - 使用浏览数据提升隐式推荐系统
[论文标题]Improving Implicit Recommender Systems with View Data(IJCAI 18) [论文作者]Jingtao Ding , Guanghui ...
- 【RS】Wide & Deep Learning for Recommender Systems - 广泛和深度学习的推荐系统
[论文标题]Wide & Deep Learning for Recommender Systems (DLRS'16) [论文作者] Heng-Tze Cheng, Levent Koc, ...
随机推荐
- Hello World!(这不是第一篇)
如题,这不是第一篇blog,但是为了表示这个闲置了1年多的blog现在被我正式启用了,我还是走个过场吧. #include <iostream> using namespace std; ...
- AF(操作者框架)系列(3)-创建第一个Actor的程序
这节课的内容,语言描述基本是无趣的,就是一个纯程序编写,直接上图了. 如果想做其他练习,可参考前面的文章: https://zhuanlan.zhihu.com/p/105133597 1. 新建一个 ...
- sublime 安装Anaconda插件 配置python开发环境
我的sublime 3 python 3.6.6 安装Anaconda插件 由于Anaconda插件本身无法知道Python安装的路径,所以需要设置Python主程序的实际位置.选择Settings ...
- 在idea下遇到的问题汇总(间接性更新)
在idea下遇到的问题汇总(间接性更新) tomcat下的jsp代码问题: 在idea的环境下,遇到jsp代码.符号失效,首先需要考虑到jar包没有引入,情况如图: 这种情况是因为jar包没有导入进去 ...
- VUE深入浅出(学习过程)
VUE 2020年02月26日06:27:10 复习过Java8新特性之后开始学习VUE. 了解node了之后,来了解一下VUE.针对于学习VUE用什么开发工具这个问题上,我这里有vsCode和web ...
- 使用EventBus + Redis发布订阅模式提升业务执行性能
前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...
- CSS3详解:border color
继续我们的 ,大家觉得怎么样呢?
- 网络|Trojan 网络代理服务搭建
Trojan 网络代理服务搭建 前言 本文目的在于帮助相同困惑的网友,让使用更加简单. Trojan为Trojan-GFW开源的一款新思路网络代理软件, 前期准备 [x] 服务器:系统CentOS 7 ...
- 优化一、js
1.防抖和节流 2.深拷贝和浅拷贝
- 上线前测试的bug,要不要处理,跟版本的关系
最近有两个项目是在旧版本上实施的.上线前经过一轮测试后,发现了一些产品(我们的产品确实不稳定) 在这个项目上,修改产品bug是肯定的.但是要不要追踪这些bug? 这就跟版本使用范围有关系了,毕竟要考虑 ...