社区所有版块导航
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学习  »  机器学习算法

机器学习 线性代数基础 | 3.3施密特正交化:寻找最佳投影基

狗熊会 • 4 年前 • 1181 次点击  
     ▼
更多精彩推荐,请关注我们
3.3  施密特正交化:寻找最佳投影基

在本章的前面两个小节里,我们通过向指定子空间进行投影,探索到了如何寻找“最近距离”的有效途径,通过理论分析和推导,成功得出了一组描述投影向量p和投影矩阵P的计算公式,并针对无解线性方程组的近似解问题以及空间上多点的线性拟合问题,提炼出了最小二乘法这个通用工具。

但是读者们其实会发现,我们拿出的这一组一般化的公式,他的计算过程其实并不简单,尤其是当我们不借助编程工具的时候会更加发现他的繁杂。如何简化这里的计算过程?我们在这一小节里就会专门介绍通过找到一个满足特定要求的矩阵A,来对运算过程进行简化的有效方法,而这里面的核心思路就是通过施密特正交化方法找到投影子空间的一组标准正交基。

3.3.1
 简化投影计算:从ATA表达式入手

通过掌握前面两节所讲述的的内容,我们已经可以利用公式将空间中的任意一个向量向任意一个子空间进行投影,并最终得到他的投影向量p。其中,矩阵A的各列就对应着子空间的一组基向量。

但是,通过上一节的一些实际举例,我们会发现在进行计算的时候,尤其是如果不借助程序工具而是采用手算的方式,就会感觉到这个过程非常冗长、复杂,尤其是在计算这个表达式的过程中,涉及到矩阵乘法和矩阵取逆的操作,使得我们不由得在想:要是计算能够简单一点,那该多好呀!那么,我们究竟应该从哪里入手去简化这个计算过程呢?

第一直觉告诉我们,如果矩阵相乘的结果是一个单位矩阵I那真的就太痛快了,由于单位矩阵I满足等式成立,那么投影向量p的表达式就可以变得特别简单:,是不是突然间感觉到特别清爽,特别友好?

那么,我们基于这个思路接着往下推理。

3.3.2 
 标准正交向量

这里,我们来看看应该怎么样做才能达到这一效果。首先,我们令矩阵,其中各个列向量彼此之间满足线性无关,因此就可以构成子空间的一组基。

从运算结果的表达式中我们不难发现,如果想要得到的最终结果,则我们选取的这一组列向量必须满足以下两个条件:

(1)在结果矩阵中,矩阵对角线上的元素必须都为1,即当时,

(2)在结果矩阵中,矩阵非对角线上的元素必须都为0,即当时,

我们把话说的更直白一些,就是这一组列向量彼此之间的点积为0,意味着向量之间彼此正交;而向量与自身的点积为1,则意味着每一个向量的模长都为1,这一组列向量均为单位向量。

其实有一个专门的词汇来描述这一种情况:我们称这一组向量是标准正交的。

那么,由这么一组标准正交向量构成各列的矩阵,我们一般用一个专门的字母Q来表示,此时矩阵Q就满足等式关系成立。强调一下,满足这个等式成立的矩阵Q不要求是一个方阵。

不过如果当矩阵Q是一个方阵的时候,那么情况则更为特殊一些,此时我们称方阵Q为正交矩阵,并且方阵Q满足可逆性。这时的方阵Q具备一个有趣的性质,那就是:,即,正交矩阵的逆矩阵等于自身的转置矩阵。当然,大家可千万不要忘了矩阵Q是方阵这个大前提啊。这个等式非常重要,他在后面的章节中将会派上大用场。

3.3.3 
 向标准正交向量上投影

有了上面的一系列推导介绍,显然我们再进行向量投影计算的时候,就应该首先去考虑使用标准正交向量来作为投影子空间的基向量。在这种情况下,我们用正交矩阵Q来代替一般矩阵A,同时由于的原因,之前推导出的投影向量p和投影向量P的表达式都得以简化:

正是由于我们采用了标准正交向量来描述投影子空间,因此得到了如此清爽简洁的结果。那么很自然的问题就来了,我们怎样才能找到指定子空间上的这一组标准正交向量呢?

请大家不要着急,通过使用我们接下来要介绍的施密特正交化方法就能很容易的实现这个目标。

3.3.4
 施密特正交化

施密特正交化方法就是用来解决我们上面提到的这个问题:如何将n维子空间中的任意一组基向量变换成标准正交向量。为了让大家更快的领悟到方法的核心要点,我们选择在一个三维空间 中进行举例说明,我们任意选取三个线性无关的向量:a,b,c,探索如何在他们的基础上最终通过运算获得一组标准正交向量来作为三维空间中更优的一组新基。

我们的思路是:首先从abc三个向量中,通过运算变换得出三个彼此正交的向量,然后再分别将其转化成模长为1的单位向量,由此得到最终的结果:一组标准正交向量。

那么,我首先就从向量a入手处理,向量就设置为与向量a相等,即满足。因此就有:

再来看看向量,向量要求与向量满足正交关系。这并不难办,我们就以此来处理向量b,利用3.1节的知识我们知道:向量b与其自身在向量上的投影之差,就正交于向量,这里的方法我们很熟悉,直接套用公式即可:

,然后再将向量的模长变为1,即有

最后我们再来看向量,向量要求同时与向量和向量满足正交关系,那我们就来利用向量c,向量c减去其在向量张成空间上的投影所得到的结果,就能满足同时正交于向量

因此,我们换一种表达方式描述就是:向量c减去其在向量上的投影之和,就能求得向量

,再将其变为单位向量,就有:

如下图3.5所示,他描述了利用三维空间中的三个线性无关向量求解出三个彼此正交向量的过程,也就是我们讲解的施密特正交化的过程。

图3.5  正交向量的求解过程

最终,如果我们将其扩展到一般化的问题:即求解任意个标准正交向量的计算问题,那么本质上就是一个不断迭代的过程,每一个向量减去其在已经求解出的所有正交向量上的投影,就得到了一个新的正交向量,最终将得到的每一个正交向量除以自己的模长,就得到了一组标准正交向量。

3.3.5 
  举例说明

我们来举一个实际的例子,在三维空间中有三个向量,其中向量,向量,向量,我们依据这三个已知的一般向量来求解出空间中的一组标准正交向量。

我们直接按照上面的方法,先依次求解出一组正交向量:

(1)直接令向量等于向量a


(2)向量b减去其在向量上的投影,得到第二个垂直向量。


(3)向量c减去其在向量和向量上的投影,得到第三个垂直向量。


最后,我们将求得的向量,向量和向量标准化,得到一组标准正交的向量,显然他们的模长均为1:

在这一章的开头,我们介绍了两个实际的工程问题:一个是如何求取无解方程组的近似解;另一个是如何用直线去拟合空间中的一组不共线的点。这两个问题都有一个共同之处,那就是问题的背景都是在无法求得精确解的条件下去展开阐述的,而最终都是运用最小二乘法解决了实际问题。

在这两个实际问题中,问题都被抽象成了对矩阵乘法Ax=b的分析探讨,该式子无解的本质就是由于在矩阵A的目标空间中,向量b不在矩阵A的列空间上,因此在原空间中找不到对应的解向量x

由此,我们的处理方法就是在矩阵A的列空间中去寻找与向量b距离最近的向量,从而去近似的求取最接近的解。

这里的核心方法就是让向量b向子空间(这里是矩阵A的列空间)中进行投影。我们已经讲解了任意向量向指定子空间进行投影的原理和方法,推导出了相关的通用公式,并且通过观察公式的结构知道了一个用于简化运算的方法,即:选取一组标准正交向量作为描述这个子空间的一组基。从公式中我们就能很容易的看出,整个运算的过程被大大的简化了。

那么关键问题是如何快速的成功获取任意子空间中的一组标准正交向量?这一小节我们解决了这个问题。我们通过施密特正交化的方法,就能将子空间里的任意一组线性无关的向量转换成一组标准正交向量。


往期精彩回顾
前言
1.1 描述空间的工具:向量
1.2 基底构建一切,基底决定坐标
1.3 矩阵,让向量动起来
1.4 矩阵乘向量的新视角:变换基底
2.1 矩阵:描述空间中的映射
2.2 追因溯源:逆矩阵和逆映射
3.1 投影,寻找距离最近的向量
3.2 深入剖析最小二乘法的本质



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








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



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