深度学习
基础知识和各种网络结构实战 ...
前言
奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,奇异值分解则是特征分解在任意矩阵上的推广。在信号处理、统计学等领域有重要应用。
一、SVD的定义
SVD用于对矩阵进行分解,与特征分解不同,SVD并不要求要分解的矩阵为方阵。 假如有一个矩阵A,对它进行奇异值分解,可以得到三个矩阵: A(m,n)=U(m,m)s(m,n)V(n,n).T U是一个mm的方阵,构成这个矩阵的向量是正交的,称其为左奇异向量;s是一个mn的向量,它的特点就是除对角线元素外,其余元素均为0. V是一个n*n的方阵,其转置(.T)亦为一个方阵,且这个矩阵是正交的,称其为右奇异向量。 s是对角矩阵,对角元素是从大到小排的,前面的元素比较大,后面的很多元素接近0。这些对角元素就是奇异值。
二、代码实现
import numpy as np
matrix=np.array([
[1,2],
[3,4]])
matrix_A=np.dot(matrix,matrix.T)
print(matrix_A)
U,s,V=np.linalg.svd(matrix_A)
S=np.array([[s[0],0],
[0,s[1]]])
print(s)
matrix_1=np.dot(U,np.dot(S,V))
print(matrix_1)
总结
期待大家和我交流,留言或者私信,一起学习,一起进步!
|