Open Liam0205 opened 5 years ago
提个问。
SVD 分解得到的 U 矩阵特征向量乘以特征向量的转置等于对角阵。
如果 U 矩阵是 [M, N] 的(M个特征向量,N维),我们按照奇异值的重要度选取重要的特征向量,之后的特征向量就是 [M, K]。然后 [M, K] 的矩阵乘以自己的转置,得到 [M, M] 的矩阵
最后这个 [M, M] 的矩阵,为啥行和列的和近似为 1 呢?代码如下:
from PIL import Image
import numpy as np
img = Image.open("2.jpg").convert("L")
arr = np.array(img) / 255
U, S, Vh = np.linalg.svd(arr, full_matrices=False)
sval_total = (S**2).sum()
sval_ratio = (S**2)/sval_total
r = np.sum(np.cumsum(sval_ratio) < 0.95)
tmp = U[:, 0:r]
arr = np.dot(tmp, tmp.T)
print(np.sum(arr, 0))
print(np.sum(arr, 1))
https://liam.page/2017/11/22/SVD-for-Human-Beings/
看似高大上的人工智能、机器学习,实际上都脱不开数学的支持。在这些数学内容中,最重要的无疑是两个部分:代数和概率论。我无法在博客中完整地介绍代数(特别是矩阵论)和概率论,但是将其中部分有趣又重要的内容提出来讲解,还是可行的。 此篇,我们谈谈矩阵的 SVD 分解。