
最近,我开始研究推荐系统,尤其是协同过滤系统,其中使用了一种名为奇异值分解(SVD)的技术,将用户评分的输入矩阵分解为用户特征、特征-特征和item-特征矩阵三个矩阵。在应用之前,我想对背后的数学知识有一个直观的了解,因此开始了我为期一周的矩阵分解之旅。在学校时,我并不是那种数学大佬,所以我在很多 SVD 的教程中都迷失了方向,因为他们忽略了一些步骤,比如 计算行梯队形式、矩阵的 Null space 等,所以现在开始学习并深入研究 SVD 究竟是如何实现的,以及这三个矩阵是如何形成的,也就是给定的输入矩阵是如何分解成这三个矩阵的。在这个故事中,我将通过一个 SVD 的例子,用数学方法分解整个过程。
我们不满足计算矩阵的特征向量,而是矩阵转换单位正交基后依然是单位正交基。
根据 SVD 公式:
SVD 公式
-
A 是输入矩阵 -
U 是左奇异向量 -
是对角线矩阵(特征值) -
V 为右奇异向量
这三个矩阵的形状将是
-
A - 矩阵 -
U - 矩阵 -
- 矩阵 -
V - 矩阵
步骤 1
因此,第一步,我们需要找到矩阵 A 的特征值(观看下面提供的视频以了解特征值和特征向量),由于 A 可以是矩形矩阵,我们需要通过将 A 与它的转置相乘将其转换为正方形矩阵。在这里,为了便于计算,我将 A 假设 为 2 x 2 矩阵。
那么:
步骤 2
现在,我们有了一个正方形矩阵,可以计算 的特征值。我们可以通过计算 的行列式来计算,其中 lambda 是两个特征值。
解方程可得:
特征值:
步骤 3
计算出特征值后,就该计算每个特征值的两个特征向量了。因此,让我们先计算 10 的特征向量。
步骤 3.1
我们将 的值插入 矩阵:
为了找到特征向量,我们需要找到 AB = 0 的矩阵的 null 空间:
接下来,我们需要将矩阵还原成行梯形,以便轻松求解方程。让我们先来谈谈行梯形。
行梯形
如果矩阵满足以下规则,则称为行梯形矩阵。
-
矩阵每行的所有前导项均为 1 -
如果某列包含一个前导条目,则前导条目下面的所有条目都应为 0。 -
如果任意两行连续不为零,则上一行的前导项应出现在下一行前导项的左边。 -
所有只有零的行都应出现在矩阵的底部。
我们需要对行进行一些操作来缩小矩阵。这些操作称为基本行操作,这些操作需要遵循一定的规则,如下所示:
-
将矩阵中的一行与另一行互换。 -
将矩阵的一行乘以一个非零标量常数。 -
用矩阵的一行加常数乘以另一行,替换矩阵的一行。
有了上述规则,我们就可以开始将步骤 3.1 中的矩阵还原为行形式:
行1 + 行2
步骤 3.1 中提到的矩阵的行梯形
现在,我们可以如下求解 null 空间,以找到特征值 10 的特征向量:
得到这个向量后,我们需要将其转换为单位向量。转换的方法是将列值除以列值平方和的平方根。因此,在这种情况下,我们要这样做:
分母
因此,特征值的最终特征向量为:
转为 单位向量:
那么 特征值 10 对应 的特征值 为:
我们采取类似的步骤,得到特征值 40 的特征向量:
计算矩阵:
行梯队表格:
同理可得:特征值40 对应的特征向量为:
单位向量:
40 的特征向量
现在我们已经得到了两个特征向量,让我们把它们放在一起。
请注意, 中的对角线值总是按照降序排列的,因此向量也是按照相应的顺序排列的。如果你对 PCA 比较熟悉,那么主成分对应的是对角线顶端的 个元素,它们捕捉到的方差最大。值越高,说明该成分越重要,描述的方差越大。
步骤 4
现在我们有了 矩阵和 矩阵,现在是时候找到 了,我们只需将方程乘以两侧的 sigma(逆)和 V,即可得到 U 的方程。在这种情况下,由于 是正交矩阵, 的转置和逆转置是相同的,因此 转置 乘以 就成了单位矩阵,对角矩阵也是如此。
计算
接下来,我们需要用上述步骤将其转换为单位向量。
作为单位向量
接下来,我们将该矩阵与 相乘,因为它是对角矩阵,所以本身就是 。
现在,我们需要将其转换为单位向量,得到最终的 矩阵,好像多此一举。
这样,我们就计算出了 、 和 ,并将矩阵 分解为如下所示的三个矩阵。
SVD
结束语:
了解如何计算 SVD 以及理论上的理解有助于我更直观地了解其应用,如 PCA、协同过滤等。你也可以使用特征分解法来分解矩阵,但 SVD 相对于特征分解法的优势在于,SVD 甚至可以用于矩形矩阵。
注:如果有错误,请在下面的章节中评论,我将尽力纠正。这篇报道的目的是让大家了解计算方法,并让初学线性代数和 SVD 的人一站式了解所有不同的组成部分。
感谢您的阅读。

