评论

收藏

[python] 带你重拾线性代数

编程语言 编程语言 发布于:2021-12-31 13:42 | 阅读数:255 | 评论:0

声明:




  • 本文所有内容均来自笔者在学习中所做总结,难免会有错误,谨慎参考;
  • 本文所有内容的整理逻辑以及应用范围均只局限于机器学习相关内容,请勿延伸至其他领域;
  • 本文内容会不定期更新,总结,修改,排版,仅根据笔者所遇到的问题进行相关部分的完善;
  • 若发现错误,还望不吝赐教(留言,邮箱均可);
  • 文章内容可转载,但请注明出处;



说明:

  • 文中所有涉及到的矩阵,若未做特殊说明均为方阵
一、向量的表示方法
1.1 引言
在二维平面中,我们都知道可以用有序实数对来表示一个向量,例如:     u=(4,2)  。它表示一条从原点出发,到达点(4,2)的有向线段。如下图所示:
DSC0000.png

但是一个向量为什么可以这样表示呢?它到底有着怎样的含义?
1.2 基
从1.1我们知道,一个向量可以表示成如(4,2)这样的形式。但这是怎么来的呢?如上图所示,我们将向量     u  分别在x轴和y轴上做投影,我们发现此时我们得到了4,2这两个数,这是巧合么?不过这当然不是。其原因是因为默认情况下,我们都选择了i=(1,0)T,j=(0,1)T来当作我们的基向量;而向量     u=(4,2)  所表示的含义就是,先     i  的方向移动4个单位,再向j的方向移动2个单位,这样便得到了向量(4,2),如下图:
DSC0001.png

因此,我们称     u=(4,2)T  为     i,j  的线性组合,即     u=4⋅i+2⋅j  。同时,由于     i,j  的模长为1,且相互垂直,我们称其为标准正交基
但是,如果我们选择其它不同的基向量,又会是怎么样呢?
二、矩阵与矩阵乘法
先给出结论:矩阵的本质是表示某个线性变换的操作步骤,而矩阵的乘法就是实施这个线性变换。
2.1 矩阵的概念
上一章我们谈到了向量,知道向量其实是一组(线性无关)基的线性组合。而我们把由多个向量拼接在一起的m行n列的矩形表格称之为矩阵,若m=n,则称之为n阶矩(方)阵。
2.2 矩阵及矩阵乘法的本质
矩阵的本质是什么?下面我们通过两个例子来说明。
例1.
我们知道在平面直角坐标系中,我们默认用的基向量分别是     i=(1,0)T,j=(0,1)T  ,如下图所示:
DSC0002.png

现有向量     α=(32√,32√)  ,矩阵


     U=⎡⎣⎢⎢⎢12√12√−12√12√⎤⎦⎥⎥⎥  


则:
   β=UαT=[0,3]T 。我们发现,向量
   β 是向量
   α 逆时针旋转45度之后的结果。那么矩阵U的作用就是将原有的坐标系旋转45度吗?答案是肯定的。


矩阵U告诉我们,他的作用是将原有的坐标系
   π1 逆时针旋转45度,且旋转之后的坐标系
   π2 的基向量,在
   π1 中的表示结果分别为:


     i^=(12√,12√)T,j^=(−12√,12√)  


如下图所示:


DSC0003.png

上面说到将坐标系     π1  旋转45度后,     α  变成了     β  ,且向量     β  在     π1  中的表示方法为     (0,3)T  ,那么在     π2  中的表示方法又是什么呢?明显,     β  在     π2  中,分别向     i^,j^  投影即可得到表示方式:


     ⎡⎣i^Tj^T⎤⎦⋅[03]=⎡⎣⎢⎢⎢12√−12√12√12√⎤⎦⎥⎥⎥⋅[03]=⎡⎣⎢⎢⎢32√32√⎤⎦⎥⎥⎥  


总结就是:
   π1 中的向量
   α ,经过线性变换
   U 作用之后,变成了向量β;且变换后的向量
   β 在
   π1 中的表示方法为
   (0,3)T ,在
   π2 中的表示方法为
   (32√,32√) .
例2.
现有向量     α=(1,22√)T  ,矩阵     U=⎡⎣1012√12√⎤⎦,w=Uα=(3,2)T,UTw=(3,52√)  ,经过变换后的向量为     β  ,则有:
     π1  中的向量     α  ,经过线性变换     U  作用之后,变成了向量β;且变换后的向量     β  在     π1  中的表示方法为     (3,2)T  ,在     π2  中的表示方法为     (3,52√)  
注:基向量为单位向量
随便提一句,在PCA中,不就是把     α  直接投影到     π2  中么;所以PCA的首先就要求出表示     π2  的空间U,然后直接将     α  投影到     π2  中。
从以上我们可以知道:
(1). 线性变化是操纵空间的一种手段,而这种手段用矩阵来描述;
(2). 你所使用的变换矩阵(U)代表的是变换后的坐标系     (π2)  的基向量在当前坐标系     (π1)  下的表示方式;
(3). 矩阵U既是一种对线性变换的描述,(列向量)也是一组基向量
三、行列式




  • 方阵行列式的绝对值表示原空间经过该变换后空间被压缩的倍数;
  • 秩表示空间被压缩后剩下的维度(列空间);



四、特征向量与特征值
设A是n阶矩阵,     λ  是一个数,若存在n维非零列向量     ξ  ,使得


     Aξ=λξ(ξ≠0)(4.1)  


则称     λ  是A的特征值,     ξ  是     A  的对应于λ的特征向量.
有没有觉得奇怪?一个矩阵乘以一个向量,怎么他就等于一个数乘以这个向量了。想要回答这个问题,我们就得回想矩阵的本质了。从前面我们可以知道,矩阵的本质就是表达了一系列线性变换的信息,比如旋转,压缩等等;并且最后通过矩阵的乘法来实现这一线性变换。
而等式     (4.1)  所表示的含义就是:原空间​​π1   中存在向量       ξ   ,在经过A这个矩阵的线性作用后       ξ   这个向量仅仅只是在长度上发生了改变,变成了原来的       λ   倍,所以才有了       (4.1)   这个等式
下面看个例子:
已知     A=[1022]  ,则很容易可以计算出     A  所对应的坐标系π2(单位化)的基向量为     i^=(1,0),j^=(12√,12√)  ,且     A  的特征值特征向量分别为:


λ1=1,ξ1=(1,0)T;λ2=2,ξ2=(2,1)T


我们先不画图,通过求解出来的信息,我们就能直接得出以下信息:
(1). 坐标系     π1  下存在两个向量     ξ1,ξ2  ;
(2). 这两个向量在通过A线性变换后仅仅只是在长度上发生了变化;
(3). 特征值     λ  的大小决定向量被拉伸的倍数;
(4). 向量     ξ1  伸长1倍以后,在     π1  中的表示依然是(1,0),在     π2  中的表示为     ATξ1=(1,12√)  ;
(5). 向量     ξ2  伸长2倍以后,在     π1  中的表示是     Aξ2=(4,2)  ,在     π2  中的表示是     ATξ2=(4,62√)  
下面我们通过画图来验证:
DSC0004.png

其中黑色坐标系为     π1  ,红色坐标系为     π2  
随便说一句:这也就是在PCA中,要选择前K个最大的特征值所对应的特征向量的原因,因为这样被拉伸的长度更大,样本点才会更离散,方差才会更大。






关注下面的标签,发现更多相似文章