12.3. 协同过滤算法

本文最后更新于 2024年1月27日 下午

协同过滤算法

和基于内容的线性回归模型不同,协同过滤算法能够自动学习所要使用的特征,避免了需要先手动评价“爱情度”和“动作度”这样的不可理喻的事情。

整合到一起

在上一节中利用线性回归模型作出了两个算法分别用于预测用户的取向和电影的内容特征。两个算法的思路分别是;已知电影的特征\(x^{(i)}\),求出用户的取向\(θ^{(j)}\);已知用户的取向\(θ^{(j)}\),求出电影的特征\(x^{(i)}\)——这看起来是一个先有鸡还是先有蛋的问题,解决办法的构想如下:
1. 随机初始化\(θ\) 2. 利用随机初始化的\(θ\)建立线性回归模型,预测出电影的特征向量\(x\)
3. 利用预测出电影的特征向量建立线性回归模型,预测出用户的取向\(θ\)

重复二三两步,\(θ\)\(x\)在不断线性回归迭代中得到优化,最终算法将收敛并得到到合理的电影特征向量。
但是这种思路中包含反复建模的过程,这使得算法的计算量倍增。

应用线性回归的协同过滤算法

代价函数

协同过滤算法(Collaborative filtering)在上述思路的基础上能够同时优化\(θ\)\(x\),进而减小计算量。
之前的两个代价函数:
\[J(θ)=\frac{1}{2}∑_{j=1}^{n_u}∑_{i:r(i,j)=1}((θ^{(j)})^Tx^{(j)}-y^{(i,j)})^2+\frac{λ}{2}∑_{j=1}^{n_u}∑_{k=1}^n(θ_k^{(j)})^2\]
\[J(x^{(j)})=\frac{1}{2}∑_{j=1}^{n_m}∑_{i:r(i,j)=1}((θ^{(i)})^Tx^{(i)}-y^{(i,j)})^2+\frac{λ}{2}∑_{j=1}^{n_m}∑_{k=1}^n(x_k^{(i)})^2\]
这两个代价函数中\(\frac{1}{2}∑∑_{i:r(i,j)=1}((θ^{(i)})^Tx^{(i)}-y^{(i,j)})^2\)的本质都是对所有用户的所有评分计算后求和,因此可以合并。
定义协同过滤算法的代价函数:
\[J(θ^{(i)},x^{(j)})=\frac{1}{2}∑_{(i,j):r(i,j)=1}((θ^{(i)})^Tx^{(i)}-y^{(i,j)})^2+\frac{λ}{2}∑_{j=1}^{n_u}∑_{k=1}^n(θ_k^{(j)})^2+\frac{λ}{2}∑_{j=1}^{n_m}∑_{k=1}^n(x_k^{(i)})^2\] 找到使得\(J(θ^{(i)},x^{(j)})\)最小化的\((θ^{(i)},x^{(j)})\)

由于现在是在学习所有的特征,没有必要将一个特征值硬编码为1,因为如果真的有恒为1的特征,算法也能自己学习到。在此可以将\(x\)中的截距项\(x_0\)删除以统一维度为\(n\)

算法流程

  1. 随机初始化小的\((θ^{(i)},x^{(j)})\)
  2. 使用梯度下降算法或者是其他的算法来最小化\(J(θ^{(i)},x^{(j)})\)
  3. 给定一个特定用户的特征向量\(θ\)和一个特定的电影,利用:
    \[y_{pre}(i,j)=(θ^{(j)})^Tx^{(i)}\] 来预测用户对某部电影的评分

协同过滤算法的理解

协同过滤算法的“协同”体现在系统通过观察大量用户的行为同时对内容和用户进行建模,并且每一个用户的行为都在帮助系统建立更好的内容模型。反过来,优秀的内容模型也会帮助建立精准的用户行为模型,实现精准的内容推荐。


12.3. 协同过滤算法
https://l61012345.top/2021/08/21/机器学习——吴恩达/12. 内容推荐/12.3. 协同过滤算法/
作者
Oreki Kigiha
发布于
2021年8月21日
更新于
2024年1月27日
许可协议