矩阵分解

矩阵分解(decomposition,factorization):将矩阵拆分为多个矩阵的乘积的运算。矩阵的分解包括以下几种:

  • 特征分解
  • SVD分解
  • PCA
  • QR分解
  • LU分解
  • 极分解

矩阵分解在数据压缩推荐系统以及NLP等都有着比较广泛的应用。

特征分解

特征分解(eigendecomposition):能够将矩阵分解成一组特征向量和特征值,是一种使用最为广泛的矩阵分解。并不是所有的矩阵能够使用矩阵分解,只有方阵(矩阵的行数等于列数)才有特征分解,我们可以使用下面的数学形式来表示特征分解:
Av=λvAv=\lambda v Av=λv
上面的式子中,非零向量vvv是矩阵AAA的特征向量,标量λ\lambdaλ是特征向量vvv的特征值

  • 特征分解究竟有何作用?
    通过特征分解我们能够将一个矩阵分解成为下面的形式:
    A=QΛQ−1A = Q \Lambda Q^{-1} A=QΛQ−1
    上式中的,QQQ是矩阵AAA的特征向量组成的正交矩阵,Λ\LambdaΛ是一个对角矩阵,每一个对角线元素就是一个特征值,特征值Λi,i\Lambda_{i,i}Λi,i​对应的特征向量是矩阵QQQ的第iii列,特征值得大小表示对应特征向量对矩阵的重要程度

    通过特征分解后,我们就能分析出矩阵中特征向量的重要程度,通过分析特征向量对应特征的大小来判断特征向量的重要性,特征值越大表示特征向量越重要。

奇异值分解

奇异值分解(singular value decomposition,SVD):将矩阵分解为奇异向量(singular vector)和奇异值(singular value),奇异值分解得到的信息和特征分解得到信息是同类型的,相对特征分解来说奇异值分解的应用更为广泛,因为每个实数矩阵都有一个奇异值分解,但不一定有特征分解。因为只有方阵才有特征分解,对于非方阵我们就可以使用奇异值分解。

通过奇异值分解,我们可以将矩阵分解成为下面的形式:
A=UDVTA = U D V^T A=UDVT
如果AAA是一个m×nm×nm×n的矩阵,那么UUU就是一个m×mm×mm×m的矩阵,DDD就是一个m×nm × nm×n的矩阵,VVV是一个n×nn×nn×n的矩阵。

矩阵UUU和VVV是正交矩阵,而矩阵DDD是对角矩阵,矩阵DDD对角线上的元素称为矩阵AAA的奇异值。矩阵UUU的列向量称为左奇异向量(left singular vector),矩阵VVV的列向量称为右奇异向量(right singular vector)

我们可以利用特征分解去解释矩阵的奇异值分解,AAA的左奇异向量是AATAA^TAAT的特征向量,AAA的右奇异向量是ATAA^TAATA的特征向量。AAA的非零奇异值是AATAA^TAAT特征值的平方根,同时也是ATAA^TAATA特征值的平方根。

除此之外,SVD还可以应用到矩阵求逆到非方阵上来。

伪逆

当我们需要求解一个线性方程的时候:
Ax=yAx=y Ax=y
我们可以在等式的左边同时乘以矩阵AAA的逆矩阵BBB后,就可以得到
x=Byx = By x=By
这样我们就能够求解线性方程的解。但是,如果矩阵AAA是非方阵,那么它就没有逆矩阵。这时候就只能通过Moore-Penrose 伪逆来解决这一类问题,矩阵AAA的伪逆的公式如下:
A+=VD+UTA^+= V D^+ U^T A+=VD+UT
上式中的矩阵U、D、VU、D、VU、D、V是由矩阵AAA通过奇异值分解之后得到的矩阵,对角矩阵DDD的伪逆D+D^+D+是其非零元素取倒数之后再转置得到的。

当矩阵AAA的列数多于行数(未知数的个数大于方程个数)时,使用伪逆求解的线性方程可能是众多解法中的一种。当矩阵AAA的行数多于列数(方程的个数大于未知数的个数)时,方程可能没有解,在这种情况下,通过伪逆得到的xxx使得AxAxAx和yyy的欧几里得距离∣∣Ax−y∣∣2||Ax-y||_2∣∣Ax−y∣∣2​最小。

特征分解和奇异值分解的示例

我们可以利用numpy中实现的特征分解奇异值分解来测试一下

  • 特征分解
import numpy as npa = np.array([[1,2,3],[4,5,6],[7,8,9]])
#w是特征值,v是特征向量
w,v = np.linalg.eig(a)
print(w)
print(v)
#w[i]对应的特征向量是v[:,i]
print(w[0])
print(v[:,0])
[ 1.61168440e+01 -1.11684397e+00 -1.30367773e-15]
[[-0.23197069 -0.78583024  0.40824829][-0.52532209 -0.08675134 -0.81649658][-0.8186735   0.61232756  0.40824829]]
16.116843969807043
[-0.23197069 -0.52532209 -0.8186735 ]

通过对矩阵做特征分解能够很容易通过特征值去判断那些特征向量对矩阵更重要

  • SVD分解
import numpy as npa = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
#SVD奇异值分解
#u左奇异向量矩阵,s奇异值矩阵,vh右奇异向量矩阵
u,s,vh = np.linalg.svd(a)
print(u.shape,s.shape,vh.shape)
#(3, 3) (3,) (4, 4)
print(s)
#[2.11562535e+01 1.55336357e+00 9.06493304e-17]#通过奇异值向量和奇异值还原矩阵
smat = np.zeros((u.shape[1], vh.shape[0]))
smat[:s.shape[0], :s.shape[0]] = np.diag(s)
restore_a = np.dot(np.dot(u,smat),vh)
# print(restore_a)#重构矩阵
num = 2
re_a = np.dot(np.dot(u[:,:num],np.diag(s[:num])),vh[:num,:])
print(re_a)
"""
[[ 1.  2.  3.  4.][ 4.  5.  6.  7.][ 7.  8.  9. 10.]]
"""

利用numpy我们能够很容易的来实现矩阵的奇异值分解,然后我们也利用了奇异值向量奇异值来还原矩阵。

最后,我们发现我们再重建矩阵的时候只利用两个奇异值和奇异向量也能够完全的还原出原始矩阵,主要是因为第三个奇异值非常的小,对整个矩阵几乎没有影响。

在奇异值矩阵DDD中,是按照奇异值从大到小排列的,而且矩阵中的奇异值衰减的特别快。在很多情况下,前10%甚至前1%的奇异值之和就占了奇异值之和99%以上。也就是说,我们可以用前r(r远远小于m、n)个奇异值和奇异向量来近似描述矩阵。

聊聊特征分解和SVD分解相关推荐

  1. 矩阵理论(二)特征值分解和SVD分解

    特征值分解和SVD分解是两种将矩阵进行分解的经典方法,两者在机器学习的各类算法中被广泛使用(如PCA降维.文本LSI.推荐算法等等). 一.特征值分解 定义:对于方阵A\boldsymbol AA,若 ...

  2. 基于PCA的降维中,进行特征值分解和SVD分解相关笔记

    降维原理 原矩阵X,变换矩阵W,变换后,进入新空间下的WTXW^TXWTX. 想要进入新空间时,各特征之间的差异大分得开,也就是新空间下矩阵的方差越大越好,即WTXXTWW^TXX^TWWTXXTW越 ...

  3. 几种矩阵分解算法: LU分解,Cholesky分解,QR分解,SVD分解,Jordan分解

    目录 1.LU分解 2. LDLT分解法 3. Cholesky分解的形式 4. QR分解 5.SVD分解 5.1 SVD与广义逆矩阵 6. Jordan 分解 参考文章: ---------我只是搬 ...

  4. 特征值分解和SVD分解

    一.特征值与特征向量的几何意义 1.     矩阵乘法 在介绍特征值与特征向量的几何意义之前,先介绍矩阵乘法的几何意义. 矩阵乘法对应了一个变换,是把任意一个向量变成另一个方向或长度的新向量.在这个变 ...

  5. 【机器学习中的矩阵分解】LU分解、QR分解、SVD分解

    学习总结 文章目录 学习总结 一.三角分解(LU分解) 1.1 高斯消元 1.2 LU分解原理 1.3 LU分解python代码 1.4 LU分解算法 二.QR分解 2.1 Schmid 正交化 2. ...

  6. QR分解,SVD分解以及应用

    %%%QR分解 QR分解--它是将矩阵分解成一个正规正交矩阵Q与上三角形矩阵R 具体的分解方式可以参考QR分解_shushi6969的博客-CSDN博客_qr分解 A = [1,1,2;8,4,4;4 ...

  7. 奇异值(Singular value decomposition SVD)分解

    本文摘自两篇博客,感谢博主分享 一.原文地址:http://blog.csdn.net/wangzhiqing3/article/details/7446444 SVD分解 SVD分解是LSA的数学基 ...

  8. QR分解、RQ分解与SVD

    QR分解.RQ分解与SVD分解整理 1.QR分解 QR分解将一个m x m的矩阵A分解为一个正交矩阵Q与一个上三角阵R之积.常常利用Householder变换来进行QR分解的计算. Household ...

  9. 运筹系列70:pinv/inv/LU/SVD分解

    1. LU分解 LU分解(LU Factorization)可以将一个矩阵分解为一个单位下三角矩阵和一个上三角矩阵的乘积.LU分解非常简单,下图可以直观的看出LU分解的求解方法. LU分解主要应用在数 ...

最新文章

  1. UPX脱壳全程分析(转)
  2. 独立成分分析 ( ICA ) 与主成分分析 ( PCA ) 的区别
  3. LeetCode 1974. 使用特殊打字机键入单词的最少时间
  4. Microsoft visual studio关闭安全检查
  5. Android更改桌面应用程序launcher的两种方式
  6. 2.4时序卷积网络TCN:因果膨胀卷积、残差连接和跳过连接
  7. 【优化算法】非洲秃鹫优化算法(AVOA)【含Matlab源码 1805期】
  8. linux版小米随身WIFI驱动,在官网中您就可以下载小米随身wifi的驱动程序了
  9. bim 水利枢纽 运维_BIM技术与现代化建筑运维管理
  10. 武汉晴川学院计算机,2019武汉晴川学院专业排名
  11. 【python】52周存钱法功能改进
  12. mysql MVCC产生幻读原因及解决方式
  13. JAVA实现负载均衡
  14. 新赛季的中超和国安,荆棘中前行
  15. python房价预测_人工智能python实现-预测房价:回归问题
  16. 如何通过划分VLAN,有效规划企业网ip地址!
  17. 无代码白话版通俗的理解机器学习如何对未知的数据进行预测
  18. Linux命令--arp--使用/实例
  19. visual studio 配置管理器 32位 64位
  20. 制造商将注意力转向轻质量以进一步提高LED市场份额

热门文章

  1. 操作系统-内存管理-虚拟内存管理
  2. java createcell_ROW.CREATECELL
  3. Mac Nginx 安装与配置
  4. 【python】pandas某一列中每一行拆分成多行的方法
  5. HighCharts HelloWorld
  6. 胶片的效果那真当钢钢滴啊,柯达克罗姆胶卷的前生今世
  7. 用 ChatGPT 将 Excel 工作效率提高 10 倍!离做PPT还远吗
  8. 【机器学习-吴恩达】Week4 神经网络表示
  9. Zigbee---[复习]--基于CC2530的LED闪烁和蜂鸣器实验
  10. ROS nodelet-----编写一个nodelet插件