2022年12月4日 SVD学习笔记

​ SVD(Singular Value Decomposition)奇异值分解也是数据降维的一种方式,能够将一个矩阵用三个小矩阵进行分解,分解之后的矩阵比原矩阵存储空间需要的更少,但是信息损失其实不大。

视频地址很清楚

奇异值分解引入

将原始矩阵分解为两个方阵和一个对角矩阵

数据线性变换

  • 拉伸。左乘对角线矩阵相当于对原基坐标进行拉伸

  • 旋转。左乘R正交矩阵相当于旋转

将中间奇异值取前几个就能保留大部分信息,奇异值是从大到小的,越小信息量越小

如何求解SVD分解?
2022年12月4日 SVD学习笔记_第1张图片

上述过程可以通过这篇博客的SVD求解实例走一遍,奇异值分解用于压缩很形象的描述了SVD的作用

import numpy as np
from numpy import linalg as la

A = np.array([[1,5,7,6,1],[2,1,10,4,4],[3,6,7,5,2]])
U, S, VT = la.svd(A)
Sigma = np.zeros(np.shape(A))

Sigma[:len(S),:len(S)] = np.diag(S)  # 生成奇异值矩阵,该矩阵的对角元素为奇异值

print('左奇异值矩阵:\n', U)
print('奇异值:', S)
print('奇异值矩阵:\n', Sigma)
print('右奇异值矩阵的转置:\n', VT)
print('--------------------------------------')
# 利用SVD重构矩阵
B = U.dot(Sigma.dot(VT))
print('原矩阵A:\n', A)
print('重构后的矩阵B:\n', B)
print('原矩阵A与重构后的矩阵B是否相同', np.allclose(A,B))

利用SVD对图像进行压缩的代码

你可能感兴趣的:(机器学习,学习,python)