tf 如何进行svd_一步步教你轻松学奇异值分解SVD降维算法

摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分解,在生物信息学、信号处理、金融学、统计学等领域有重要应用,SVD都是提取信息的强度工具。在机器学习领域,很多应用与奇异值都有关系,比如推荐系统、数据压缩(以图像压缩为代表)、搜索引擎语义层次检索的LSI等等。(本文原创,转载必须注明出处.)

目录

奇异值分解原理

什么是奇异值分解(SVD)

奇异值分解

假设M是一个m×n阶矩阵,其中的元素全部属于域K,也就是实数域或复数域。如此则存在一个分解使得

$$ M_{m×n}=U_{m×m} \Sigma_{m×n} V^T_{n×n} $$

其中U是m×m阶酉矩阵;Σ是m×n阶非负实数对角矩阵;而\(V^T\),即V的共轭转置,是n×n阶酉矩阵。这样的分解就称作M的奇异值分解。Σ对角线上的元素\(Σ_i\),i即为M的奇异值。常见的做法是将奇异值由大而小排列。如此Σ便能由M唯一确定了。(虽然U和V仍然不能确定。)

V的列组成一套对\(M\)的正交"输入"或"分析"的基向量。这些向量是\(M^*M\)的特征向量。

U的列组成一套对\(M\)的正交"输出"的基向量。这些向量是\(MM^*\)的特征向量。

Σ对角线上的元素是奇异值,可视为是在输入与输出间进行的标量的"膨胀控制"。这些是\( MM^* \)及 \( M^* M \)的特征值的非负平方根,并与U和V的行向量相对应。

SVD 的计算方法

SVD 与特征值

现在,假设矩阵 \( \mathbf M_{m\times n} \) 的 SVD 分解是 \( \mathbf M = \mathbf U\mathbf\Sigma\mathbf V^{\mathsf H}; \)那么,我们有

$$

\begin{aligned}

\mathbf M\mathbf M^{\mathsf H} &{}= \mathbf U\mathbf\Sigma\mathbf V^{\mathsf H}\mathbf V\mathbf\Sigma^{\mathsf H}\mathbf U^{\mathsf H} = \mathbf U(\mathbf\Sigma\mathbf\Sigma^{\mathsf H})\mathbf U^{\mathsf H} \\

\mathbf M^{\mathsf H}\mathbf M &{}= \mathbf V\mathbf\Sigma^{\mathsf H}\mathbf U^{\mathsf H}\mathbf U\mathbf\Sigma\mathbf V^{\mathsf H} = \mathbf V(\mathbf\Sigma^{\mathsf H}\mathbf\Sigma)\mathbf V^{\mathsf H}\

\end{aligned}

$$

这也就是说,\( \mathbf U \) 的列向量(左奇异向量),是\( \mathbf M\mathbf M^{\mathsf H} \) 的特征向量;同时,\( \mathbf V \) 的列向量(右奇异向量),是 \( \mathbf M^{\mathsf H}\mathbf M \) 的特征向量;另一方面,\( \mathbf M \) 的奇异值(\( \mathbf\Sigma \) 的非零对角元素)则是 \( \mathbf M\mathbf M^{\mathsf H} \) 或者 \( \mathbf M^{\mathsf H}\mathbf M \) 的非零特征值的平方根。

如何计算 SVD

有了这些知识,我们就能手工计算出任意矩阵的 SVD 分解了;具体来说,算法如下

计算 \( \mathbf M\mathbf M^{\mathsf H} \) 和 \( \mathbf M^{\mathsf H}\mathbf M \);

分别计算 \( \mathbf M\mathbf M^{\mathsf H} \) 和 \( \mathbf M^{\mathsf H}\mathbf M \) 的特征向量及其特征值;

\( \mathbf M\mathbf M^{\mathsf H} \) 的特征向量组成 \( \mathbf U \);而 \( \mathbf M^{\mathsf H}\mathbf M \) 的特征向量组成 \( \mathbf V \);

对 \( \mathbf M\mathbf M^{\mathsf H} \) 和 \( \mathbf M^{\mathsf H}\mathbf M \) 的非零特征值求平方根,对应上述特征向量的位置,填入 \( \mathbf\Sigma \) 的对角元。

实际计算看看

现在,我们来试着计算 \( \mathbf M = \begin{bmatrix}2 & 4 \\ 1 & 3 \\ 0 & 0 \\ 0 & 0\end{bmatrix} \) 的奇异值分解。计算奇异值分解,需要计算 \( \mathbf M \) 与其共轭转置的左右积;这里主要以 \( \mathbf M\mathbf M^{\mathsf H} \) 为例。

首先,我们需要计算 \( \mathbf M\mathbf M^{\mathsf H} \),

$$

\mathbf W = \mathbf M\mathbf M^{\mathsf H} = \begin{bmatrix}2 & 4 \\ 1 & 3 \ 0 & 0 \\ 0 & 0\end{bmatrix}\begin{bmatrix}2 & 1 & 0 & 0 \\ 4 & 3 & 0 & 0\end{bmatrix} = \begin{bmatrix}20 & 14 & 0 & 0 \\ 14 & 10 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0\end{bmatrix}.

$$

现在,我们要求 \( \mathbf W \) 的特征值与特征向量。根据定义\( \mathbf W\vec x = \lambda \vec x \);因此 \( (\mathbf W - \lambda\mathbf I)\vec x = \vec 0 \)。这也就是说

$$

\begin{bmatrix}

20 - \lambda & 14 & 0 & 0 \\

14 & 10 - \lambda & 0 & 0 \\

0 & 0 & -\lambda & 0 \\

0 & 0 & 0 & -\lambda

\end{bmatrix}\vec x = \vec 0.

$$

根据线性方程组的理论,若要该关于\( \vec x \) 的方程有非零解,则要求系数矩阵的行列式为 0;也就是

$$

\begin{vmatrix}

20 - \lambda & 14 & 0 & 0 \\

14 & 10 - \lambda & 0 & 0 \\

0 & 0 & -\lambda & 0 \\

0 & 0 & 0 & -\lambda

\end{vmatrix} =

\begin{vmatrix}

20 - \lambda & 14 \\

14 & 10 - \lambda \\

\end{vmatrix}\begin{vmatrix}

-\lambda & 0 \\

0 & -\lambda \\

\end{vmatrix}

= 0,

$$

这也就是 \( \bigl((20 - \lambda)(10 - \lambda) - 196\bigr)\lambda^2 = 0\);解得 \(\lambda_1 = \lambda_2 = 0 \), \( \lambda_{3}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值