社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习 线性代数基础 | 2.2  追因溯源:逆矩阵和逆映射

狗熊会 • 5 年前 • 1104 次点击  


2.2  追因溯源:逆矩阵和逆映射


在上一小节里,我们着重讲解了矩阵所描述的空间映射关系:通过一个m行n列的矩阵可以将n维空间中的x坐标向量映射到m维空间中的y坐标向量。正如我们所熟悉的函数与反函数之间的对应关系,对于空间中的映射,我们自然也应该去思考反方向上的逆映射过程。

因此在这一小节中,我们就来详细讨论逆映射以及表征他的逆矩阵。重点分析针对多种不同形态的矩阵,其逆映射的存在性问题,并最终总结归纳出逆映射存在的条件以及用Python工具去求解逆矩阵的实际操作方法,继续引导大家沿着“空间”这个概念主轴去分析和理解实际的问题。

2.2.1  说说逆矩阵

在前面的内容中,我们反复讲了这样一个结论:矩阵的本质就是映射。对于一个m x n的矩阵A,矩阵乘法y=Ax的作用就是将向量从n维原始空间中的x坐标位置,映射到m维目标空间中的y坐标位置,这是正向映射的过程。

那么,如果已知结果向量的坐标y去反推原始向量的坐标x,这个过程我们就将其称之为逆映射或者逆问题,因为逆映射也是一种映射过程,因此同样有矩阵与之相对应,那么我们就将表征逆映射的矩阵称之为矩阵A的逆矩阵,写作:

2.2.2  类比反函数与矩阵的逆映射

为了更直观的说明问题,我们在深入讨论逆映射、逆矩阵之前先说说函数映射的逆过程,即反函数的相关问题。

我们来看最简单的一次函数:,变量x的取值范围为整个实数域,指定某个具体的变量x的取值,我们就能得到与之相对应的yy的取值范围也是整个实数域。

那么反过来看,我们来看看其反函数的形式:,试图通过结果y的值,来找到其对应的自变量x。但是我们知道,如果想试图通过逆过程找到x,这里必须满足一个重要的前提条件,那就是

也就是说,我们通过函数,实现了从变量xy的映射,但是必须基于的前提条件下,我们才能通过反函数y重新映射回x。很显然,因为当时, ,此时正方向上的映射x⇒y仍然存在,无论x取任何数,最终的函数映射结果都是y=b。但是,此时反方向上的映射y⇒x就不存在了,一方面当y=b的时候,有无穷多种x的取值可能,显然是无法完成映射。而另一方面,当的时候,找不到满足等式条件成立的变量x取值,因此映射也是不存在的。提醒大家要全面的注意到这两种情况,这在后续的空间映射中都能找到对应的应用场景。

上面的这个例子本身很简单,相信大家都是再明白不过的了,函数存在反函数的条件就是必须满足一一映射,我举这个例子的原因就是想将其引申到矩阵对向量所在空间进行映射的问题上去,对比讨论矩阵映射的逆问题。

对比看反函数的存在性问题,我们在潜意识里一定会想了:肯定不是每个矩阵所表示的映射都有逆映射存在,也不是每一个矩阵都存在逆矩阵。这个直觉是对的,我们下面就用实例来阐释这个想法。


2.2.3  矮胖矩阵压缩空间:不存在逆映射

第一种情况是m行n列的矩阵将向量从原空间映射到目标空间中的,其中 n>m ,即映射的矩阵是一个列数大于行数的“矮胖”矩阵。

我们举一个实际的例子来看看,假设矩阵A是一个2×3的“矮胖”矩阵,我们在上一节里讨论过,如果矩阵A的三个列向量共面但不共线,则该矩阵能够将一个空间压缩成一个二维平面,如果这三个列向量都满足共线的条件,则经过矩阵的映射作用最终将空间压缩成一条直线。

这个映射过程的本质是将向量x所在的三维空间,映射到向量y所在的二维空间(或者甚至是一维的空间)中,对应了压缩扁平化的操作,你仔细想想生活中的“压扁了”这个概念:一个纸盒子被一巴掌拍成了一张纸,也就是说在这个过程中会有多个向量x会被转移到同一个向量y上去。

我们用一个实际的例子来具体描述一下压缩这个过程,还是用上一节中的矩阵:。在这里,我们聚焦的是映射后目标空间中的零向量:,看看原空间中会有多少个向量被映射到那里去,换句话说,我们的目标就是去寻找所有满足等式成立的向量x

我们展开得到:

我们对等式简单进行处理后发现:即在原始空间当中,各成分满足的向量(我们记作:,c取任意实数),经过矩阵A的映射作用,都能够映射到目标空间中的零向量上。从通式中可以显而易见的是,原始空间里满足这个条件的向量有无穷多个。

如图2.6所示,所有满足条件的向量都分布在一条直线上。

图2.6 分布在一条直线上的向量被压缩为一个点

这幅图中揭示了一个显而易见的现象:已知映射后在二维目标空间中的向量y,想要寻找原始空间中的向量x在哪里?你是无法判断出来的。

在上图中我们可以看出,目标空间中的零向量,其对应在原始空间里的向量x可以是直线上的任意一点,但是具体是哪一个?对不起,不知道。这是因为,在映射过程中空间被矩阵A给压缩了,换句话说,一些信息在这个压缩映射的过程中丢失了,套用一句网络用语,这就叫作:“我们再也回不去了”。所以这种形态的矩阵A所表示的映射是不存在逆映射的,矩阵A也没有相对应的逆矩阵。


2.2.4  零空间的概念

我们由此引出一个新的概念:对于给定的矩阵A,在映射的作用下满足等式Ax=0成立的向量x的集合,我们称之为矩阵A零空间,记作:N(A)。在上面的那个例子中,满足等式Ax=0成立的向量x分布在一条直线上,因此可以得出,该矩阵A的零空间N(A)的维度是1维的。

而对比着看,如果一个矩阵A存在着逆映射,则意味着其映射后的点是要能被唯一还原的,因此显然,矩阵A的零空间N(A)对应的不能是一维直线或者是一个二维平面,而只能是一个点,也就是原始空间中的零向量。即,如果一个矩阵满足可逆,他的零空间N(A)必须是0维的。

2.2.5  “高瘦”矩阵不存在逆映射:目标空间无法全覆盖

“矮胖”矩阵在映射的过程中,压缩了空间维度,丢失了信息,因此这个映射可谓是“再也回不去了”。那我们再看看,如果映射的结果向量y的维度大于原始空间向量x的维度,例如在矩阵的作用下,将一个二维向量映射成了一个三维向量,又是一个什么样的情况呢?

表面上看,我们似乎没有压缩空间,反而是把一个二维向量扩充成了三维向量,看上去信息量应该是更大了。从直观上来看,目标空间里的向量肯定能够逆映射回原空间,并找到出发点。实际上这一定能做到么?并不能,因为我们是把二维空间映射到了一个三维空间里,而仅凭二维空间所携带的信息量就想把三维空间全部覆盖,想想也是根本不可能的,最终的映射效果如图2.7所示,这个情形,我们在之前的章节里也都分析过了,大家应该不会陌生。

图2.7  经过高瘦矩阵的映射,无法覆盖整个目标空间

从表面的维度数字上来看,之前的一个二维空间被映射到了三维空间里,但实际上我们发现,映射后的最终结果实质上是一个穿过原点并且“倾斜”的搭在三维空间中的一个面,他由三维向量构成,但是他是二维的平面。那么,很明显可以看出,位于这个二维平面外的任意一点,都无法找到原空间中对应的出发点,因此“高瘦”矩阵的逆映射自然也是不存在的。

2.2.6  列空间的概念

从这个例子中,我们又引出了一个空间的概念,叫矩阵的列空间。一个原始空间经过矩阵A的映射得到的对应空间,本质上就是该矩阵各列所有线性组合的结果集合,我们就将其称之为矩阵A的列空间C(A)

在这个3×2的矩阵 的实际例子中,映射后得到的目标空间是三维的空间,而列空间则是空间中“斜搭”着的一个二维平面。

2.2.7  方阵:逆映射存在的必要但不充分条件

从上面两部分里我们可以得出结论,“矮胖”矩阵和“高瘦”矩阵所表示的映射,肯定是不存在逆映射的。逆映射存在的前提条件是矩阵必须是一个方阵。

说到这里,其实大家都已经有一种感觉了,那就是应该从方阵各列的线性相关性入手进行分析,是不是感觉已经是老生常谈了?

我们假设有一个三阶方阵A,矩阵A的映射过程被描述成等式Ax=y,映射后向量y的分布就是矩阵A的列空间。当方阵的三个列向量线性相关时,A的列空间就是斜搭在空间中的一个平面或者是斜穿过空间中的一条直线。从逆矩阵存在性的角度而言,这种情形其实是非常糟糕的,因为他结合了“矮胖”矩阵和“高瘦”矩阵的缺点,我们重点分析一下列空间是二维平面的情况:

当三阶方阵A的三个列向量共面而不共线时,矩阵A的秩为2。A的列空间是一个斜搭在目标空间中的二维平面。如图2.8所示,此时,位于这个二维平面列空间中的向量,对应于原空间中的向量有无数多个。我们还是聚焦目标空间中的零向量,这个最能说明问题。原空间中满足Ax=0映射关系的所有x向量分布在一条一维直线上,从这个角度来说,逆映射就不存在。

当然,这还没有结束。因为A是一个三阶方阵,他的目标空间是一个三维的空间,但是他的列空间只是其中的一个二维平面,那么位于目标空间中却在列空间之外的点(例如向量p),我们就无法在原空间中找到一个可以映射过来的对应点。从这个角度来说,矩阵A对应的逆映射同样不存在。

 

图2.8  列向量线性相关的方阵也不存在逆映射

如果矩阵A的列空间是一条直线,其中的分析方法和分类情形也是类似的,这里就不具体展开了。

2.2.8  逆矩阵存在的条件

上面所有的这些例子都在反复告诉我们一个事实:逆矩阵存在的条件首先得保证是一个方阵,其次又举例说明了,不一定所有的方阵都存在逆矩阵。那么终极问题就来了:什么样的方阵才会有逆矩阵和逆映射呢?

那么,我们来探索一下逆矩阵存在的条件。

回顾刚才我们举的那个例子,在一个三阶方阵A的映射作用下,一个三维空间被压缩扁平化成了一个平面。其中的物理意义便是:把原始空间中不同的向量x通过矩阵A的作用,映射到目标空间中相同的目标向量y

我们拓展到一般化的情境下,用数学语言来描述这个过程,就是:,其中是列向量。

那么就有:,展开来看就是:

我们利用矩阵乘法的运算法则进行进一步的展开,会发现:

由于我们之前约定了向量x和向量是两个不同的向量,即x的各个坐标不能完全相等,换句话说就是满足成立。而与此同时,在此情况下仍然可以使得等式成立。于是通过移项,很简单的有了下面的式子:

即:

此时,我们似乎感觉越来越清晰了,这时矩阵A的列向量是可以用其余的各列的线性组合来进行表示的,换句话说存在于这一组向量所张成的n−1维空间里。

进一步回忆我们之前所讲的内容,矩阵与向量的乘法本质上是一种映射,矩阵A的各个列向量就是原向量x的n个基向量,......,的最终映射目标。

你想想,原来的n个基向量经过映射后形成的n个目标向量里,其中的某一个向量可以用其他n−1个线性无关的向量进行组合和表示,那么这n个目标向量本质上只能表示n−1维的空间了(这n个目标向量已经不具备构成基底的条件了),这不正对应着一句话:经过矩阵A的映射,构成n维空间的基底被映射成了仅能张成n−1维空间的目标向量,所能表示的空间不就因此被压缩扁平化了吗?

我们总结一下:在映射方阵A中,如果某个列向量可以写成其他列向量的线性组合,即,那么对应的矩阵映射一定是空间压缩的映射,一定不存在逆矩阵。


往期精彩回顾
前言
1.1 描述空间的工具:向量
1.2 基底构建一切,基底决定坐标
1.3 矩阵,让向量动起来
1.4 矩阵乘向量的新视角:变换基底
2.1 矩阵:描述空间中的映射


本书所涉及的源代码已上传到百度网盘,供读者下载。请读者关注封底“博雅读书社”微信公众号,找到“资源下载”栏目,根据提示获取。


如果您对本书感兴趣,请进入当当网选购!



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51496
 
1104 次点击