# 小孩都看得懂的 SVD 2

0

A = U∑VT

1

1. A 不一定是方阵（以上图举例， A 是 4×6，U 是 4×4， 是 4×6，VT 是 6×6，U∑VT 是 4×6）
2. 中对角线上的值是从大到小排列的 σ1 ≥ σ2 ≥ σ3 ≥ σ4

• 的对角线上第 i 个元素
• U 的第 i 列
• VT 的第 i 行

```import numpy as np
from numpy.linalg import svd
import matplotlib as mpl
import matplotlib.pyplot as plt```

2

1. 在图片像素矩阵上做 SVD
2. 可视化出所有 σiuivi 的图
3. 可视化出所有 σiuivi 的重叠图（比如第一张是 σ1u1v1，第二张是 σ1u1v1 + σ2u2v2 ...）

```D = np.array([[0,1,1,0,1,1,0],
[1,1,1,1,1,1,1],
[1,1,1,1,1,1,1],
[0,1,1,1,1,1,0],
[0,0,1,1,1,0,0],
[0,0,0,1,0,0,0],
])
U,S,V = plot_svd(D)```

```print(np.round(U,2))
print()
sigma = np.diag(S)
print(np.round(sigma,2))
print()
print(np.round(V,2))```
```[[-0.36 -0.   -0.73 -0.05  0.56  0.13]
[-0.54  0.35  0.27 -0.08 -0.16  0.69]
[-0.54  0.35  0.27 -0.08  0.16 -0.69]
[-0.45 -0.35 -0.27  0.52 -0.56 -0.13]
[-0.28 -0.71  0.18 -0.62 -0.   -0.  ]
[-0.08 -0.35  0.46  0.57  0.56  0.13]]

[[4.74 0.   0.   0.   0.   0.  ]
[0.   1.41 0.   0.   0.   0.  ]
[0.   0.   1.41 0.   0.   0.  ]
[0.   0.   0.   0.73 0.   0.  ]
[0.   0.   0.   0.   0.   0.  ]
[0.   0.   0.   0.   0.   0.  ]]

[[-0.23 -0.4  -0.46 -0.4  -0.46 -0.4  -0.23]
[ 0.5   0.25 -0.25 -0.5  -0.25  0.25  0.5 ]
[ 0.39 -0.32 -0.19  0.65 -0.19 -0.32  0.39]
[-0.22  0.42 -0.44  0.42 -0.44  0.42 -0.22]
[ 0.56 -0.43  0.03  0.   -0.03  0.43 -0.56]
[-0.42 -0.55 -0.16  0.    0.16  0.55  0.42]
[-0.12 -0.11  0.69 -0.   -0.69  0.11  0.12]]```

```D = np.array([[0,0,0,0,0,0,0,0,0],
[0,0,1,1,0,1,1,0,0],
[0,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,0],
[0,0,1,1,1,1,1,0,0],
[0,0,0,1,1,1,0,0,0],
[0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,0,0,0,0]
])
U,S,V = plot_svd(D)```

```D = np.array([[0,0,1,1,0,0],
[0,1,1,1,1,0],
[1,1,1,1,1,1],
[1,1,1,1,1,1],
[0,1,1,1,1,0],
[0,0,1,1,0,0],
])
U,S,V = plot_svd(D)```

```import os
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False```

3

```file = os.getcwd() + '\\niannian.jpg'
X = np.mean(A, -1); # Convert RGB to grayscale

plt.rcParams['figure.figsize'] = [16, 8]
img = plt.imshow(X)
img.set_cmap('gray')
plt.axis('off')
plt.show()```

0 条评论

• ### 小孩都看得懂的 SVD

奇异值分解 (singular value decomposition, SVD) 就是一个“旋转-拉缩-旋转”的过程。

• ### 小孩都看得懂的 GMM

聚类 (clustering) 是无监督学习中的一种任务类型，将没有标准的数据“聚”在一起，“赋予”它们标签，其过程如下面两图所示。

• ### 小孩都看得懂的 p-value

本文是「小孩都看得懂」系列的第九篇，本系列的特点是极少公式，没有代码，只有图画，只有故事。内容不长，碎片时间完全可以看完，但我背后付出的心血却不少。喜欢就好！

• ### 小孩都看得懂的聚类

本文是「小孩都看得懂」系列的第四篇，本系列的特点是没有公式，没有代码，只有图画，只有故事。内容不长，碎片时间完全可以看完，但我背后付出的心血却不少。喜欢就好！

• ### 小孩都看得懂的假设检验

本文是「小孩都看得懂」系列的第十篇，本系列的特点是极少公式，没有代码，只有图画，只有故事。内容不长，碎片时间完全可以看完，但我背后付出的心血却不少。喜欢就好！

• ### 小孩都看得懂的推荐系统

我还是推荐系统小白，因此对此课题理解相当浅显，但一定很好懂。这才是学一样新东西的正确开始方式。

• ### 小孩都看得懂的主成分分析

本文是「小孩都看得懂」系列的第五篇，本系列的特点是极少公式，没有代码，只有图画，只有故事。内容不长，碎片时间完全可以看完，但我背后付出的心血却不少。喜欢就好！

• ### 小孩都看得懂的循环神经网络

神经网络其实就是一堆参数，我们用矩阵来表示这些参数好不好？具体公式见下图，大家来用矩阵乘以向量来验证一下上面两组联系。

• ### 小孩都看得懂的熵、交叉熵和 KL 散度

本文是「小孩都看得懂」系列的第八篇，本系列的特点是极少公式，没有代码，只有图画，只有故事。内容不长，碎片时间完全可以看完，但我背后付出的心血却不少。喜欢就好！

• ### 小孩都看得懂的多臂老虎机和汤姆森采样

多臂老虎机 (multi-armed bandit, MAB) 是赌场里的一种游戏。首先展示单臂老虎机。

• ### 机器学习集成算法：XGBoost思想

《实例》阐述算法，通俗易懂，助您对算法的理解达到一个新高度。包含但不限于：经典算法，机器学习，深度学习，LeetCode 题解，Kaggle 实战。期待您的到来...

• ### 新手小白都能看得懂的HTTPS加密算法！看完即懂！

说出来你可能不信，密钥这两个字的规范读音竟然是【mì yuè】，听起来像蜜月，哈哈。不过，在密码学的语境下，读作【 mì yào】的应该更多吧。扯远了，这集我们...

• ### 机器学习集成算法：XGBoost思想

《实例》阐述算法，通俗易懂，助您对算法的理解达到一个新高度。包含但不限于：经典算法，机器学习，深度学习，LeetCode 题解，Kaggle 实战。期待您的到来...

• ### 新手都能看得懂的 ES6 Iterators

本文旨在分析理解 Iterators。 Iterators 是 JS中的新方法，可以用来循环任意集合。 在ES6中登场的Iterators。因其可被广泛使用，并...

• ### 108个程序员的笑话，你都看得懂吗？

1、程序猿最烦两件事，第一件事是别人要他给自己的代码写文档，第二件呢？是别人的程序没有留下文档。 2、程序猿的读书历程：x语言入门—>x语言应用实践—>x语言高...

• ### 插画版Kubernetes指南（小孩子也能看懂的kubernetes教程）

编者按：Matt Butcher 是 Deis 的平台架构师，热爱哲学，咖啡和精雕细琢的代码。有一天女儿走进书房问他什么是 Kubernetes，于是就有了这本...

• ### 常见面试算法：PCA、简化数据

主成分分析(Principal Component Analysis, PCA)：通俗理解：就是找出一个最主要的特征，然后进行分析。

• ### 「漫画版」 小朋友都能看懂得 DevOops！不允许你有问号！

DevOps消除了障碍，并减轻了开发人员和运营人员之间的紧张关系。革命性的DevOops！