矩阵分解(Matrix-Factorization)无门槛

本章内容

本章主要介绍矩阵分解常用的三种方法,分别为:
1 ◯ \textcircled{1} 1特征值分解
2 ◯ \textcircled{2} 2奇异值分解
3 ◯ \textcircled{3} 3Funk-SVD

矩阵分解原理: \textbf{\large 矩阵分解原理:} 矩阵分解原理:
在这里插入图片描述
  矩阵分解算法将 m × n m\times n m×n 维的矩阵 R R R分解为 m × k m \times k m×k的用户矩阵 P P P k × n k \times n k×n维的物品矩阵 Q Q Q相乘的形式。其中 m m m为用户的数量, n n n为物品的数量, k k k为隐向量(Latent Factor)的维度。 k k k的大小决定了隐向量表达能力的强弱,实际应用中,其取值要经过多次的实验来确定。在得到了 P P P用户矩阵和物品矩阵 Q Q Q后,将两个矩阵相乘,就可以得到一个满秩的矩阵。那么,我们就对未被评价过的物品,有了一个预测评分。接下来,可以将评分进行排序,推荐给用户。这就是矩阵分解对于推荐系统最基本的用途。
  矩阵分解的目的就是通过分解之后的两矩阵内积,来填补缺失的数据,用来做预测评分。矩阵分解的核心是将矩阵分解为两个低秩的矩阵的乘积,分别以 k k k维的隐因子向量表示,用户向量和物品向量的内积则是用户对物品的偏好度,即预测评分。值得注意的是 k k k的选取是通过实验和经验而来的,因此矩阵分解的可解释性不强。在这里插入图片描述
一、特征值分解 \textbf{\large 一、特征值分解} 一、特征值分解
   A A A n n n阶矩阵,若数 λ \lambda λ n n n维非0列向量 v ⃗ \vec{v} v 满足 A v ⃗ A \vec{v} Av = λ \lambda λ v ⃗ \vec{v} v ,那么数 λ \lambda λ称为 A A A的特征值, v ⃗ \vec{v} v 称为 A A A的对应于特征值 λ \lambda λ的特征向量。

  可以这样理解: λ \lambda λ为矩阵变换的大小, v ⃗ \vec{v} v 为矩阵变换的方向。但是特征值只能用于方阵,对推荐系统用户——物品的矩阵还不太适合。

  特征值分解,就是将矩阵 A A A分解为如下式:
A = Q Σ Q − 1 A = Q \Sigma Q^{-1} A=QΣQ1

   Q Q Q是矩阵 A A A的特征向量组成的矩阵,Σ则是一个对角阵,对角线上的元素就是特征值。我们来分析一下特征值分解的式子,分解得到的Σ矩阵是一个对角矩阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变换方向(从主要的变化到次要的变化排列)。

  我们通过特征值分解得到的前N个特征向量,就对应了这个矩阵最主要的N个变化方向。我们利用这前N个变化方向,就可以近似这个矩阵变换。也就是说:提取这个矩阵最重要的特征。
在这里插入图片描述
在这里插入图片描述
二、奇异值分解 \textbf{\large 二、奇异值分解} 二、奇异值分解
  假设一个矩阵 M M M是一个 m × n m \times n m×n的矩阵,则一定存在一个分解:
M = U Σ V T M = U\Sigma V^T M=UΣVT

  其中 U U U m × m m\times m m×m的正交矩阵, V V V n × n n\times n n×n的正交矩阵, Σ \Sigma Σ m × n m\times n m×n的对角矩阵。 Σ \Sigma Σ对角线上的元素就称为 M M M的奇异值。

例如:

假设矩阵 A A A如下:
在这里插入图片描述
  矩阵 A A A 6 × 4 6\times 4 6×4的用户评分矩阵,6个用户对4个物品一共有19个评分,0代表没评分。

使用SVD进行分解得到:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  分解后, U U U矩阵为 6 × 6 6\times6 6×6的正交矩阵, V V V 4 × 4 4\times4 4×4的正交矩阵。 S S S为对角矩阵即公式中的 Σ \Sigma Σ。选取 S S S中较大的 k k k个元素作为隐含特征。删除 S S S的其他维度以及 U U U V V V对应的维度,矩阵分解就完成了。

  我们可以使用最大的 k k k个值和对应大小的 U U U V V V 矩阵来近似描述原始的评分矩阵。这就是SVD做降维用法的核心思想。

  我们在这里选择 k k k=2,那么 S S S对角矩阵就降维成:
在这里插入图片描述
  同样, U U U矩阵变成了 6 × 2 6\times2 6×2维, V V V矩阵变成了 4 × 2 4\times2 4×2维,然后将处理过的USV三个矩阵相乘做内积,可以得到新的矩阵 A 2 A2 A2为:
在这里插入图片描述
  此时, A 2 A2 A2和A数据很接近,同时又补充了空白部分。

三、Basic   Matrix   Factorization(Funk-SVD) \textbf{\large 三、Basic Matrix Factorization(Funk-SVD)} 三、Basic Matrix Factorization(Funk-SVD)
  Funk-SVD的基本思想就是:既然评价指标是均方根误差(Root Mean Squared Error, RMSE),那么可以直接通过训练集中的观察值利用最小化RMSE学习用户特征矩阵P和物品特征矩阵Q。为方便表示,用U表示用户的集合,D表示物品的集合,R表示用户评分矩阵。通过这种方法用户和物品可以被映射到一个K维(K可以自己设置)的潜在特征空间。通过挖 掘用户的潜在特征矩阵P(|U|xK维)和物品潜在特征矩阵Q(|D|xK维)来估计评分。即通过下式来得到评分矩阵:
R ≈ P × Q T = R ^ R \approx P \times Q^T = \hat{R} RP×QT=R^

  因此利用上述公式,可以计算出用户i对物品j的估计评分 r i j ^ \hat{r_{ij}} rij^为:
r i j ^ = p i q j T = ∑ k = 1 K p i k q k j \hat{r_{ij}} = p_iq_j^T = \sum_{k=1}^K p_{ik} q_{kj} rij^=piqjT=k=1Kpikqkj

  其中 p i ∈ R K p_i\in R^K piRK表示用户i的K维潜在特征,表达用户的内部特性; q j ∈ R K q_j\in R^K qjRK表示物品j的K维潜在特征,表达物品的内部特性。

  对于每个用户评分 r i j r_{ij} rij,使用FunkSVD进行矩阵分解,对应的估计评分为 p i T q j p_i^Tq_j piTqj,采用均方差做损失函数为 e i j = ( r i j − p i q j T ) 2 e_{ij} =(r_{ij} -p_iq_j^T)^2 eij=(rijpiqjT)2,我们的期望就是使均方差误差尽可能的小,考虑到所有的用户和物品组合,我们的优化目标函数J(p,q)为:
m i n p ∗ , q ∗ ∑ i , j ∈ M ( r i j − p i q j T ) 2 \mathop{min}_{p^*,q^*} \sum_{i,j\in M} (r_{ij} -p_i q_j^T)^2 minp,qi,jM(rijpiqjT)2

为防止过拟合(过拟合是指模型在训练集上误差很小,但是在测试集上表现很差(即泛化能力 [generalization ability] 差),),加入正则化项(类似惩罚函数,利用先验知识进行约束),损失函数即为:

L o s s = a r g m i n ∑ i , j ( r i j − p i q j T ) 2 + ( ∣ ∣ p i ∣ ∣ + ∣ ∣ q j ∣ ∣ ) 2 Loss = argmin \sum_{i,j}(r_{ij} -p_i q_j^T)^2 + (||p_i||+||q_j||)^2 Loss=argmini,j(rijpiqjT)2+(∣∣pi∣∣+∣∣qj∣∣)2

然后使用梯度下降算法来拟合原矩阵。

  • 9
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值