Py学习  »  机器学习算法

机器学习 线性代数基础 | 1.4  矩阵乘向量的新视角:变换基底

狗熊会 • 4 年前 • 650 次点击  


我们即将步入这一章的尾声,在本章前面的三个小节中,我们学习了矩阵和向量的表示方法以及加法、乘法等基本运算的规则,并能够熟练利用Python语言工具正确的对其进行描述和表示。但是显然我们不能仅仅满足于此,那么在这一小节里,我们一起回过头来静静的思考这样一个问题:矩阵A和列向量x的乘法运算Ax有没有其他更深层次的几何含义呢?

我们知道,向量需要选定一组具体的基底来进行坐标表示,在这一小节里,我们试图去寻找矩阵向量乘法和基底之间的关联关系,从而挖掘其中的深刻内涵。最终,我们将向读者揭示出这样一个重要事实,即:矩阵与向量的乘法,本质上可以看作是对向量基底的一种改变。本节的篇幅不长,但是内容极其重要,他将奠定了一种新的思想方法,请各位读者务必细细体会。


1.4.1  重温运算法则


我们首先简单的回顾一下矩阵和向量相乘的运算法则。这里举一个简单的二阶方阵A与二维列向量x相乘的例子。当然,运算过程很简单,在之前的内容中已经涉及,运算公式是:

 

位于矩阵A第i行的行向量的各成分和列向量x各成分分别相乘后再相加,得到的就是结果向量中的第i个成分。这个计算方法有没有感觉到非常熟悉?没错,这不就是多次应用了向量点乘的定义式么?

即:

对于矩阵与向量的乘法运算,我们如果从行的角度来看确实就是如此。常规的计算操作就是按照这个过程进行执行的,但是看上去更多的是一种规则性的描述,似乎也没有更多可以挖掘的几何内涵。那么接下来,我们试试继续从列的角度再来看看,看看能否给我们带来一些新的收获。


1.4.2  列的角度:重新组合矩阵的列向量


如果从列的角度来审视矩阵与向量的乘法运算,会有另一套全新的计算步骤。可能相比于前面刚刚介绍的从行角度入手的方法,大家对这种思考方式并不是非常熟悉。但是实质上这种方法从线性代数的角度来看,其实还要更为重要、更为直观一些。这里,我们还是用二阶方阵进行举例。

 

大家发现了一些规律没有?我们通过这种形式的拆解和组合,也能得到最终的正确结果,这就是从列的角度进行分析的乘法运算过程。

依托前面的知识我们可以对其进行这样的描述:从列的角度来看,矩阵A与向量x的乘法,实质上是对矩阵A的各个列向量进行线性组合的过程,每个列向量的组合系数就是向量x的各个对应成分。

这种理解的方式似乎有点新意,我们按照列的角度重新把矩阵A写成一组列向量并排的形式,然后再将其与向量x进行乘法运算,这样一来,从结果的表达式来看,他所包含的几何意义就更加明晰了。

套用上述公式,我们来举一个实际的例子看看,整个过程就更加清楚了。

通过乘法计算最终所得到的结果向量就是:位于矩阵第一列的列向量的3倍加上位于第二列的列向量的5倍。

最后不怕啰嗦,我们再总结一下:一个矩阵和一个列向量相乘的过程可以理解成对位于原矩阵各列的列向量重新进行线性组合的过程,而在线性组合的运算过程中,结果中的各个系数就是参与乘法运算的列向量中所对应的各个成分。这是从列的角度去看待矩阵与向量乘法的一种新的视角。


1.4.3  再引申:向量的基底的变换


为了更方便的说明原理,我们依旧使用二阶方阵与二维列向量的乘法运算进行分析说明:

二维列向量的坐标是xy,还记得之前我们介绍过的向量坐标的相关概念么?向量的坐标需要依托于基底的选取,向量坐标在明确了基底的前提下才有实际意义,而这个二维列向量,我们说他的坐标是xy,其实基于的就是默认基底:。那么,这个二维列向量的完整表达式就应该是:

好,回顾完了上面的这些基础内容,我们就利用他将矩阵与向量的乘法运算表达式做进一步的展开处理:

从上面推导过程得到的最终结果来看,是不是已经感觉到初见端倪了?我们更连贯的展示一下式子首尾的对比结果,在矩阵的乘法作用下,向量最终完成了下面的转换过程:

更直白的说,通过乘法的运算过程矩阵把向量的基底进行了变换,旧的基底被变换成了新的基底。映射前由旧的基底分别乘以对应的坐标值来表示其空间位置,而乘法运算之后由于旧的基底被映射到了新的基底,那向量自然而然应该用新的基底去分别乘以对应坐标值来描述改变之后的空间位置:,如图1.9所示。

图1.9  在矩阵的作用下,向量的基发生了变换


1.4.4  运算矩阵的各列就是映射后的新基底


结合矩阵的式子我们不难发现:矩阵A的第一列就是原始的默认基向量变换后的目标位置(新的基向量),而第二列就是另一个基向量映射后的目标位置(新的基向量)。

基底的变换明确了,那向量的坐标呢?映射后得到的新向量,如果以向量为基底,他的坐标仍是,如果以默认的向量为基底,那么其坐标就是


1.4.5  扩展:三阶方阵的情况


为了使得结果更加让人信服,我们再来看一个三阶方阵和三维列向量相乘的例子。同理,运算也满足这个过程:

是不是和二阶矩阵的情况是一模一样呢?三阶方阵将三维列向量的基底做了映射转换,方阵的第一列是原始基向量映射后的目标位置(新的基向量),方阵的第二列是原始基向量映射后的目标位置(新的基向量),而方阵的第三列则是原始基向量映射后的目标位置(新的基向量)。

因此,最终的道理也是一样的,映射后的目标向量如果在新的基底下来看,其坐标仍然是。如果放回到原始基底下来看,将新的基底和他所对应的坐标相结合,就能得到默认原始基底下的坐标值了,具体表示为:



1.4.6  更一般的:m×n矩阵乘以n维列向量


看完了二阶和三阶方阵的实际乘法例子,此处我们需要进行进一步的抽象和概况。现在我们来看最一般的情况,矩阵A形状的一般矩阵(其中),而向量x是一个n维列向量,没有任何的特殊性了。

此时,我们按照上面的步骤来演示矩阵和向量 进行的乘法运算:

m×n形状大小的矩阵A的作用下,原始的n维基向量被映射成了新的m维基向量:,原始的n维基向量被映射成了新的m维基向量:,……,原始的n维基向量被映射成了新的m维基向量:

从上面的推导结果中我们可以发现,这种情况其实最值得讨论,因为此时矩阵A是一个普通的矩阵,而不是之前所举例的特殊方阵。在这种最一般性的情况下,映射的前后,列向量x的基向量维数甚至都发生了变化:原始的n维列向量x被变换成了nm维列向量进行线性组合的形式,其最终的运算结果是一个m维的列向量。

由此可以看出,映射后的向量维数和原始向量维数的关系取决于矩阵维数mn的关系:如果m>n,那么映射后的目标向量维数就大于原始向量的维数,如果m<n,那么目标向量的维数就小于原始向量的维数,当然了如果mn二者相等,那就是前面所举的方阵的特殊情况了。


1.4.7  关于基变换:一些意外情况


实际上,如果仅仅停留在上一小节讨论的结果,那可能会显示出我们思考问题不够全面、不够准确。

首先,“经过矩阵变换,会将向量原始的基底变换成为一组新的基底”这句话的表述其实并不完全准确,之所以在前面这么描述只是为了方便大家理解并建立一种新的概念,实际上一些特殊的情况并未考虑在内。

为什么这么说呢?

对于一个m×n的矩阵An维列向量x,经过Ax的乘法作用,xnn维默认基向量被转换成了nm维的目标向量。

我们针对mn的大小关系,分下面几种情况进行讨论:

n > m的时候,显然这n个向量线性相关,因此不构成基底;

m的时候,即使这n个向量线性无关,由于他们不能表示m维空间中的所有向量,因此也不能称之为m维目标空间的基底;

当且仅当n = m,且这n个向量线性无关的时候,他们才能称之为目标空间中的一组新的基底。

不过,即便是有这些意外情况的存在,我们本节所讨论的内容仍然具有重要意义。矩阵A的各个列是列向量x默认基底经过转换后的目标向量,正因为他们在维度和线性相关性方面存在着多种不同的情况,因此这组目标向量的张成空间和原始向量所在的空间之间就存在着多种不同的对应关系,这便是我们第二章里将要重点讨论的空间映射相关内容。



往期精彩回顾
前言
1.1 描述空间的工具:向量
1.2 基底构建一切,基底决定坐标
1.3 矩阵,让向量动起来


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


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



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