推荐系统系列之二:矩阵分解
@
目录
- 推荐系统系列之二:矩阵分解
- 1. 理论基础
- 2. 随机梯度下降法(SGD)
- 3. 改进
- 1). 带偏置的SVD(BiasSVD)
- 2). SVD++
- 3). timeSVD
- 4. 模型对比
- 5. 拓展
- 1) 与主题模型结合
- 2) 与社交网络结合
- 3) 与神经网络(CNN)结合
- 声明
- 参考文献
1. 理论基础
说明介绍:
从数学概率的角度,证明了 MF 的由来。这样使得 概率矩阵分解(PMF) 和其他模型的“搭配”有了理论的依据。
来源出处:
- Salakhutdinov et al. Probabilistic matrix factorization. NIPS(2008): 1257-1264.
定义和描述
假设现在有 \(n\) 个用户, \(m\) 个商品,形成一个 \(n×m\) 维的评分矩阵 \(\mathbf{R}\),其中的元素 \(r_{u,i}\) 表示用户 \(u\) 对商品 \(i\) 的评分。假设潜在特征个数为 \(k\),那么 \(n×k\) 维的 \(\mathbf{p}\) 表示用户的潜在特征矩阵,其中 \(\mathbf{p}_{u}\) 表示用户 \(u\) 的潜在特征向量; \(m×k\) 维的矩阵 \(\mathbf{q}\) 表示商品的潜在特征矩阵,其中 \(\mathbf{q}_{i}\) 商品 \(i\)
主要推导:
假设关于已知评分数据的条件分布满足高斯分布:
\[p\left( \mathbf{R}|\mathbf{p},\mathbf{q},\sigma^{2} \right)=\prod_{u=1}^{n}\prod_{i=1}^{m}\left[ N\left( r_{u,i}|\mathbf{p}_{u}\mathbf{q}_{i}^T,\sigma^{2} \right)\right]^{I_{ij}}, \]
其中,\(I_{u,i}\) 表示指示函数,当用户 \(u\) 与商品 \(i\) 有互动时,\(I_{u,i}=1\),否则为0。
再假设用户潜在特征向量和商品潜在特征向量都服从均值为 0 的高斯先验分布,即:
\[p\left( \mathbf{p}|\sigma_{p}^{2} \right)=\prod_{u=1}^{n}N\left( \mathbf{p}_{u}|0,\sigma_{p}^{2}\mathbf{I} \right),p\left( \mathbf{q}|\sigma_{q}^{2} \right)=\prod_{i=1}^{m}N\left( \mathbf{q}_{i}|0,\sigma_{q}^{2}\mathbf{I} \right). \]
注意这个公式中的 \(\mathbf{I}\)
然后,计算 \(\mathbf{p}\) 和 \(\mathbf{q}\)
\[p\left( \mathbf{p},\mathbf{q}|R,\sigma^{2},\sigma_{q}^{2}, \sigma_{p}^{2}\right)=\frac{ p\left( \mathbf{p},\mathbf{q},R,\sigma^{2},\sigma_{q}^{2}, \sigma_{p}^{2}\right) }{ p\left( R,\sigma^{2},\sigma_{q}^{2}, \sigma_{p}^{2}\right) }=\frac{p\left( R|\mathbf{p},\mathbf{q},\sigma^{2}\right)\times p\left( \mathbf{p},\mathbf{q} |\sigma_{q}^{2}, \sigma_{p}^{2}\right)}{p\left( R,\sigma^{2},\sigma_{q}^{2}, \sigma_{p}^{2}\right)} \]
\[\sim p\left( R|\mathbf{p},\mathbf{q},\sigma^{2}\right)\times p\left( \mathbf{p},\mathbf{q} |\sigma_{q}^{2}, \sigma_{p}^{2} \right) \]
\[=p\left( R|\mathbf{p},\mathbf{q},\sigma^{2} \right)\times p\left( \mathbf{p} | \sigma_{p}^{2}\right)\times p\left( \mathbf{q} |\sigma_{q}^{2}\right) \]
\[=\prod_{u=1}^{n}\prod_{i=1}^{m}\left[ N\left( r_{u,i}|\mathbf{p}_{u}\mathbf{q}_{i}^T,\sigma^{2} \right) \right]^{I_{u,i}}\times \prod_{u=1}^{n}\left[ N\left( \mathbf{p}_{u}|0,\sigma_{p}^{2}I \right) \right]\times \prod_{i=1}^{m}\left[ N\left( \mathbf{q}_{i}|0,\sigma_{q}^{2}I \right) \right] \]
等式两边取对数 \(ln\)
\[lnp\left( \mathbf{p},\mathbf{q}|\mathbf{R},\sigma^{2},\sigma_{p}^{2}, \sigma_{q}^{2}\right)=-\frac{1}{2\sigma^{2}}\sum_{u=1}^{n}\sum_{i=1}^{m}{I_{ij}\left( r_{u,i}-\mathbf{p}_{u}\mathbf{q}_{i}^T \right)^2}-\frac{1}{2\sigma_{p}^{2}}\sum_{i=1}^{N}{\mathbf{p}_{u}\mathbf{p}_{u}^{T}}-\frac{1}{2\sigma_{q}^{2}}\sum_{i=1}^{M}{\mathbf{q}_{i}\mathbf{q}_{i}^{T}} \]
\[-\frac{1}{2}\left( \left( \sum_{i=1}^{n}{\sum_{j=1}^{m}{I_{u,i}}} \right) ln\sigma^{2}+nKln\sigma_{p}^{2}+mKln\sigma_{q}^{2}\right)+C, \]
化简得:
\[L=\frac{1}{2}\sum_{u=1}^{n}\sum_{i=1}^{m}{I_{u,i}\left| \left| r_{u,i}-\mathbf{p}_{u} \mathbf{q}^T_{i} \right| \right|^2}+\frac{\lambda_{p}}{2}\sum_{u=1}^{n}{\left| \left|\mathbf{p}_{u} \right| \right| ^{2}}+\frac{\lambda_{q}}{2}\sum_{i=1}^{m}{\left| \left|\mathbf{q}_{i} \right| \right|^{2}} \]
详细推导见:
https://zhuanlan.zhihu.com/p/34422451
2. 随机梯度下降法(SGD)
当 \(\lambda_{p}=\lambda_{q}\)
目标函数:
\[\min \limits_ {\mathbf{p},\mathbf{q}} \frac{1}{2}\sum_{\left ( u,i \right )\in \mathbf{O}} {\left \| r_{u,i}-\mathbf{p}_{u} \mathbf{q}^T_{i} \right \|^2} +\frac{1}{2}\lambda \left ( \left \| \mathbf{p}_{u} \right \|^2 + \left \| \mathbf{q}_{i} \right \|^2 \right ) \]
目标函数 \(L\) 分别对 \(\mathbf{p}_{u}\) 和 \(\mathbf{q}_{i}\)
\[\frac{\partial L}{\partial \mathbf{q}_{i}}= - \left( r_{u,i}-\mathbf{p}_{u} \mathbf{q}^T_{i} \right)\mathbf{p}_{u}+ \lambda \mathbf{q}_{i} \]
\[\frac{\partial L}{\partial \mathbf{p}_{u}}= - \left( r_{u,i}-\mathbf{p}_{u} \mathbf{q}^T_{i} \right)\mathbf{q}_{i} + \lambda \mathbf{p}_{u} \]
采用的是随机梯度下降法(SGD)进行求解,更新 \(\mathbf{p}_{u}\) 和 \(\mathbf{q}_{i}\)
\[\mathbf{p}_{u} \leftarrow \mathbf{p}_{u}-\eta \frac{\partial L}{\partial \mathbf{p}_{u}} =\mathbf{p}_{u}+ \eta \left( \left( r_{u,i}-\mathbf{p}_{u} \mathbf{q}^T_{i} \right)\mathbf{q}_{i}- \lambda \mathbf{p}_{u} \right) \]
\[\mathbf{q}_{i} \leftarrow \mathbf{q}_{i}-\eta \frac{\partial L}{\partial \mathbf{q}_{i}} =\mathbf{q}_{i} + \eta \left( \left( r_{u,i}-\mathbf{p}_{u} \mathbf{q}_{i}^T \right)\mathbf{p}_{u}-\lambda \mathbf{q}_{i} \right) \]
令 \(e_{ui}= r_{u,i}-\mathbf{p}_{u} \mathbf{q}^T_{i}\)
\[\mathbf{p}_{u} \leftarrow \mathbf{p}_{u}+\eta \left( e_{ui}\mathbf{q}_{i}-\lambda \mathbf{p}_{u} \right) \]
\[\mathbf{q}_{i} \leftarrow \mathbf{q}_{i} +\eta \left( e_{ui}\mathbf{p}_{u}-\lambda \mathbf{q}_{i} \right) \]
核心代码:
def update(p, q, r, learning_rate=0.001, lamda_regularizer=0.1):
error = r - np.dot(p, q.T)
p = p + learning_rate*(error*q - lamda_regularizer*p)
q = q + learning_rate*(error*p - lamda_regularizer*q)
loss = 0.5 * (error**2 + lamda_regularizer*(np.square(p).sum() + np.square(q).sum()))
return p,q,loss
实验结果:
数据集:Movielens100K,随机分割成训练集:测试集=8:2
MAE | RMSE | Recall@10 | Precision@10 |
0.7347 | 0.9297 | 0.0293 | 0.0620 |
损失函数曲线:
3. 改进
1). 带偏置的SVD(BiasSVD)
来源出处:
- Koren et al. Matrix factorization techniques for recommender systems.Computer 42.8 (2009).
目标函数:
\[\min \limits_ {\mathbf{p},\mathbf{q}} \frac{1}{2}\sum_{\left ( u,i \right )\in \mathbf{O}} {\left \| r_{u,i}-\widehat{r}_{u,i} \right \|^2} +\frac{1}{2}\lambda \left ( \left \| \mathbf{p}_{u} \right \|^2 + \left \| \mathbf{q}_{i} \right \|^2 + \left \| b_{u} \right \|^2 + \left \| b_{i} \right \|^2\right ) \]
\[\widehat{r}_{u,i}=\mu + b_u + b_i + \mathbf{p}_u \mathbf{q}_i^T \]
\(\mu\)
\(b_u\) :用户 \(u\)
\(b_i\) :商品 \(i\)
说明介绍:
该方法考虑了实际生活中,用户的评分偏好和商品的特性评分。比如,有对于某商品的好与不好,有用户评分很鲜明,给5和1分;有用户评分比较委婉,给5和3分。由此产生了不同的评分习惯。加入这些因素,用潜在特征来预测用户的喜好与”均值“的偏差更合理。
更新公式:
\[\mathbf{p}_{u} \leftarrow \mathbf{p}_{u}+\eta \left( e_{ui}\mathbf{q}_{i}-\lambda \mathbf{p}_{u} \right) \]
\[\mathbf{q}_{i} \leftarrow \mathbf{q}_{i} +\eta \left( e_{ui}\mathbf{p}_{u}-\lambda \mathbf{q}_{i} \right) \]
\[b_u\leftarrow b_u +\eta \left( e_{ui}-\lambda b_u \right) \]
\[b_i\leftarrow b_i +\eta \left( e_{ui}-\lambda b_i \right) \]
核心代码:
def update(p, q, bu, bi, aveg_rating, r, learning_rate=0.001, lamda_regularizer=0.1):
error = r - (aveg_rating + bu + bi + np.dot(p, q.T))
p = p + learning_rate*(error*q - lamda_regularizer*p)
q = q + learning_rate*(error*p - lamda_regularizer*q)
bu = bu + learning_rate*(error - lamda_regularizer*bu)
bi = bi + learning_rate*(error - lamda_regularizer*bi)
return p,q,bu,bi
实验结果:
数据集:Movielens100K,随机分割成训练集:测试集=8:2
MAE | RMSE |
0.7210 | 0.9124 |
loss 曲线:
这图是参数与本文其他模型相同时的收敛曲线,并不好看。
BiasSVD 的学习率不好调,调小 loss 曲线完美收敛,但是 MAE 和 RMSE 结果并不好看,应该是陷入了局部收敛区间;当调大时,loss 曲线又不好看,不过实验结果会好很多。我个人感觉是 BiasSVD 太“精细”了,反而容易陷入局部最优解。
2). SVD++
来源出处:
- Koren Y. Factor in the neighbors: Scalable and accurate collaborative filtering[J]. ACM Transactions on Knowledge Discovery from Data (TKDD), 2010, 4(1): 1.
目标函数:
\[\min \limits_ {} \frac{1}{2}\sum_{\left ( u,i \right )\in \mathbf{O}} {\left \| r_{u,i}-\widehat{r}_{u,i} \right \|^2} +\frac{1}{2}\lambda \left ( \left \| \mathbf{p}_{u} \right \|^2 + \left \| \mathbf{q}_{i} \right \|^2 + \left \| b_{u} \right \|^2 + \left \| b_{i} \right \|^2+ \left \| \mathbf{y}_{j} \right \|^2\right ) \]
\[\widehat{r}_{u,i}=\mu + b_u + b_i + \left( \mathbf{p}_u +\left | I_u \right |^{-\frac{1}{2}}\sum_{j \in I_u}^{}y_j \right)\mathbf{q}_i^T \]
其中 \(I_u\) 为用户 \(u\) 评价过的所有电影的集合; \(\mathbf{y}_j\) 为隐藏的对于商品 \(j\) 的隐含喜好; \(\left | I_u \right |^{-\frac{1}{2}}\)
说明介绍:
SVD++ 是 BiasSVD 的改进版,它考虑了用户的历史评分行为,将这些行为数据作为一个偏置加入到模型中,使模型更“精细”。
更新公式:
\[\mathbf{p}_{u} \leftarrow \mathbf{p}_{u}+\eta \left( e_{ui}\mathbf{q}_{i}-\lambda \mathbf{p}_{u} \right) \]
\[\mathbf{q}_{i} \leftarrow \mathbf{q}_{i} +\eta \left( e_{ui}\left( \mathbf{p}_u +\left | I_u \right |^{-\frac{1}{2}}\sum_{j \in I_u}^{}\mathbf{y}_j \right) -\lambda \mathbf{q}_{i} \right) \]
\[b_u\leftarrow b_u +\eta \left( e_{ui}-\lambda b_u \right) \]
\[b_i\leftarrow b_i +\eta \left( e_{ui}-\lambda b_i \right) \]
\[\mathbf{y}_j \leftarrow \mathbf{y}_j +\eta \left( e_{ui} \left | I_u \right |^{-\frac{1}{2}}\mathbf{q}_{i} -\lambda \mathbf{y}_{j} \right) \]
核心代码:
def update(p,q,bu,bi,Y,aveg_rating,r,Ru,learning_rate=0.001,lamda_regularizer=0.1):
Iu = np.sum(Ru>0)
y_sum = np.sum(Y[np.where(Ru>0)],axis=0)
error = r - (aveg_rating + bu + bi + np.dot(p+Iu**(-0.5)*y_sum, q.T))
p = p + learning_rate*(error*q - lamda_regularizer*p)
q = q + learning_rate*(error*(p + Iu**(-0.5)*y_sum) - lamda_regularizer*q)
bu = bu + learning_rate*(error - lamda_regularizer*bu)
bi = bi + learning_rate*(error - lamda_regularizer*bi)
for j in np.where(Ru>0):
Y[j] = Y[j] + learning_rate*(error*Iu**(-0.5)*q - lamda_regularizer*Y[j])
return p,q,bu,bi,Y
实验结果:
数据集:Movielens100K,随机分割成训练集:测试集=8:2
MAE | RMSE |
0.7162 | 0.9109 |
3). timeSVD
来源出处:
- Koren et al. Collaborative filtering with temporal dynamics. Communications of the ACM 53.4 (2010): 89-97.
目标函数:
\[\min \limits_ {} \frac{1}{2}\sum_{\left ( u,i \right )\in \mathbf{O}} {\left \| r_{u,i}-\widehat{r}_{u,i} \right \|^2} +\frac{1}{2}\lambda \left ( \left \| \mathbf{p}_{u} \right \|^2 + \left \| \mathbf{q}_{i} \right \|^2 + \left \| b_{u} \right \|^2 + \left \| b_{i} \right \|^2\right ) \]
\[\widehat{r}_{u,i}=\mu + b_u\left ( t\right) + b_i\left ( t\right) + \mathbf{p}_u\left ( t\right) \mathbf{q}_i^T \]
其中,\(t\)
说明介绍:
文中假设:用户的兴趣是随时间变化的,即 \(\mathbf{p}_u\) 与时间 \(t\) 相关。而 \(\mathbf{q}_i\) 为商品的固有特征,与时间因素无关。比如,大部分用户夏天买短袖、短裤,冬天买长袖、羽绒服,时间效应明显。\(\mathbf{q}_i\) 反映的是商品属性:你评价或者不评价,我都在这里,不增不减。同时,假设用户和商品的评分偏置也随时间 \(t\)
4. 模型对比
在相同学习率 \(\eta\)、相同正则项系数 \(\lambda\)、相同特征维度 \(K\)、相同迭代次数的情况下,
即 learning_rate = 0.005,lamda_regularizer = 0.1,K = 10,max_iteration = 100
MAE (比前一个算法提升 %) | RMSE (比前一个算法提升 %) | |
MF, SVD, Funk-SVD, PMF | 0.7279 (-) | 0.9297 (-) |
BiasSVD | 0.7203 (+1.0%) | 0.9154 (+0.7%) |
SVD++ | 0.7162 (+0.5%) | 0.9109 (+0.5%) |
从上到下,算法刚开始提升效果非常明显,到后来提升效果越来越小。当然,如果再调整参数,结果肯定还会有所提升。
5. 拓展
1) 与主题模型结合
来源出处:
- Wang, Chong, and David M. Blei. "Collaborative topic modeling for recommending scientific articles." Proceedings of the 17th ACM SIGKDD international conference on Knowledge discovery and data mining. 2011.
示意图:
大的框架为 LDA 主题模型,小的框架为 PMF 模型。
目标函数:
\[\min \limits_ {\mathbf{U},\mathbf{V}} \frac{1}{2}\sum_{\left ( i,j \right )\in \mathbf{O}}c_{i,j} {\left \| r_{u,i}-u_{i} v^T_{j} \right \|^2} +\frac{1}{2}\lambda_u \sum_{i} \left \| u_{i} \right \|^2 + \frac{1}{2}\lambda_v \sum_{j}\left \| v_{j}- \theta_j \right \|^2 -\sum_{j}\sum_{h}log \left(\sum_{k} \theta_{i,k}\beta_{k,w_{j,h}} \right) \]
其中,\(\theta_j\) 表示商品 \(j\) 文本信息的主题分布,\(\beta_{k,w_{j,h}}\) 表示文中 \(j\) 中主题 \(k\) 下词语 \(h\)
简单说明:
有些领域它们除了有交互信息外,文本内容比较丰富,比如新闻,学术论文。用主题模型获取文本信息,弥补交互信息不足时的情况。当交互信息丰富时,PMF 依旧其主要作用。
2) 与社交网络结合
来源出处:
- Purushotham, Sanjay, Yan Liu, and C-C. Jay Kuo. "Collaborative topic regression with social matrix factorization for recommendation systems." arXiv preprint arXiv:1206.4684 (2012).
示意图:
红色的框架为上一个模型,蓝色图为添加的社交信息框架。
目标函数:
\[\min \limits_ {\mathbf{U},\mathbf{V}} \frac{1}{2}\sum_{\left ( i,j \right )\in \mathbf{O}}c_{i,j} {\left \| r_{u,i}-u_{i} v^T_{j} \right \|^2} +\frac{1}{2}\lambda_u \sum_{i} \left \| u_{i} \right \|^2 + \frac{1}{2}\lambda_v \sum_{j}\left \| v_{j}- \theta_j \right \|^2 -\sum_{j}\sum_{h}log \left(\sum_{k} \theta_{i,k}\beta_{k,w_{j,h}} \right) \]
\[+\frac{1}{2}\lambda_g \sum_{i,f}\left \| g_{i,f}- u_{i}s_f^T \right \|^2 +\frac{1}{2}\lambda_s \sum_{k} \left \| s_{k} \right \|^2 \]
其中,\(s_{k}\)
简单说明:
上一个模型上“丰富”了商品的特征向量,这个模型采用用户的社交信息来“丰富”用户的特征矩阵。
3) 与神经网络(CNN)结合
来源出处:
- Kim, Donghyun, et al. "Convolutional matrix factorization for document context-aware recommendation." Proceedings of the 10th ACM Conference on Recommender Systems. 2016.
示意图:
左侧为 PMF 模型,右侧为 CNN 构建。
目标函数:
\[\min \limits_ {\mathbf{U},\mathbf{V}} \frac{1}{2}\sum_{\left ( i,j \right )\in \mathbf{O}} {\left \| r_{u,i}-u_i v^T_{j} \right \|^2} +\frac{1}{2}\lambda_u \sum_{i} \left \| u_{i} \right \|^2 + \frac{1}{2}\lambda_v \sum_{j}\left \| v_{j}-cnn\left( W,X_j\right) \right \|^2 +\frac{1}{2}\lambda_k \sum_{k} \left \| w_{k} \right \|^2 \]
其中,\(X_i\) 为商品 \(i\) 的文本评论,\(W\)
简单说明:
自从深度学习火了之后,很快就将深度学习的各种模型带入原来的 PMF 构架,来弥补 PMF 本身存在的不足。这里是是用 CNN 得到评论特征,丰富原来来自评分矩阵的特征向量。
声明
本博客所有内容仅供学习,不为商用,如有侵权,请联系博主谢谢。
参考文献
[1] Koren et al. Matrix factorization techniques for recommender systems.Computer 42.8 (2009).
[2] Koren Y. Factor in the neighbors: Scalable and accurate collaborative filtering[J]. ACM Transactions on Knowledge Discovery from Data (TKDD), 2010, 4(1).
[3] Koren et al. Collaborative filtering with temporal dynamics. Communications of the ACM 53.4 (2010): 89-97.
[4] Wang, Chong, and David M. Blei. "Collaborative topic modeling for recommending scientific articles." Proceedings of the 17th ACM SIGKDD international conference on Knowledge discovery and data mining. 2011.
[5] Purushotham, Sanjay, Yan Liu, and C-C. Jay Kuo. "Collaborative topic regression with social matrix factorization for recommendation systems." arXiv preprint arXiv:1206.4684 (2012).
[6] Kim, Donghyun, et al. "Convolutional matrix factorization for document context-aware recommendation." Proceedings of the 10th ACM Conference on Recommender Systems. 2016.