Typesetting math: 81%

machine learning 之 Recommender Systems

整理自Andrew Ng的machine learning 课程 week 9.

 

目录:

  • Problem Formulation(问题的形式)
  • Content Based Recommendations(基于内容的推荐)
  • Collaborative Filtering(协同过滤)
  • Collaborative Filtering Algorithm(协同过滤算法)
  • Vectorization: Low Rank Matrix Factorization(向量化:矩阵低秩分解)
  • Implementation Detail: Mean Normalization(具体实施:均值正则化)

 

1、Problem Formulation

推荐系统在机器学习领域是一个很流行的应用。

比如说,我们尝试向用户推荐电影。我们可以使用以下定义:

  • nunu:the number of users,用户数
  • nmnm:the number of movies,电影数
  • r(i,j)=1r(i,j)=1 if user j has rated movie i,用户j是否对电影i进行了评分
  • y(i,j)y(i,j):rating given by user j to movie i(只有在r(i,j)=1时才有值),用户j对电影i的评分

 

2、Content Based Recommendations

我们可以定义两个特征x1x1x2x2,分别代表电影的浪漫程度和动作程度(值在0-1之间);

一个预测电影评分的做法可以是,对每一个用户做linear regression,得到每个用户的θ(j)R3θ(j)R3(这里自动加入了x0=1x0=1),这样对用户j对电影i的评分的预测值就是(θ(j))Tx(i)(θ(j))Tx(i)

  • θ(j)θ(j):用户j的参数向量
  • x(i)x(i):电影i的特征向量

对于用户j,电影i,预测的评分即为(θ(j))Tx(i)(θ(j))Tx(i)

  • m(j)m(j):用户j打分的电影数目

为了学习参数向量θ(j)θ(j)(用户j的参数向量),我们作如下操作:

minθ(j)12i:r(i,j)=1(θ(j)x(i)y(i,j))2+λ2nk=1(θ(j)k)2minθ(j)12i:r(i,j)=1(θ(j)x(i)y(i,j))2+λ2nk=1(θ(j)k)2

这其实是和线性回归的类似的损失函数

为了学习所有用户的参数向量:

minθ(1),...,θ(nu)12nuj=1i:r(i,j)=1(θ(j)x(i)y(i,j))2+λ2nuj=1nk=1(θ(j)k)2minθ(1),...,θ(nu)12nuj=1i:r(i,j)=1(θ(j)x(i)y(i,j))2+λ2nuj=1nk=1(θ(j)k)2

以上的损失函数和线性回归中的损失函数一样,所以我们也可以用线性回归的梯度下降法去更新参数:

θ(j)k=θ(j)kαi:r(i,j)=1((θ(j))Tx(i)y(i,j))x(i)kk=0θ(j)k=θ(j)kαi:r(i,j)=1((θ(j))Tx(i)y(i,j))x(i)kk=0

θ(j)k=θ(j)kα(i:r(i,j)=1((θ(j))Tx(i)y(i,j))x(i)k+λθ(j)k)k0θ(j)k=θ(j)kα(i:r(i,j)=1((θ(j))Tx(i)y(i,j))x(i)k+λθ(j)k)k0

这里唯一与线性回归中的不同就是省略掉的常数m是不一样的。

 

3、Collaborative Filtering

实际中很难去定义和计算一部电影的浪漫度和动作度,为了解决这个问题,可以使用feature finder;

可以在之前询问用户对不同种类的电影的喜爱程度,直接提供θθ参数;

然后就可以通过参数推算特征了:

minx(1),...,x(nm)12nmi=1j:r(i,j)=1(θ(j)x(i)y(i,j))2+λ2nmi=1nk=1(x(i)k)2minx(1),...,x(nm)12nmi=1j:r(i,j)=1(θ(j)x(i)y(i,j))2+λ2nmi=1nk=1(x(i)k)2

 

你也可以随机的猜测一些θθ的值,然后用这些θθ的值去计算特征的值,这样重复的计算,最后也可以收敛到比较好的特征的值

 依据上述:

  • 知道了参数θθ,我们可以估计特征x;
  • 知道了特征x,我们可以估计参数θθ

这就是协同过滤(Collaborative Filtering)。

 

4、Collaborative Filtering Algorithm

为了加快计算的速度,我们其实可以在最小化时同步的计算参数和特征:

J(x,θ)=12(i,j):r(i,j)=1((θ(j))Tx(i)y(i,j))2+lambda2nuj=1nk=1(θ(j)k)2+lambda2nmi=1nk=1(x(i))2J(x,θ)=12(i,j):r(i,j)=1((θ(j))Tx(i)y(i,j))2+lambda2nuj=1nk=1(θ(j)k)2+lambda2nmi=1nk=1(x(i))2

这个式子看起来比较复杂,其实只是结合了参数θθ和特征x的损失函数,由于算法可以学习,所以不需要设定一个x0=1x0=1,因此xRn,θRnxRn,θRn

完整算法如下:

  1. x(1),...,x(nm),θ(1),...,θ(nu)x(1),...,x(nm),θ(1),...,θ(nu)初始化为一些随机的很小的值;(不能把它们初始化为0,因为和神经网络中一样,要break symmetry,否则计算出来的特征的值都是一样的)
  2. 使用梯度下降(或者其他的优化算法)最小化J(x(1),...,x(nm),θ(1),...,θ(nu))J(x(1),...,x(nm),θ(1),...,θ(nu)),参数的更新如下:
    • x(i)k=x(i)kα(j:r(i,j)=1((θ(j))Tx(i)y(i,j))θ(j)k+\lambdax(i)k)x(i)k=x(i)kα(j:r(i,j)=1((θ(j))Tx(i)y(i,j))θ(j)k+\lambdax(i)k)
    • θ(j)k=θ(j)kα(i:r(i,j)=1((θ(j))Tx(i)y(i,j))x(i)k+λθ(j)k)

   3. 对于一个参数为θ的用户和特征为x的电影,那么预测的评分为(θ)Tx

 

5、Vectorization: Low Rank Matrix Factorization

为了实现向量化的计算,公式如下:Y=XΘT

一个m*n的矩阵的秩r如果很低,那么这个矩阵可以分解为一个m*r和一个r*n的矩阵相乘(有点类似SVD分解),所以Y可以直接分解得到X和Θ

如何定义电影i和电影j的相关度?

||xixj||,这个值越小,说明电影i和电影j的相似度越大。

 

6、Implementation Detail: Mean Normalization

考虑一个问题,如果一个用户没有给任何一部电影评分,那么通过之前的方法计算出来的此用户对任何一部电影的评分都会是0,这显然是不对的,那么如何解决这个问题呢?

实际上,我们可以通过Mean Normalization去处理评分矩阵,得到一个新的评分矩阵Y=Yμ对这个新的矩阵利用协同过滤算法,计算出用户参数矩阵和特征矩阵,再进行预测评分,此时预测时需要在结果上再加上一个均值,因为我们的评分矩阵是经过处理的,所以求预测时,也需要再把这个之前减去的均值再加回来。

 

posted @   Echo_fy  阅读(137)  评论(0编辑  收藏  举报
编辑推荐:
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
阅读排行:
· 2025,回顾出走的 10 年
· 【保姆级教程】windows 安装 docker 全流程
· 分享 3 款基于 .NET 开源且免费的远程桌面工具
· 基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
· 由 MCP 官方推出的 C# SDK,使 .NET 应用程序、服务和库能够快速实现与 MCP 客户端
点击右上角即可分享
微信分享提示