推荐系统–矩阵分解(1)
推荐系统–矩阵分解(2)
推荐系统–矩阵分解(3)
推荐系统–矩阵分解(4)
推荐系统–矩阵分解(5)
推荐系统–矩阵分解(6)

1 引入

一个矩阵可以分解为两个小矩阵的乘积,以音乐为例,利用潜在特征向量来给用户和音乐打上标签:

以电影为例,利用潜在特征向量来给用户和电影打上标签:

推荐系统的评分矩阵是稀疏的,这里的潜在特征不可解释,要模型自己去学,KKK代表潜在特征的维度,其大小决定决定了潜在特征的表达能力,KKK越大,信息表达就越强,即用户的兴趣和物品的分类划分得就越具体。

2 SVD

评分矩阵Rm×nR_{m \times n}Rm×n​可以分解为两个小矩阵Um×kU_{m \times k}Um×k​,Vn×kV_{n\times k}Vn×k​;此处k≪m&k≪nk \ll m \& k \ll nk≪m&k≪n。

UUU矩阵的一行表示用户uuu的特征向量pup_upu​,VVV矩阵的一列表示物品tit_iti​的特征向量qiq_iqi​,利用这两个向量可以预测用户uuu对物品tit_iti​的偏好:

Preference⁡(u,i)=rui^=puTqi=∑k=1Kpu,kqk,i(1)\operatorname{Preference}(u, i)=\hat{r_{u i}}=p_{u}^{T} q_{i}=\sum_{k=1}^{K} p_{u, k} q_{k, i} \tag1Preference(u,i)=rui​^​=puT​qi​=k=1∑K​pu,k​qk,i​(1)
其优化目标函数为:
arg min⁡θL(θ)=12arg⁡min⁡⏟pu,qi∑u,iIui[(rui−puTqi)2]+λ(∥pu∥F2+∥qi∥F2)(2)\argmin_{\theta} L(\theta)=\frac{1}{2}\underbrace{\arg \min }_{p_{u}, q_{i}} \sum_{u, i} I_{ui}\left[\left(r_{u i}-p_{u}^T q_{i}\right)^{2}\right] +\lambda(\|p_u\|_{F}^{2}+\|q_i\|_{F}^{2}) \tag2θargmin​L(θ)=21​pu​,qi​argmin​​u,i∑​Iui​[(rui​−puT​qi​)2]+λ(∥pu​∥F2​+∥qi​∥F2​)(2)
符号说明:
为了后面求梯度的时候好看一点,在函数前面加上了12\frac{1}{2}21​;
eui=rui−puTqie_{ui} = r_{u i}-p_{u}^T q_{i}eui​=rui​−puT​qi​;
θ\thetaθ:矩阵分解的参数,即pu,qip_u, q_ipu​,qi​;
pup_upu​:用户uuu对应的向量,表示用户对电影某些题材的偏好程度,以潜在因子的方式表示;
qiq_iqi​:项目iii对电影某些题材的符合程度,以潜在因子的方式表示;
λ\lambdaλ:正则项的系数。
对公式(2)第一项求偏导,得到如下公式:
∂L1∂pu,k=12∂∂pu,k(eui2)=eui∂∂pu,keui=eui∂∂pu,k(rui−∑k=1Kpu,kqk,i)=−euiqk,i∂L1∂qk,i=12∂∂pk,i(eui2)=eui∂∂pk,ieui=eui∂∂pk,i(rui−∑k−1Kpu,kqk,i)=−euipu,k\begin{aligned} \frac{\partial L_1}{\partial p_{u, k}} =\frac{1}{2}\frac{\partial}{\partial p_{u, k}}\left(e_{u i}^{2}\right)= e_{u i} \frac{\partial}{\partial p_{u, k}} e_{u i}=e_{u i} \frac{\partial}{\partial p_{u, k}}\left(r_{u i}-\sum_{k=1}^{K} p_{u, k} q_{k, i}\right)=-e_{u i} q_{k, i} \\ \frac{\partial L_1}{\partial q_{k, i}} =\frac{1}{2}\frac{\partial}{\partial p_{k, i}}\left(e_{u i}^{2}\right)= e_{u i} \frac{\partial}{\partial p_{k, i}} e_{u i}=e_{u i} \frac{\partial}{\partial p_{k, i}}\left(r_{u i}-\sum_{k-1}^{K} p_{u, k} q_{k, i}\right)=-e_{u i} p_{u, k} \end{aligned} ∂pu,k​∂L1​​=21​∂pu,k​∂​(eui2​)=eui​∂pu,k​∂​eui​=eui​∂pu,k​∂​(rui​−k=1∑K​pu,k​qk,i​)=−eui​qk,i​∂qk,i​∂L1​​=21​∂pk,i​∂​(eui2​)=eui​∂pk,i​∂​eui​=eui​∂pk,i​∂​(rui​−k−1∑K​pu,k​qk,i​)=−eui​pu,k​​
对公式(2)第二项求偏导,得到如下公式:
∂L2∂pu,k=λpu,k∂L2∂qk,i=λqk,i\begin{aligned} \frac{\partial L_2}{\partial p_{u, k}} = \lambda p_{u, k} \\ \frac{\partial L_2}{\partial q_{k, i}} = \lambda q_{k, i} \end{aligned} ∂pu,k​∂L2​​=λpu,k​∂qk,i​∂L2​​=λqk,i​​
整理后可得到迭代公式为:
pu,k=pu,k+η(euiqk,i−λpu,k)qk,i=qk,i+η(euipu,k−λqi,k)(3)\begin{aligned} p_{u, k} &=p_{u, k}+\eta\left(e_{u i} q_{k, i}-\lambda p_{u, k}\right) \\ q_{k, i} &=q_{k, i}+\eta\left(e_{u i} p_{u, k}-\lambda q_{i, k}\right) \end{aligned} \tag3 pu,k​qk,i​​=pu,k​+η(eui​qk,i​−λpu,k​)=qk,i​+η(eui​pu,k​−λqi,k​)​(3)
符号说明:
η\etaη: 更新步长,一般取0.005。

推荐系统--矩阵分解(1)相关推荐

  1. 推荐系统--矩阵分解(5)

    推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 8 基于隐式反馈的矩阵分解 8.1 引入 相 ...

  2. 推荐系统--矩阵分解(3)

    推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 5 TimeSVD++:增加时间因素 物品的 ...

  3. 推荐系统--矩阵分解(4)

    推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 7 基于情感分析的矩阵分解 7.1 引入 [ ...

  4. 推荐系统--矩阵分解(2)

    推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 3 BiasSVD:考虑偏置 有一些用户会给 ...

  5. 推荐系统——矩阵分解

    一.隐因子模型(Latent Factor Model,LFM) LFM是推荐系统中的经典模型,它也就是2006年Simon Funk在博客中公开的算法,当时背景是Netflix Prize比赛.LF ...

  6. 入门推荐系统——矩阵分解

    1.隐语义模型与矩阵分解 协同过滤算法完全没有利用到物品本身或者是用户自身的属性, 仅仅利用了用户与物品的交互信息就可以实现推荐,是一个可解释性很强, 非常直观的模型.存在问题, 第一个就是处理稀疏矩 ...

  7. 推荐系统——矩阵分解FM

    矩阵分解 隐语义模型与矩阵分解 之所以我们提出隐语义模型与矩阵分解,原因就是[[协同过滤]]存在泛化能力弱的问题 而对于隐语义模型而言,我们可以利用隐向量来代表隐藏信息 此外,也可以在一定程度上弥补[ ...

  8. 【转载】推荐系统-矩阵分解-SVD-通俗易懂

    [转载[https://blog.csdn.net/u011412768/article/details/52972081#commentBox] 因为要用到基于SVD的推荐作为baseline,所以 ...

  9. 推荐系统--联邦学习下的矩阵分解(6)

    推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 9 应用于联邦学习的矩阵分解 这个部分主要参 ...

最新文章

  1. 用路由器限制局域网的带宽流量
  2. CCSprite setTextureRect 的坐标的坑
  3. [YTU]_2384 ( 矩形类中运算符重载【C++】)
  4. java基础知识讲解(一)数据类型和运算符
  5. React.Fragment 包裹标签
  6. filter过滤后重新添加_Spring Boot 2.X(十):自定义注册 Servlet、Filter、Listener
  7. 如何用python画转盘_如何用ppt做一个抽奖转盘 看完你学会了么
  8. Vue组件学习之事件总线和消息发布订阅
  9. VDI成长之路:Windows桌面优化配置(持续更新-20120227)
  10. cmos和ttl_TTL和CMOS电平别傻傻分不清
  11. 计算机网络胡工程施工税率,弱电项目增值税6%、9%、13%税率怎样区分?项目经理必知内容...
  12. 博图注册表删除方法_安装西门子软件反复提示重启电脑的解决方法
  13. element-ui表格的滚动条样式修改(当固定table表格高度时默认滚动条样式太丑)
  14. 人人都能写游戏系列(三)Unity 3D平衡球游戏
  15. Android 购物选择颜色、尺码实现(二)
  16. 敏捷开发实践经验分享
  17. 2020年海峡两岸最佳职场榜单,38家企业入选
  18. 浏览器主页被360/2345等劫持
  19. Docker 部署SpringBoot应用
  20. 苹果6s解除耳机模式_百元TWS蓝牙耳机i27小试

热门文章

  1. php伪静态不支持中文,wordpress伪静态如何支持中文(目前不支持分类目录中文)...
  2. composer 路径_深入学习Composer原理(三)
  3. 微软发布人工智能教育与学习共建社区
  4. python 字符转义_2500字 字符串专题总结
  5. 挂机宝装mysql_挂机宝安装
  6. 绝对布局优势_前瞻布局+尖端科技+雄厚资金 恒大解锁造车的“正确姿势”
  7. lisp正负调换_lisp中如何把符号转换为字符串
  8. 在前端中如何在表格中最后一行加入输入框_UI设计进阶干货 — 如何制定UI规范...
  9. 【学习笔记】GIT使用
  10. odoo tree视图过滤数据_数据存储结构 LSM Tree PK B TREE (从底层了解数据库设计)...