奇异值与奇异向量

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

定义

特征值分解是求解方阵的特征,对于非方阵而言可以通过奇异值分解描述矩阵的特征。

对于矩阵A为m*n的矩阵,可以分解成如下形式:

A是一个m*n的矩阵,那么得到的U是一个m * m的方阵(里面的向量是正交的,称为左奇异向量),Σ是一个m * n的矩阵(除了对角线的元素外,其它都是0,对角线上的元素称为奇异值),VT是一个n * n的矩阵(里面的向量也是正交的,称为右奇异向量)。

右奇异向量求解

矩阵A左乘转置AT,将会得到一个方阵(n*n),通过该方阵求特征值和特征向量,该特征向量即A的右奇异向量。

上面的Vi构成的矩阵即A的右奇异矩阵。

左奇异向量和奇异值的求解

根据上面得到的特征值λ,计算奇异值σ,以及左奇异向量u:

在几何中,我们可以把矩阵看做空间上的线性变换。奇异值分解的几何含义是:对于任何的一个矩阵,我们都能找到一组坐标轴,它是由原来的坐标轴通过旋转和缩放得到的。奇异值的含义是:这组变换后新的坐标轴的长度。

左奇异矩阵可以用于行数的压缩;

右奇异矩阵可以用于列数,也就是PCA降维。

python代码实现

m = 4
n = 3
A = np.random.randint(-10,10,(m, n)).astype(float)

# np.dot(A.T, A)的特征向量构成的矩阵为rvecs,需要注意的是rvecs的每个行向量为特征向量
lvecs, vals, rvecs = np.linalg.svd(A)

# 验证是否正确
# *表示只对固定位置的数相乘
np.allclose(A, np.dot(lvecs[:, :n] * vals, rvecs))

# 将s转化为奇异值矩阵
smat = np.zeros((m, n))
smat[:n, :n] = np.diag(vals)
np.allclose(A, np.dot(lvecs, np.dot(smat, rvecs)))

 

 

 

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看