• 数学基础(一)矩阵对角化、SVD分解以及应用


    目录

    一、矩阵

    1.矩阵的性质

    2.单位矩阵和逆矩阵

    3.矩阵的对角化

    二、矩阵的SVD分解

    三、SVD的应用


    一、矩阵

    1.矩阵的性质

    下面列出了矩阵的一些性质:A表示一个p×m的矩阵,B,C表示一个m×n的矩阵。

    最后一条比较常用,由于x,y都是列向量,故x^Ty就是一个实数,实数的转置就是它本身,同理y^Tx也是一个实数。

     2.单位矩阵和逆矩阵

    3.矩阵的对角化

    矩阵B为方阵,存在P矩阵使得P^{-1}AP=B成立,其中A为对角矩阵,P为单位正交矩阵,则说明B可对角化。

    对称矩阵:A^T=A

    对阵正定矩阵:任意一个列向量x,使得x^TAx\geq 0,则A为对称正定矩阵。得到的x^TAx是个实数。

    下图右侧中为矩阵对角化的变换。

    其中P为n×n的矩阵,ui为n×1的列向量,A为除对角元素外都为0的对角矩阵。

    则B矩阵就可以表示为

    将三个矩阵乘起来就得到

     注意ui为列向量,u_iu^T_i是一个矩阵,而非实数。

    矩阵对角化的本质意义就是把矩阵进行分解。

    将矩阵分解有什么好处呢?

    保存原矩阵B需要n×n个参数,而分解之后只需要保存n+1个参数

    为什么是n+1个参数呢?

    实际中\lambda _1\gg \lambda_2\gg ...\gg \lambda_n,故仅用第一项\lambda_1u_1u^T_1就可以很大程度的表达B矩阵。其中u_1为一个n×1的列向量,需要保存n个参数,u_1^T不需要额外保存参数,存储λ需要一个参数,故保存B矩阵只需要n+1个参数。

    有一个面试题:用101个参数表示100×100的矩阵。

    该问题的求解思想就用到了矩阵的对角化。

    对于该问题,我们将100×100的矩阵B进行矩阵分解

    B=(u_1,u_2,...,u_{100})\bigl(\begin{smallmatrix} &\lambda_1 & & &\\ & & \lambda_2 & &\\ & & &... &\\ & & & &\lambda_100 \end{smallmatrix}\bigr) \begin{pmatrix} u_1^T\\ ...\\ u_{100}^T \end{pmatrix}

    =\lambda_1u_1u_1^T+\lambda_2u_2u_2^T+...+\lambda_{100}u_{100}u_{100}^T

    我们仅用第一项就可以极大程度的表示B矩阵,第一项所需要的参数为保存u的100个参数及保存λ的一个参数,共计101个参数。

    二、矩阵的SVD分解

    矩阵的对角化存储要求比较严格,矩阵B必须为对称的方阵,不具有通用性。

    那对于一般的矩阵怎么进行分解呢? 

    将矩阵m×n维的矩阵A进行一定的变换,如下图所示,其中A^TA为一个n×n的对称方阵,AA^T为一个m×m的对称方阵,这两个方阵都满足对角化。

    证明A^TAAA^T为半正定矩阵:

    证明A^TA的对称性:

    证明A^TA是半正定矩阵:

    这样可能不是很好理解,我们假设Ax=y,其中A为m×n的矩阵,x为n×1的列向量,故y为m×1的列向量,y^T为1×m的列向量,故y^Ty=\left \| y \right \|^2\geq 0(这是个定理),则(Ax)^T(Ax)\geq 0,得以证明A^TA是一个半正定矩阵,同理AA^T也是一个半正定矩阵。

    半正定矩阵的特征值 λ 都是大于等于0的,故D矩阵中的 λ 都是大于等于0的。

    注意下图中的两个D是不相等的,我们假设n×n维的为D1,m×m维的为D2。因为维度是不相等的所以D1不等于D2,那么他们的元素之间(λ)的关系是怎样的呢?

    结论:虽然A^TA\neq AA^T,但是他们不为0 的特征值是相等的,比如,D1的特征值\lambda_1=1,\lambda_2=2,\lambda_3=3,\lambda_4=0,则D2的特征值为u_1=1,u_2=2,u_3=3,u_4=0,u_5=0,可以看出,D1 和 D2 不为0 的特征值是相等的,差别就是一个维数高的矩阵的特征值会有更多值为0的特征值。

     

    重点来了,那么A_{m\times n}就可以写成

    A_{m\times n}展开即为

    因为\lambda _1\gg \lambda_2\gg ...\gg \lambda_n,所以我么进取第一项来压缩矩阵,此时所需要的存储的参数为v_1的m个参数和u_1的n个参数还有\lambda _1的一个参数,共计m+n+1个参数。

    如果我们仅取第一项的值,那势必会产生误差,这个误差怎么算呢?

    误差为:

    分母为维度较小的λ的和,分子为前k(k最大为不为零的λ的个数)项λ的和,其中k\leq min(m,n),可见,当k取最大值时,error为0,即无损失;k取1时,error为1-\frac{\lambda_1}{\lambda_1+...+\lambda_k},则\lambda _1\gg \lambda_2\gg ...\gg \lambda_k,损失不大,存储量也是最小。

    原矩阵A_{200\times 100}X_{100\times 1}做矩阵乘法,需要计算200×100次乘法

    分解后的矩阵A_{200\times 100}X_{100\times 1}\approx M_{200\times 10}N_{10\times 100}X_{100\times 1}(取前10项)则需要计算10×100+10×200=3000次乘法

    三、SVD的应用

    图像压缩

    如果k=10,即保留前10项,图像压缩效果如第一张所示,有点模糊,保留的越多,压缩后的图像与原图就越相近,越清晰。

     传统的图像传输方法如下图所示,图像被一部分一部分的显示出来。

    现在的图像传输是先对图像进行压缩,先传输压缩后的图像信息,再一点点的传输细节信息。

    如下图所示

  • 相关阅读:
    2-6 jdbc查询数据库返回 json结果到浏览器
    带你深入学习Redis主从复制,学习心跳包、主从结构,全量复制、部分复制等
    vue 动态组件 render/jsx
    Vue框架快速上手
    linux之ftp服务-1
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    代码随想录刷题 Day14
    关于构造方法
    Matlab论文插图绘制模板第125期—特征渲染的三维气泡图
    【Golang | reflect】利用反射实现方法的调用
  • 原文地址:https://blog.csdn.net/m0_45447650/article/details/126208776