文章目录
在实现NMF(Non-negative Matrix Factorization)之前,先看普通的MF是怎么进行的,从而可以直观地理解为什么一定要非负矩阵分解。
1. 矩阵分解(Matrix Factorization):
1.1 公式推导
该方法由Albert Au Yeung 提供: 原文链接
首先矩阵分解的目的在于将大小为N x M的矩阵R分解成一个大小为N x K的矩阵P以及K x M的矩阵Q,使得:
R ≈ P Q T = R ^ R \approx PQ^T=\hat{R} R≈PQT=R^
原文中R是一个推荐系统中关于user用户和物品item的关系的矩阵,所以P的每一行都表示user和特征的相关度(Strength of Association),而Q的每一行(或 Q T Q^T QT的每一列)就表示item和特征的相关度。
这里不用理解他们表示的含义,只需要知道 R ^ \hat{R} R^中每个元素 r ^ i j = p i T . q j = Σ K = 1 K p i k q k j \hat{r}_{ij}=p_i^T.q_j=\Sigma_{K=1}^Kp_{ik}q_{kj} r^ij=piT.qj=ΣK=1Kpikqkj
那么预测值和真实值之间的error就等于:
e i j = r i j − r ^ i j = r i j − Σ K = 1 K p i k q k j e_{ij}=r_{ij}-\hat{r}_{ij} = r_{ij}-\Sigma_{K=1}^Kp_{ik}q_{kj} eij=rij−r^ij=rij−ΣK=1Kpikqkj
对 e i j 2 e_{ij}^2 eij2关于 p i k p_{ik} pik求导/梯度就等于:
∂ ∂ p i k e i j 2 = 2 e i j e i j ′ = 2 e i j . ( − q k j ) = − 2 e i j q k j \frac{\partial}{\partial p_{ik}}e_{ij}^2 = 2e_{ij}e_{ij}'=2e_{ij}.(-q_{kj})=-2e_{ij}q_{kj} ∂pik∂eij2=2eijeij′=2eij.(−qkj)=−2eijqkj
同理关于 q k j q_{kj} qkj求导/梯度就等于:
∂ ∂ q k j e i j 2 = − 2 e i j p i k \frac{\partial}{\partial q_{kj}}e_{ij}^2=-2e_{ij}p_{ik} ∂qkj∂eij2=−2eijpik
根据梯度更新 p ′ = p − l e a r n i n g r a t e ∗ g r a d i e n t p' = p-learningrate*gradient p

本文介绍矩阵分解(MF)与非负矩阵分解(NMF)的基本原理及实现过程,包括公式推导、代码实现,并通过图像数据展示两种方法的效果。
最低0.47元/天 解锁文章
1293





