举例说明奇异值分解能进行模型降阶
时间: 2023-11-16 22:51:33 浏览: 30
假设我们有一个 $m \times n$ 的矩阵 $A$,我们想要对其进行模型降阶,即将其转化为一个 $m \times k$ 的矩阵 $U$ 与一个 $k \times n$ 的矩阵 $V$ 的乘积形式,其中 $k$ 远小于 $n$。
我们可以使用奇异值分解来实现这一目的。假设 $A$ 的奇异值分解为 $A = U \Sigma V^T$,其中 $U$ 是 $m \times m$ 的正交矩阵,$V$ 是 $n \times n$ 的正交矩阵,$\Sigma$ 是一个 $m \times n$ 的对角矩阵,其对角线上的元素为 $A$ 的奇异值。
我们可以将 $\Sigma$ 的前 $k$ 行与前 $k$ 列取出来,得到一个 $k \times k$ 的对角矩阵 $\Sigma_k$。然后我们可以将 $U$ 的前 $k$ 列与 $V$ 的前 $k$ 行取出来,得到一个 $m \times k$ 的矩阵 $U_k$ 和一个 $k \times n$ 的矩阵 $V_k$。于是我们可以将原始矩阵 $A$ 近似表示为 $A \approx U_k \Sigma_k V_k^T$。
这样,我们就将原始矩阵 $A$ 转化为了一个 $m \times k$ 的矩阵 $U_k$ 和一个 $k \times n$ 的矩阵 $V_k$ 的乘积形式,实现了模型降阶。而且,由于只选择了前 $k$ 个奇异值,因此我们可以将原始矩阵中的噪声信息去除,保留了其主要的结构信息,从而提高了模型的泛化能力。
相关问题
举例说明奇异值分解进行模型降阶过程
假设有一个 $m$ 行 $n$ 列的矩阵 $A$,我们想将其降为 $k$ 阶模型,可以使用奇异值分解进行降阶。具体过程如下:
1. 对矩阵 $A$ 进行奇异值分解,得到 $A=U\Sigma V^T$,其中 $U$ 是 $m$ 行 $m$ 列的正交矩阵,$\Sigma$ 是一个 $m$ 行 $n$ 列的对角矩阵,对角线上的元素为 $A$ 的奇异值,$V$ 是 $n$ 行 $n$ 列的正交矩阵。
2. 取 $\Sigma$ 的前 $k$ 行 $k$ 列形成一个 $k$ 阶对角矩阵 $\Sigma_k$,将 $U$ 的前 $m$ 行取出来组成一个 $m$ 行 $k$ 列的矩阵 $U_k$,将 $V$ 的前 $n$ 行取出来组成一个 $n$ 行 $k$ 列的矩阵 $V_k$。
3. 利用 $U_k$、$\Sigma_k$ 和 $V_k$ 重构一个新的矩阵 $A_k=U_k\Sigma_k V_k^T$,即为需要的 $k$ 阶模型。
例如,对于一个 $3$ 行 $3$ 列的矩阵 $A$,奇异值分解后得到:
$$
A=U\Sigma V^T=
\begin{bmatrix}
-0.577 & 0.816 & 0 \\
-0.577 & -0.408 & -0.707 \\
-0.577 & -0.408 & 0.707
\end{bmatrix}
\begin{bmatrix}
3.464 & 0 & 0 \\
0 & 1.732 & 0 \\
0 & 0 & 0
\end{bmatrix}
\begin{bmatrix}
-0.707 & -0.408 & 0.577 \\
0.707 & -0.408 & 0.577 \\
0 & 0.816 & 0.577
\end{bmatrix}
$$
假设我们想将其降为 $2$ 阶模型,那么我们取 $\Sigma$ 的前 $2$ 行 $2$ 列,得到:
$$
\Sigma_2=
\begin{bmatrix}
3.464 & 0 \\
0 & 1.732
\end{bmatrix}
$$
然后取 $U$ 的前 $3$ 行、$V$ 的前 $3$ 行,分别组成 $U_2$ 和 $V_2$:
$$
U_2=
\begin{bmatrix}
-0.577 & 0.816 \\
-0.577 & -0.408 \\
-0.577 & -0.408
\end{bmatrix},
\quad
V_2=
\begin{bmatrix}
-0.707 & -0.408 \\
0.707 & -0.408 \\
0 & 0.816
\end{bmatrix}
$$
最后利用 $U_2$、$\Sigma_2$ 和 $V_2$ 重构一个新的 $2$ 阶矩阵 $A_2=U_2\Sigma_2 V_2^T$:
$$
A_2=
\begin{bmatrix}
-2.000 & 2.000 & 0 \\
-1.000 & -1.000 & -1.000 \\
-1.000 & -1.000 & 1.000
\end{bmatrix}
$$
这样就将 $A$ 降为了 $2$ 阶模型 $A_2$。
举例说明奇异值分解进行模型降阶过程python
假设我们有一个 $m \times n$ 的矩阵 $A$,我们想要使用奇异值分解(SVD)将其降为一个 $k \times k$ 的矩阵 $A_k$,其中 $k$ 是一个远小于 $m$ 和 $n$ 的数。
首先,我们需要导入 `numpy` 库:
```python
import numpy as np
```
然后,我们可以使用 `numpy` 的 `linalg` 模块中的 `svd` 函数进行 SVD:
```python
U, s, Vh = np.linalg.svd(A)
```
其中,`U` 是一个 $m \times m$ 的矩阵,其列向量是 $A A^T$ 的特征向量;`s` 是一个长度为 $\min(m, n)$ 的向量,其元素是 $A$ 的奇异值;`Vh` 是一个 $n \times n$ 的矩阵,其行向量是 $A^T A$ 的特征向量。
根据 SVD 的定义,我们可以将 $A$ 分解为:
$$A = U \Sigma V^T$$
其中,$\Sigma$ 是一个 $\min(m, n) \times \min(m, n)$ 的对角矩阵,其对角线元素为 $s$。
如果我们想要将 $A$ 降为一个 $k \times k$ 的矩阵 $A_k$,我们只需要取 $\Sigma$ 的前 $k$ 个对角线元素,然后用它们构造一个 $k \times k$ 的对角矩阵 $\Sigma_k$。然后,我们可以使用以下公式计算 $A_k$:
$$A_k = U_k \Sigma_k V_k^T$$
其中,$U_k$ 是 $U$ 的前 $k$ 列,$V_k$ 是 $V$ 的前 $k$ 行。
以下是完整的 Python 代码示例:
```python
import numpy as np
# 生成一个 5x3 的随机矩阵
A = np.random.rand(5, 3)
# 进行 SVD
U, s, Vh = np.linalg.svd(A)
# 取前两个奇异值构造对角矩阵
Sigma_k = np.diag(s[:2])
# 计算降维后的矩阵
U_k = U[:, :2]
V_k = Vh[:2, :]
A_k = U_k.dot(Sigma_k).dot(V_k)
print(A)
print(A_k)
```
输出结果如下:
```
[[0.91320328 0.85185859 0.60022757]
[0.16217748 0.00945638 0.54669474]
[0.78844305 0.01853643 0.44691506]
[0.67551792 0.4504225 0.72290313]
[0.09124913 0.16657916 0.94440692]]
[[0.91601361 0.85755479 0.60410393]
[0.16138654 0.00949633 0.54419395]
[0.78314035 0.01837827 0.43853793]
[0.67501825 0.44842393 0.72291959]
[0.0907566 0.16653133 0.94004164]]
```
我们可以看到,原矩阵 $A$ 经过 SVD 分解后被降为了一个 $2 \times 2$ 的矩阵 $A_k$。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)