zoukankan      html  css  js  c++  java
  • 转载:矩阵的秩

    在知乎上看到这个讲解,感觉很深刻。

    首先,讲到矩阵的秩,几乎必然要引入矩阵的SVD分解:X=USV',U,V正交阵,S是对角阵。如果是完全SVD分解的话,那S对角线上非零元的个数就是这个矩阵的秩了(这些对角线元素叫做奇异值),还有些零元,这些零元对秩没有贡献。

    有了这个前提,我们就可以用各种姿势来看秩了:

    1.把矩阵当做样本集合,每一行(或每一列,这个无所谓)是一个样本,那么矩阵的秩就是这些样本所张成的线性子空间维数。如果矩阵秩远小于样本维数(即矩阵列数),那么这些样本相当于只生活在外围空间中的一个低维子空间,这样就能实施降维操作。举个例子,同一个人在不同光照下采得的正脸图像,假设每一张都是192x168的,且采集了50张,那构成的数据矩阵就为50行192x168列的,但是如果你做SVD分解就会发现,大概只有前10个奇异值比较大,其他的奇异值都接近零,因此实际上可以将接近零的奇异值所对应的那些维度丢掉,只保留前10个奇异值对应的子空间,从而将数据降维到10维的子空间了。

    2.把矩阵当做一个映射,既然是映射,那就得考虑它作用在向量x上的效果Ax。注意Ax相当于A的列的某个线性组合,如果矩阵是低秩的,这意味着这些列所张成的空间是外围空间的一个低维子空间,这个空间由Ax表达(其中x任意)。换句话说,这个矩阵把R^n空间映射到R^m空间,但是其映射的像只在R^m空间的一个低维子空间内生活。从SVD理解的话,Ax=USV'x,因此有三个变换:第一是V'x,相当于在原始的R^n空间旋转了一下坐标轴,这样只是坐标的变化,不改变向量本身(例如长度不变);第二是S(V'x),这相当于沿着各个坐标轴做拉伸,并且如果S的对角线上某些元素为零,那么这些元素所对应的那些坐标轴就相当于直接丢掉了;最后再U(SV'x),还是一个坐标轴旋转。总的来看,Ax就相当于把一个向量x沿着某些特定的方向做不同程度的拉伸(附带上一些不关乎本质的旋转),甚至丢弃,那些没被丢弃的方向个数就是秩了。

    这样就有很多很直接的应用。例如考虑第一个意义。给定一堆数据,这些数据可能本身只是在一个低维子空间内生活(即可以用一个低秩矩阵表示),但是由于噪声存在,我们拿到这些数据时它们看起来像是外围空间中的点,没有任何可以降维的迹象(即矩阵是满秩的)。设我们拿到的数据是X,那么根据这个设定,X应该能分解为一个低秩矩阵L和一个噪声矩阵E的叠加,即X=L+E。现在问题是如何恢复出L,因为一旦找到L,就相当于去除了噪声,同时降低了数据的复杂度(即维度)。怎么恢复?可以通过求解min rank(L)+|E|_F^2, subject to X=L+E来恢复出L和E。秩就显式地被用在这个问题里了。当然,这个问题往往只是引子,无数论文在写出类似问题后不到三行就会把rank(L)换成|L|_*,这个就是另外一些故事了。。。

    按我的经验,跟秩有关的问题以及几何意义,只需要仔细分析矩阵的SVD分解就能解决。但很可惜,大学里的线性代数更喜欢去介绍SVD的兄弟——特征值分解,而这个兄弟又往往只偏好对称阵,不像SVD这样所有实矩阵都可以分析,导致处理一般矩阵的秩时没有一个趁手的工具。
  • 相关阅读:
    大白话解说,半分钟就懂 --- 分布式与集群是什么 ? 区别是什么?
    intellij idea中去除@Autowired注入对象的红色波浪线提示
    用JQuery获取事件源怎么写
    springBoot 配置url 访问图片
    地图服务 纬度、经度对应坐标轴x,y
    5个问题带你了解export和import的使用以及export和export defalut 的区别
    5个你可能不知道的html5语义化标签
    CSS选择器[attribute | = value] 和 [attribute ^ = value]的区别
    前端ps实用小技巧
    7步教你使用git命令上传本地代码至github仓库(小白向)
  • 原文地址:https://www.cnblogs.com/txq157/p/6610740.html
Copyright © 2011-2022 走看看