矩阵分解概述
1 为什么要学习矩阵分解2 矩阵低秩结构的意义3 矩阵分解与矩阵填充的区别3.1 矩阵分解与矩阵填充的定义3.2 矩阵分解与矩阵填充的差别3.3 推荐系统举例
4 经典的矩阵分解方法4.1 特征值分解4.2 SVD分解(奇异值分解)4.3 MF模型(matrix factorization model)
5 参考文献
声明:本文中的图为了方便均从别的博客中截取,相关博客已在参考文献中列出。
1 为什么要学习矩阵分解
2 矩阵低秩结构的意义
简单来讲矩阵结构的低秩性,表示矩阵包含信息的冗余度,矩阵包含信息的冗余度越大,矩阵的秩越低。 从物理意义上讲,矩阵的秩能够度量矩阵的行列之间的相关性。如果矩阵的各行或列是线性无关的,矩阵就是满秩的,也就是秩等于行数。回到上面线性方程组来说吧,因为线性方程组可以用矩阵描述嘛。秩就表示了有多少个有用的方程了。上面的方程组有3个方程,实际上只有2个是有用的,一个是多余的,所以对应的矩阵的秩就是2了。 既然秩可以度量相关性,而矩阵的相关性实际上有带有了矩阵的结构信息。如果矩阵之间各行的相关性很强,那么就表示这个矩阵实际可以投影到更低维的线性子空间,也就是用几个向量就可以完全表达了,它就是低秩的。所以我们总结的一点就是:如果矩阵表达的是结构性信息,例如图像、用户-推荐表等等,那么这个矩阵各行之间存在这一定的相关性,那这个矩阵一般就是低秩的。 稍微数学化的表达:如果
X
X
X 是一个
m
m
m 行
n
n
n 列的数值矩阵,
r
a
n
k
(
X
)
rank(X)
rank(X) 是
X
X
X 的秩,假如
r
a
n
k
(
X
)
rank (X)
rank(X) 远小于
m
m
m 和
n
n
n,则我们称
X
X
X是低秩矩阵。低秩矩阵每行或每列都可以用其他的行或列线性表出,可见它包含大量的冗余信息。利用这种冗余信息,可以对缺失数据进行恢复,也可以对数据进行特征提取。 举个例子: 可以理解为,草原是由很多草组成的,而草是相似的,所以如果全是草,那么这张图所包含的信息量是很少的的,因为可以理解为草是草的复制品。而上图的蒙古包,人,马之类的则可以理解为图片所包含的信息,实际上,相对于只有草的草原图片和有草和蒙古包的草原图片,后者的秩是较高的。也就是说,图片中比较突兀的成分,比如蒙古包,比如人像照片中的红眼亮点,会增加图像矩阵的秩。而现实生活中一张不错的图片的秩其实是比较低的,如果图像的秩比较高,往往是因为图像中的噪声比较严重。比如拍照的时候ISO感光度设置过高造成噪点太过泛滥之类的。所以,额,图像处理的低秩性其实可以拿来去除照片中的噪点,电影中的雨丝也可以通过低秩表达的方式来去除。
更为详细的解释可以参考文献[4][5][7]
3 矩阵分解与矩阵填充的区别
3.1 矩阵分解与矩阵填充的定义
已知一个部分可观察的矩阵
M
M
M。
矩阵补全(Matrix Completion)目的是为了估计矩阵中缺失的部分(不可观察的部分),可以看做是用矩阵
X
X
X近似矩阵
M
M
M,然后用
X
X
X中的元素作为矩阵
M
M
M中不可观察部分的元素的估计。矩阵分解(Matrix Factorization)是指用
A
×
B
A \times B
A×B 来近似矩阵
M
M
M,那么
A
×
B
A \times B
A×B 的元素就可以用于估计
M
M
M中对应不可见位置的元素值,而
A
×
B
A \times B
A×B可以看做是
M
M
M的分解,所以称作Matrix Factorization。
3.2 矩阵分解与矩阵填充的差别
显然,通过以上描述可知,矩阵分解可以用于矩阵补全任务。此外,做矩阵分解也可以用于分解一个完全观察的矩阵,比如通过分解来对一个完全观察的矩阵做有损压缩和低维表示等等。而且,矩阵补全也并不总是采用分解的方法。
总的来讲,矩阵填充是一个任务,矩阵分解是一类操作。
3.3 推荐系统举例
如在推荐系统中,有评分矩阵
M
M
M,其中的每个元素
(
i
,
j
)
(i, j)
(i,j) 可存在可缺失,代表用户
i
i
i 对商品
j
j
j 的评分,那么当我们基于协同过滤来推荐时,这个推荐问题可以较好地归约到矩阵填充这个任务上来。这是因为协同过滤本质上是考虑大量用户的偏好信息(协同),来对某一用户的偏好做出预测(过滤),那么当我们把这样的偏好用评分矩阵M表达后,这即等价于用M其他行的已知值(每一行包含一个用户对所有商品的已知评分),来估计并填充某一行的缺失值。若要对所有用户进行预测,便是填充整个矩阵,这是所谓“协同过滤本质是矩阵填充”。 那么,这里的矩阵填充如何来做呢?矩阵分解是一种主流方法。这是因为,协同过滤有一个隐含的重要假设,可简单表述为:如果用户
A
A
A 和用户
B
B
B 同时偏好商品
X
X
X ,那么用户
A
A
A 和用户
B
B
B 对其他商品的偏好性有更大的几率相似。这个假设反映在矩阵
M
M
M上即是矩阵的低秩。极端情况之一是若所有用户对不同商品的偏好保持一致,那么填充完的
M
M
M每行应两两相等,即秩为1。所以这时我们可以对矩阵
M
M
M进行低秩矩阵分解,用
U
×
V
U \times V
U×V来逼近
M
M
M,以用于填充——对于用户数为
m
m
m,商品数为
n
n
n的情况,
M
M
M 是
m
×
n
m \times n
m×n 的矩阵,
U
U
U 是
m
×
r
m \times r
m×r,
V
V
V是
r
×
n
r \times n
r×n,其中
r
r
r 是人工指定的参数。这里利用
M
M
M 的低秩性,以秩为
r
r
r 的矩阵
M
′
=
U
×
V
M'=U \times V
M′=U×V来近似
M
M
M,用
M
′
M'
M′ 上的元素值来填充
M
M
M 上的缺失值,达到预测效果。 之所以说矩阵分解是一类operation,是因为上述的低秩矩阵分解只是矩阵分解的一种,为人熟知的矩阵分解还有LU-矩阵分解,QR-矩阵分解,特征值分解等等。之所以在协同过滤中经常把重点放在矩阵分解上,是因为在如今推荐系统问题的庞大数据规模下,矩阵分解这样的方法表现出了优秀的性能,是亮点。
4 经典的矩阵分解方法
4.1 特征值分解
4.2 SVD分解(奇异值分解)
4.3 MF模型(matrix factorization model)
5 参考文献
[1]推荐系统使用到的矩阵分解SVD、SVD++、ALS、FM这些方法各有什么优缺点? [2]矩阵填充与矩阵分解的区别是什么? [3]矩阵低秩的意义? [4]机器学习中的范数规则化之(二)核范数与规则项参数选择 [5]矩阵低秩分解理论及其应用分析 [6]矩阵低秩的意义 [7]推荐系统之—如何理解低秩矩阵?