现在,我们要求 \( \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} = 15 + \sqrt{221} \approx 29.866 \), \( \lambda_{4} = 15 - \sqrt{221} \approx 0.134 \)。将特征值代入原方程,可解得对应的特征向量;这些特征向量即作为列向量,形成矩阵
$$\mathbf U = \begin{bmatrix}-0.82 & -0.58 & 0 & 0 \\ -0.58 & 0.82 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}.$$
同理可解得(注意,\( \mathbf M\mathbf M^{\mathsf T} \) 和 \( \mathbf M^{\mathsf T}\mathbf M \) 的特征值相同)
$$\mathbf V = \begin{bmatrix}-0.40 & -0.91 \\ -0.91 & 0.40\end{bmatrix}.$$
以及 \( \mathbf\Sigma \) 上的对角线元素由 \( \mathbf W \) 的特征值的算术平方根组成;因此有
$$\mathbf\Sigma = \begin{bmatrix}5.46 & 0 \\ 0 & 0.37 \\ 0 & 0 \\ 0 & 0\end{bmatrix}.$$
因此我们得到矩阵 \( \mathbf M \) 的 SVD 分解(数值上做了近似):
$$\begin{bmatrix}2 & 4 \\ 1 & 3 \\ 0 & 0 \\ 0 & 0\end{bmatrix} \approx \begin{bmatrix}-0.82 & -0.58 & 0 & 0 \\ -0.58 & 0.82 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{bmatrix}5.46 & 0 \\ 0 & 0.37 \\ 0 & 0 \\ 0 & 0\end{bmatrix}\begin{bmatrix}-0.40 & -0.91 \\ -0.91 & 0.40\end{bmatrix}$$
几何上的直观解释我们先来看一个例子。假设 \( \mathbf M \) 是一个 \( m\times n \) 的矩阵,而 \( \mathbf x \) 是线性空间 \( \mathbb K^n \) 中的向量,则 \( \mathbf y = \mathbf M\cdot\mathbf x \) 是线性空间 \( \mathbb K^m \) 中的向量。这样一来,矩阵 \( \mathbb A \) 就对应了一个从\( \mathbb K^n \) 到 \( \mathbb K^m \) 的变换\( T: \mathbb K^n \to \mathbb K^m \),具体来说既是 \( \mathbf x\mapsto \mathbf M\cdot\mathbf x \)。这也就是说,在线性代数中,任意矩阵都能看做是一种变换。这样一来,我们就统一了矩阵和变换。
SVD 场景隐性语义检索
信息检索-隐性语义检索(Lstent Semantic Indexing, LSI)或 隐形语义分析(Latent Semantic Analysis, LSA)
隐性语义索引:矩阵 = 文档 + 词语
最早的 SVD 应用之一,我们称利用 SVD 的方法为隐性语义索引(LSI)或隐性语义分析(LSA)。
推荐系统
利用 SVD 从数据中构建一个主题空间。
再在该空间下计算其相似度。(从高维-低维空间的转化,在低维空间来计算相似度,SVD 提升了推荐系统的效率。)
图像压缩
例如:32*32=1024 => 32*2+2*1+32*2=130(2*1表示去掉了除对角线的0), 几乎获得了10倍的压缩比。
SVD 工作原理 矩阵分解矩阵分解是将数据矩阵分解为多个独立部分的过程。
矩阵分解可以将原始矩阵表示成新的易于处理的形式,这种新形式是两个或多个矩阵的乘积。(类似代数中的因数分解)
举例:如何将12分解成两个数的乘积?(1,12)、(2,6)、(3,4)都是合理的答案。
SVD 是矩阵分解的一种类型,也是矩阵分解最常见的技术SVD 将原始的数据集矩阵 Data 分解成三个矩阵 U、∑、V
举例:如果原始矩阵 \(Data_{m*n} \) 是m行n列,
\(U_{m * k}\) 表示m行k列
\(∑_{k * k}\) 表示k行k列
\(V_{k * n}\) 表示k行n列。
$$ Data_{m×n} = U_{m×k} * ∑_{k×k} * V_{k×n} $$
具体的案例:
$$
\begin{vmatrix}
0 & -1.6 & 0.6 \\
0 & 1.2 & 0.8 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
\end{vmatrix} =
\begin{vmatrix}
0.8 & 0.6 & 0 & 0 \\
-0.6 & 0.8 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
\end{vmatrix} *
\begin{vmatrix}
2 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 0 \\
\end{vmatrix} *
\begin{vmatrix}
0 & 0 & 1 \\
-1 & 0 & 0 \\
0 & 1 & 0 \\
\end{vmatrix}
$$