奇异值分解(Singular Value Decomposition,简称为SVD)是机器学习中非常基础的算法,主要用于数据降维,推荐系统以及自然语言处理等方面,本节内容先来介绍其数学原理。
特征值和特征向量
大学学过线性代数,貌似我对奇异值分解也没有什么印象。奇异值究竟是个什么鬼,我们还得先从特征值和特征向量说起。
其中是实对称矩阵,为维向量。实数 称为矩阵,而称为矩阵的特征值对应的特征向量。
求出特征值和特征向量有什么好处呢?我们就可以对矩阵进行分解了。假设矩阵有个特征值分别是,对应的特征向量为,记.
如果是正交矩阵,也就是说其逆矩阵与转置相等,那么矩阵分解可以写成下面这样:
前提是这个矩阵必须是方阵才能做这样的分解,如果这个矩阵不是方阵呢?那么这个时候就需要奇异值分解了。
奇异值分解
假设是一个阶矩阵,其中的元素全部属于实数域(不考虑复数域)。如此则存在一个分解使得
其中是阶酉矩阵;是阶非负实数对角矩阵;而,即的转置,是阶酉矩阵。这样的分解就称作的奇异值分解。 对角线上的元素即为M的奇异值。常见的做法是将奇异值由大而小排列。如此便能由M唯一确定了。(虽然U和V仍然不能确定)[1]
接下来就是计算这几个矩阵了。我们知道是一个阶矩阵,那么就是阶矩阵了
对 进行分解,得到的特征值 组成的特征向量.就得到了矩阵, 我们把这个矩阵每个向量记做矩阵的右奇异向量。
同样的操作我们分解这个矩阵
对 进行分解,得到的特征值 组成的特征向量.就得到了矩阵, 我们把这个矩阵每个向量记做矩阵的左奇异向量。
现在就差计算奇异值了,也就是这个对角矩阵。由于那么
将这些奇异值按照大小排列得到的对角矩阵即为
讨论
对于矩阵, 我们接下来讨论一下它的秩,对于这种分解称为紧奇异值分解;如果称为这种分解为截断奇异值分解,在应用中提到的奇异值分解通常都是截断奇异值分解[2]。
对于数据压缩来说,紧奇异值分解是一种无损压缩,而截断奇异值分解是一种有损压缩,顾名思义,截断其实就是舍弃了部分奇异值,也就损失了部分特征。
欢迎关注我的微信公众号“数学编程”
参考
-
李航.统计学习方法[M].第二版.北京:清华大学出版社,2019:271-277 ↩