奇异值分解(SVD)

奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石.

1.SVD的定义及相关概念

SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为:
假设有 m×n的矩阵 A,那么 SVD 就是要找到如下式的这么一个分解,将 A 分解为 3 个矩阵的乘积:
在这里插入图片描述
其中UV都是正交矩阵, 在复数域内的话就是酉矩阵(Unitary Matrix),即
在这里插入图片描述
换句话说,就是说U的转置等于U的逆,V的转置等于V的逆:
在这里插入图片描述
而 Σ就是一个非负实对角矩阵。

那么 U和 V 以及Σ是如何构成的呢?

2.求解

U 和 V 的列分别叫做 A 的 左奇异向量(left-singular vectors)和 右奇异向量(right-singular vectors),Σ 的对角线上的值叫做 A 的奇异值(singular values)。

其实整个求解 SVD 的过程就是求解这 3 个矩阵的过程,而求解这 3 个矩阵的过程就是求解特征值和特征向量的过程,问题就在于求谁的特征值和特征向量。
U 的列由 A^T * A的单位化过的特征向量构成
V 的列由 A^T * A的单位化过的特征向量构成
Σ 的对角元素来源于 A^T * A或 A * A^T 的特征值的平方根,并且是按从大到小的顺序排列

知道了这些,那么求解 SVD 的步骤就显而易见了:
求 A * A^T的特征值和特征向量,用单位化的特征向量构成U
求 A * A^T的特征值和特征向量,用单位化的特征向量构成V
将 A * AT或者AT * A的特征值求平方根,然后构成 Σ

3.举例

假设
在这里插入图片描述
那么可以计算得到
在这里插入图片描述
接下来就是求这个矩阵的特征值和特征向量了
在这里插入图片描述
要想该方程组有非零解(即非零特征值),那么系数矩阵 A * A ^ T − λE的行列式必须为 0在这里插入图片描述
求解这个行列式我就不再赘述了,这个直接使用行列式展开定理就可以了,可以得到 λ1≈29.86606875,λ2≈0.13393125,λ3=λ4=0有 4 个特征值,因为特征多项式 ∣A*A^T−λE∣是一个 4 次多项式。对应的单位化过的特征向量为
在这里插入图片描述
这就是矩阵 U 了。

同样的过程求解 AT * A的特征值和特征向量,求得 λ1≈0.13393125,λ2≈29.86606875,将特征值降序排列后对应的单位化过的特征向量为
在这里插入图片描述
这就是矩阵 V 了。

而矩阵 Σ 根据上面说的为特征值的平方根构成的对角矩阵
在这里插入图片描述
到此,SVD 分解就结束了,原来的矩阵 A 就被分解成了 3 个矩阵的乘积。

在这里插入图片描述

Numpy 实现
Python 中可以使用 numpy 包的 linalg.svd() 来求解 SVD

import numpy as np

A = np.array([[2, 4], [1, 3], [0, 0], [0, 0]])
print(np.linalg.svd(A))

(array([[-0.81741556, -0.57604844,  0.        ,  0.        ],
        [-0.57604844,  0.81741556,  0.        ,  0.        ],
        [ 0.        ,  0.        ,  1.        ,  0.        ],
        [ 0.        ,  0.        ,  0.        ,  1.        ]]),
 array([ 5.4649857 ,  0.36596619]),
 array([[-0.40455358, -0.9145143 ],
        [-0.9145143 ,  0.40455358]]))

相关推导视频:
https://www.bilibili.com/video/BV1mx411E74T?p=5

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值