月度归档:2022年10月


第7章 矩阵分解的应用

矩阵分解的过程是对数据的压缩,期间通过点积运算,把数据之间的关系,通过几个更简单的矩阵来呈现,因此可以得到更加精炼的表示并去除掉一些干扰和异常。其中SVD在信息检索(隐性语义索引)、图像压缩、推荐系统、目标检测、金融服务等领域都有应用

7.1 SVD应用于推荐系统

推荐系统中往往需要计算物品之间(或用户之间)的相似度,然后把相似度最大值给用没有评分的物品,以此作为对用户对新物品的喜爱程度。
但物品与用户构成的矩阵通常较大而且稀疏,直接基于原矩阵计算物品或用户相似度,效率和效果都不很理想,所以很多专家开始寻找其他方法,其中SVD或改进版本,经实践检验,不失为一个较好方法。具体做法如下:
(1)假设物品-用户矩阵为A

(2)对A进行SVD

(3)定义计算物品之间相似度的函数

(4)计算压缩后的V(该矩阵对应物品信息),并计算物品2与其它物品之间的相似度。
A=U\Sigma V^T 可得V=A^T U\Sigma

运行结果:
物品2与物品0的相似度:0.9999996158310511
物品2与物品1的相似度:0.999999886642839
物品2与物品3的相似度:0.5092740977256969
物品2与物品4的相似度:0.5100370458545834
物品2与物品5的相似度:0.5109165651201468
物品2与物品6的相似度:0.5053846892190899
物品2与物品7的相似度:0.999381759332992
物品2与物品8的相似度:0.9999915344456692
物品2与物品9的相似度:0.5111029802612934
物品2与物品10的相似度:0.5691678300499748

采用SVD方法计算物品之间的相似度简单高效,特别适合一些大又稀疏的矩阵。如果要计算用户之间的相似度,可以利用U矩阵。

7.2 SVD应用于图像压缩

利用公式:
A_{m\times n}=U_{m\times m} \Sigma_{m\times n} V_{n\times n}^T\approx U_{m\times k} \Sigma_{k\times k} V_{k\times n}^T
对原图进行压缩,选择k\lq min(m,n)实现对图像的压缩。具体步骤如下:
(1)导入需要的库

(2)可视化原图(大家可用自己的图替换)

运行结果:
(414, 500, 3)

(3)对图像进行压缩
该图片的通道数为3,说明是一张彩色图像。对彩色图像进行SVD时,分别对R、G、B三个通道进行。

(4)运行

运行结果

这里取前10个奇异值,得到保留原图像的信息量达98%。

7.3 SVD目标检测中

在Fast R-CNN目标检测或图像处理中,输入或输出图像像素一般较大,而且要处理的图像很多,如果用全连接,则参数量将非常大。这时我们可以采用矩阵压缩技术,这种压缩,既能保留原图像的巨大部分信息,又可大大降维矩阵的维度,从而大大降低计算量。如下图所示。
其中k\ll min(n,m)
对y=Wx中权重参数矩阵W用UΣV^T替换,即:
y=Wx\approx U\Sigma_k V^T x=U(\Sigma_k V^T x)
从上式可以很容易的看出,用两个全连接层近似替代一个全连接层,两个全连接层的参数分别为\Sigma_k V^T和U,如下图所示:
当k比较小时,如k\ll min(n,m),替换后的参数将由m\times n降低到k(m+n),计算量也降低不少。

SVD应用非常广泛,如利用视频中背景与前景变化情况,可用SVD从视频中删除背景
在NLP领域,可用上下词生成的共现矩阵,实现Wword Embedding功能等等。

6.3 PCA

6.3.1概述

主成分分析方法 (Principal Component Analysis,简称PCA)是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。
PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,从而实现对数据特征的降维处理。
总之,主成分分析算法的主要目标就是使在新坐标系投影后,各特征的方差最大化,特征之间最小化或为0。如果把各特征进行去中心化之后,XX^T对称矩阵对角线上的值正好是个特征的方差,其它值为协方差。
如何实现上述目标?级找到一个变换使之变换后的方差最大?根据特征值分解可知,对称矩阵XX^T实现对角化,对角化上的特征值代表XX^T的信息量,对这些特征值进行排序后,就可获取较大一些特征值,而我们要找的这个变换就是由对称矩阵XX^T的特征向量构成的式(6.2)中矩阵Q。

6.3.2基于特征值分解协方差矩阵实现PCA算法

输入:数据集X=[x_1,x_2,\cdots,x_n] ,需要降到k维。
1) 去平均值(即去中心化),即每一位特征减去各自的平均值。这种处理方式不会改变样本的相对分布,其效果就像坐标轴进行了移动。
2) 计算协方差矩阵\frac{1}{n}XX^T,注:这里除或不除样本数量n或n-1,其实对求出的特征向量没有影响。
3) 用特征值分解方法求协方差矩阵\frac{1}{n}XX^T的特征值与特征向量。
4) 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵Q。
5) 将数据转换到k个特征向量构建的新空间中,即Y=QX
例1:设X=\left(\begin{matrix}-1&-1&0&2&0 \\ -2&0&0&1&1\end{matrix}\right)使用PCA方法进行降维。
解:
(1)去中心化
对每个特征(这里是x行、y行)去中心化,计算的每个特征的均值都是0.
(2) 计算协方差矩阵

(4)把数据转换到k个特征向量构建的新空间中
这里我们取Q中第1行\left(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}\right)乘以原数据得到:
这个变换把原来不一条直线上的5个点,映射到一条直线上,即把2维变为1维,这个变换过程可用下图直观表示:

新生成的坐标
\left(\frac{-3}{\sqrt{2}},\frac{-1}{\sqrt{2}},0,\frac{3}{\sqrt{2}},\frac{1}{\sqrt{2}}\right)就是原来的5个坐标在单位向量\left(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}\right)上的投影。

6.3.3基于SVD分解协方差矩阵实现PCA算法

当矩阵X维度较大时,计算协方差矩阵XX^T还是比较耗资源,这种情况下是否有更好的方法呢?针对这种情况,我们知道SVD中U(即左奇异矩阵)就是由XX^T的特征向量构成的,为此,我们可以使用SVD的方法求协方差矩阵的特征值和特征向量,其它步骤与用特征值方法类似,具体步骤如下:
输入:数据集X=[x_1,x_2,\cdots,x_n],需要降到k维。
1) 去平均值,即每一位特征减去各自的平均值。
2) 计算协方差矩阵。
3) 通过SVD计算协方差矩阵的特征值与特征向量。实际上,PCA仅仅使用了我们SVD的左奇异矩阵。
4) 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
5) 将数据转换到k个特征向量构建的新空间中。
例2:用SVD方法解例1.
为方便起见,这里我们使用Python来实现这个过程。

运行结果:
X: [[-1. -1. 0. 2. 0.]
[-2. 0. 0. 1. 1.]]
U: [[-0.70710678 -0.70710678]
[-0.70710678 0.70710678]]
U1: [-0.70710678 -0.70710678
Out[23]:
array([2.12132034,0.70710678,0.,-2.12132034,-0.70710678])
这里相当于使用基向量\left(\frac{-1}{\sqrt{2}},\frac{-1}{\sqrt{2}}\right)与X进行内积,得到结果为:
array([2.12132034,0.70710678,0.,-2.12132034,-0.70710678])
如果把小数用平方根表示这个结果就是:
(\frac{3}{\sqrt{2}},\frac{1}{\sqrt{2}},0,\frac{-3}{\sqrt{2}},\frac{-1}{\sqrt{2}})
X与基向量\left(\frac{-1}{\sqrt{2}},\frac{-1}{\sqrt{2}}\right)的映射关系如下图所示。与例1相比,只是新轴的方向相反而已。

从例1和例2来看,这两种方法可谓异曲同工!

【注意】
左奇异矩阵可以用于对行数的压缩;右奇异矩阵可以用于对列(即特征维度)的压缩。我们用SVD分解协方差矩阵实现PCA可以得到两个方向的PCA降维(即行和列两个方向)。

6.2奇异值分解

有关奇异值分解的几个问题
(1)可分解任何形状的矩阵?
(2)如何分解?分解步骤如何?
(3)特征值的信息量如何度量?
(4)如何利用特征值实现矩阵的近似表示?
(5)奇异值分解还存在哪些不足?如何克服这些不足?
下面就这些问题逐一进行说明

6.2.1 分解矩阵的形状

特征值分解的矩阵都是方阵,有些还需要是对称方阵。奇异值分解,没有这个限制,非方阵也可以。所以奇异值分解的应用非常广泛。

6.2.2 矩阵奇异值分解推导详细过程

根据上节特征值分解可知,对称矩阵A可以分解为:
A=Q\wedge Q^T=Q\wedge Q^{-1}\tag{6.3}
其中矩阵Q是矩阵A的正交化的特征向量,\wedge为对角矩阵,其值为A的特征值。
由式(6.3)可得:
AQ=Q\wedge\tag{6.4}
正交矩阵Q由A的一组特征向量构成,即;
Q=[x_1,x_2,\cdots,x_n]
不妨把[x_1,x_2,\cdots,x_n]作为一组正交基,因此特征向量x可用这组正交基表示:
x=[x_1,x_2,\cdots,x_n][a_1,a_2,\cdots,a_n ]^T

由式(6.3)可得:

我们可以以2x2矩阵为例,把这个过程用几何图形表示如下:

整个变换过程中,矩阵A特征值分解的本质是把向量x由一组正交基映射到另一组正交基上。
由此我们得到启发,对于一般矩阵A,其形状为mxn,如果能实现这个过程,是否也可以进
行类似于特征值分解?为此,我们假设n为空间已找到一组正交交基:
[v_1,v_2,\cdots,v_n]
矩阵A把这组正交基映射为:
[Av_1,Av_2,\cdots,Av_n]
如果要使映射后的这组向量成为一组正交向量,则需要满足如下条件,当i≠j时
由此可得:

6.2.3 SVD的简单实例

例1: 设A=\left(\begin{matrix}0&1 \\ 1&1\\ 1&0\end{matrix}\right),对矩阵A进行奇异值分
解:
对角矩阵\sum=\left(\begin{matrix}\sqrt{3}&0 \\ 0&1\\ 0&0\end{matrix}\right)
可以验证
U\sum V^T=A
SVD分解矩阵A的步骤
(1) 求AA^T的特征值和特征向量,用单位化的特征向量构成 U。
(2) 求A^TA的特征值和特征向量,用单位化的特征向量构成 V。
(3) 将AA^T或者A^TA的特征值求平方根,然后构成 Σ。
3)用python实现这个实例

打印结果:
A: [[0 1]
[1 1]
[1 0]]
U: [[-4.08248290e-01 7.07106781e-01 5.77350269e-01]
[-8.16496581e-01 7.45552182e-17 -5.77350269e-01]
[-4.08248290e-01 -7.07106781e-01 5.77350269e-01]]
V: [[-0.70710678 -0.70710678]
[-0.70710678 0.70710678]]
d: [1.73205081 1. ]
进行还原

运行结果
P*D*Q: [[ 1.02120423e-16 1.00000000e+00]
[ 1.00000000e+00 1.00000000e+00]
[ 1.00000000e+00 -2.11898069e-16]]

奇异值分解函数:
np.linalg.svd(a, full_matrices=True, compute_uv=True, hermitian=False)
参数说明:
a : 是一个形如(M,N)矩阵
full_matrices:的取值是为False或者True,默认值为True,这时u的大小为(M,M),vh的大小为(N,N) 。否则u的大小为(M,K),vh的大小为(K,N) ,K=min(M,N)。
compute_uv:取值是为False或者True,默认值为True,表示计算u,s,vh。为0的时候只计算s
hermitian:如果为 True,则假定 a 为 Hermitian(如果为实值,则为对称),从而可以更有效地找到奇异值。默认为False
返回值:
u: { (…, M, M), (…, M, K) } 数组
s: (…, K) 数组
vh: { (…, N, N), (…, K, N) } 数组
其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。
s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。

6.2.4 特征值的信息量如何度量?

在奇异值分解中,较大的奇异值会决定原矩阵的“主要特征”,如何根据A的奇异值分解来度量特征值的信息量。可以用矩阵A的F-范数的平方来
\left(||A||_F^2\right)衡量。
假设矩阵A的秩为k,矩阵U的前k个正交向量为[u_1,u_2,\cdots,u_k] ,矩阵V的前k个正交向量为[v_1,v_2,\cdots,v_k],内积\left(\delta_i u_i v_i^T,\delta_j u_j v_j^T \right)=0,i\neq j
A=\sum_{i=1}^k \delta_i u_i v_i^T
||F||_F^2=\sum_{i=1}^k \delta_i^2
具体计算时一般选择前r\left(r\leq k\right)\delta_i^2之和与\left(||A||_F^2\right)的比是否达到一个值(如90%)。

6.2.5矩阵的近似表示

奇异值与特征值得意义类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。
A_{m\times n}=U_{m\times m}\sum_{m\times n} V_{n\times n}^T\approx U_{m\times k}\sum_{k\times k} V_{k\times n}^T
这个压缩或还原过程,用下图可表示更直观:
由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引。

6.2.6 SVD的改进算法

 数据方面的改进:
对数据进行规范化
 算法方面的改进:
SVD针对的矩阵A,很多是稀疏矩阵,其中有很多0,尤其在推荐需求的场景中。SVD通过过分依赖已有数据,这容易造成过拟合。为改进这个不足,人们开发出SVD的改进算法,
如RSVD、SVD++等等,大家有兴趣可参考相关论文。

第6章 矩阵分解

6.1特征值分解概述

一个矩阵的特征值非常重要,如何获取这些特征?通过解特征方程是一种方法,但效率比较低,如果矩阵A的维度较大,使用这种方法就如此,是否有更好的方法呢?接下来我们介绍几种通过矩阵分解来获取特征值的方法。

6.1.1 特征值分解

特征值分解(Eigen Value Decomposition,简称EVD),又称谱分解(Spectral decomposition)是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。需要注意只有对可对角化矩阵才可以施以特征分解。本节讨论的矩阵除非特别说明一般指方阵。
假设矩阵A有n个线性无关的特征向量[v^1,v^2,\cdots,v^n],它们对应的特征值为[\lambda_1,\lambda_2,\cdots,\lambda_n],并按从大到小进行排序。
把这n个线性无关的特征向量组合成一个新方阵,每一列是一个特征向量。
V=[v^1,v^2,\cdots,v^n]
用特征值构成一个n阶对角矩阵,对角线的元素都是特征值。
\begin{equation}\wedge=\begin{bmatrix}\lambda_{1} & & & \\ & \lambda_{2} & & \\ & & \ddots &\\ & & &\lambda_{n}\end{bmatrix}\end{equation}
那么,A的特征分解可表示为:
A=V\wedge V^{-1}\tag{6.1}
注意,并不是所有方阵都能进行特征值分解,一个n阶方阵A能进行特征值分解的充分必要条件是它含有n个线性无关的特征向量。
特征值的大小与权重密切相关,特征值大的说明在矩阵A的权重就大。利用这个特性可以对矩阵A进行压缩或简化。

6.1.2 对称矩阵的分解

如果n阶矩阵A为实对称矩阵,可以对A进行特征值分解为:
A=Q\wedge Q^T\tag{6.2}
其中Q为正交矩阵,它的列由A的正交处理后的特征向量,Λ是A的特征值构成的对角矩阵。
例1 :判断矩阵A=\left(\begin{matrix}-1&1&0 \\ -4&3&0 \\ 1&0&2\end{matrix}\right)是否可以进行特征值分解?
解:具体 步骤如下:
(1)创建A的特征方程,并求出特征值
解得:\lambda_1=2,\lambda_2=\lambda_3=1
(2)把特征值代入方程组:\left(A-\lambda E\right)x=0,求出对应的特征向量。
\lambda=2时,解方程(A-2E)x=0,得x_1=0,x_2=0,x_3=1,对应特征向量v1=\left(\begin{matrix}0 \\ 0 \\ 1\end{matrix}\right)
\lambda=1时,方程(A-E)x=0的秩为2.只有一个特征向量,如v2=\left(\begin{matrix}-1 \\ -2 \\ 1\end{matrix}\right),故矩阵A没有3个线性无关的特征向量。所以A不能进行特征值分解。

第5章 特征值和特征向量

特征值(Eigenvalue,又称为本征值)与特征向量(Eigenvector,又称为本征向量)决定了矩阵的很多特性。

5.1 特征值和特征向量的定义

设A是一个n阶方阵,如果存在实数λ和n维的非零向量x,满足
Ax=\lambda x \tag{5.1}
那么把数λ称为方阵A的特征值,向量x称为属于特征值λ的特征向量。
对式(5.1)进行恒等变换,把\lambda x移到左边,得到下式:
Ax-\lambda x=0 \tag{5.2}
为便于计算,把\lambda x写成\lambda Ex,其中E是n阶单位矩阵。式(5.2)可写成:
Ax-\lambda Ex=0
提取向量x,可得下式:
(A-\lambda E)x=0 \tag{5.3}
其中\left(A-\lambda E\right)称为A的特征矩阵,要使式(5.3)有非零解,特征矩阵的行列式为0(如果行列式不等于0,x只要0解)
令特征矩阵构成的行列式等于0得:

|A-\lambda E| \tag{5.4}


式(5.4)称为特征方程。通过特征方程可以求出特征值,把求出的特征值代入式(5.3)可以求出特征值对应的特征向量。

5.2 求特征值与特征向量的实例

例1:求矩阵A的特征值、特征向量。
\left(\begin{matrix}1&2 \\ 0 &{-1} \end{matrix}\right)
解:
(1)生成特征方程,即:|A-\lambda E|=0,代入矩阵A的值,得:
\left[\left(\begin{matrix}1&2 \\ 0 &{-1} \end{matrix}\right)-\lambda \left(\begin{matrix}1&0 \\ 0&1 \end{matrix}\right)\right]=0
化简得:
\left[\left(\begin{matrix}1&2 \\ 0 &{-1} \end{matrix}\right)-\left(\begin{matrix}\lambda &0 \\ 0&\lambda\end{matrix}\right)\right]=0
\left[\begin{matrix}{1-\lambda}&2 \\ 0 &{-1-\lambda} \end{matrix}\right]=0
由此可得:
(1-\lambda)(-1-\lambda)=0
解上式方程,可得:特征值\lambda =1\lambda =-1
(2)把特征值\lambda =1,代入下式:

用python实现以上计算过程:

运行结果:
特征值: [ 1. -1.]
特征值: [ 1. -1.]
特征向量构成的矩阵:
[[ 1. -0.70710678]
[ 0. 0.70710678]]
【说明】
在numpy.linalg模块中:
eigvals() 计算矩阵的特征值
eig() 返回包含特征值和对应特征向量的元组

5.3 点积的几何意义

这里矩阵A的功能有点特殊,竟然把一个向量变为一个仅相差一个乘数λ的向量。
矩阵与向量相乘(或矩阵与矩阵相乘)的具体功能或其几何意义是什么?
其实不管是向量和向量的点积,还是矩阵与向量的点积都是点积运算。只要理解了点积运算的本质,其它都如此。为此我们先看点积运算的几何意义。
1)向量与向量点积运算几何意义
假设有两个向量a,b:
a=[a_1,a_2,\cdots,a_n]
b=[b_1,b_2,\cdots,b_n]
在欧几里得空间中,向量a、b的点积可以直观地定义为
a\cdot b=|a||b|cos\theta
这里|a|表示a的长度,θ为a与b之间的夹角。其相应的几何表示为:

如果b为单位向量,即|b|=1,则
a\cdot b=|a|cos\theta =a_0
此时a与b的内积就是a在b上投影。
实际上我们的向量a表示就是它在对应正交基上的投影。假设e=[e_1,e_2,\cdots,e_n]R^n空间中一个标准正交基。则有
a=[a_1,a_2,\cdots,a_n ]=a\cdot e
其中a_i就是a在e_i上的投影。
如果向量a、b互相垂直,那么它们的内积为0,如果它们在一条直线上且同方向,它们的内积最大(假设a、b的模都为1)。由此可知,向量的内积实际上说明了这两个向量之间的相似程度。
【说明】点积的几何解释通常只适用于R^n (n\le 3)。在高维空间,其他的域或模中,点积只有一个定义,那就是:
<a,b>=\sum_{i=1}^n {a_i b_i}

2)矩阵与向量点积的几何意义
(1)如果A=\left(\begin{matrix}2&0 \\ 0&1 \end{matrix}\right),X=\left(\begin{matrix}x_1 \\ x_2\end{matrix}\right), 矩阵A与向量x的点积,通过矩阵A作用后,X变为X^1,为:
AX=\left(\begin{matrix}2&0 \\ 0&1 \end{matrix}\right)\left(\begin{matrix}x_1 \\ x_2\end{matrix}\right)=\left(\begin{matrix}2x_1 \\ x_2\end{matrix}\right)
相当于把特征向量X在x_1方向上进行了拉伸,拉伸了2倍,x_2方向不变。如下图所示。


相当于把向量X进行顺时针旋转\frac {\pi}{2}度,如下图所示。

这里是旋转\frac {\pi}{2},实际上可以选择任何角度\theta,这时只有把矩阵A定义为
\left(\begin{matrix}{cos\theta}&{sin\theta} \\ {-sin\theta} &{cos\theta} \end{matrix}\right)
由上可知,作为n阶矩阵这里就相当于一个线性变换(拉伸或旋转),矩阵这种作用在机器学习中非常普遍。
回到特征值的定义:Ax=λx可以看出,特征向量通过矩阵A的线性变换之后仍然处于同一条直线上,只是对特征向量x的进行拉伸,拉伸比例就是特征值λ。

5.4 内积的内涵

根据特征向量的定义,如果x为矩阵A的特征向量,则有:
Ax=λx
Ax是内积运算,而内积运算实际上反映了它们之间一种相似程度,而这个相似程度实际已经用特征值λ表示了。所以我们可以说,正是因为正在内积运算才能使特征值和特征向量揭示矩阵A本身的很多特性,这或许就是特征(Eigen,其含义为本身的意思)来描述这种情况的原因之一。通过矩阵A的特征值,我们可以发现很多有趣的情况,如对特征值进行降序,特征值较大可代表矩阵A的信息量就大,信息量还可进行量化。
其实在机器学习领域,很多数据集都可以看成是矩阵,如一张图像、一份结构化数据、一篇文章等等,通过数字化后,实际都是一个矩阵。而特征值或特征向量能很好代表矩阵的特征,所以,研究矩阵的特征值就显得非常有意义了。如何找出矩阵的特征值呢?方法很多,其中矩阵分解是常用方法之一。

第4章 特殊矩阵

上一节我们介绍了一般矩阵的运算,实际上在机器学习或深度学习中,我们还经常遇到一些特殊类型的矩阵,如可逆矩阵、对称矩阵、对角矩阵、单位矩阵、正交矩阵等等。这些特殊矩阵有特殊属性,下面我们逐一进行说明。

4.1可逆矩阵

1)方阵的定义:
如果矩阵的行数与列数相等,则称为方阵。n×n的方阵称为n阶矩阵。
2)逆矩阵的定义:
设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得:AB=BA=E(单位矩阵),则称A可逆,并称B是A的逆矩阵。A的逆矩阵记为A^{-1}。这里B=A^{-1}
3)逆矩阵的性质:
(1)A与B的地位是平等的,故A、B两矩阵互为逆矩阵,也称A是B的逆矩阵。
(2)单位矩阵E是可逆的,即E^{-1}=E
(3)如果A可逆,那么A的逆矩阵是唯一的。
证明:设B、C都是A的逆矩阵,则有B=BE =B(AC)=(BA)C=EC=C
(4)若矩阵A可逆,则A^{-1}也可逆,且\left(A^{-1}\right)^{-1}=A
(5)若矩阵A可逆,则A^T也可逆,且\left(A^T\right)^{-1}=\left(A^{-1}\right )^T
(6)若矩阵A、B可逆,则AB也可逆,且\left(AB\right)^{-1}=B^{-1} A^{-1}
4)定理

4.2对角矩阵

对角矩阵只有在主对角线上才有非零元素,其余都是0。从形式上来看,如果A为对角
矩阵,当且仅当对所有i≠j,A_{i,j}=0。对角矩阵可以是方阵(行数等于列数)也可以不是方阵,如下矩阵,就是一个对角矩阵。
X=\left[\begin{matrix} 1&0\\0&2\\0&0\end{matrix}\right]
对角矩阵有非常好的性质,这些性质使很多计算非常高效,在机器学习、深度学习中经常会遇到对角矩阵。
对于对角矩阵为方阵的情况,我们可以把对角矩阵简单记为:
diag(v)=diag([v_1,v_2,\cdots,v_n]^T) \tag{2.14}
其中v=[v_1,v_2,\cdots,v_n]^T是由对角元素组成的向量,现在我们看一下对角矩阵在一些计算方面的奇妙之处。
假设现有向量v=[v_1,v_2,\cdots,v_n]^T,x=[x_1,x_2,\cdots,x_n]^T,则满足:
diag(v)x=v\odot x
diag(v)^{-1}=diag([1/v_1,1/v_2,\cdots,1/v_n]^T)
从上面两个式子可以看到对角矩阵的简洁高效。

4.3对称矩阵

对称矩阵,对于任意一个n阶方阵A,若A满足:A=A^T成立,则称方阵A为对称矩阵。
对称矩阵的主要性质:
(1)对称矩阵的和、差、数乘还是对称矩阵
(2)n阶实对称矩阵A,一定存在n阶正交矩阵P使:
\begin{equation}P^{-1}AP=P^TAP=\begin{bmatrix}\lambda_{1} & & & \\& \lambda_{2} & & \\&& \ddots &\\& & &\lambda_{n}\end{bmatrix}=\wedge\end{equation}
【说明】因P为正交矩阵,故其逆矩阵等于其转置。
而且对角矩阵\wedge中的n个对角元\lambda_1,\lambda_2,\cdots, \lambda_n就是A的n个特征值。可用归纳法证明,有情趣的读者可尝试证明一下。
例1:如何将下列对称矩阵正交化为对角矩阵?
特征分解可用Python的线性代数库(linalg)提供的eig函数来实现,函数的输入为需特征分解的矩阵,输出为所有特征值,以及对应的单位化的特征向量。
上面这个计算过程可用python简单实现

运行结果:
特征值构成的向量: [-1. 2. -1.]
单位化的特征向量: [[-0.81649658 0.57735027 0.19219669]
[ 0.40824829 0.57735027 -0.7833358 ]
[ 0.40824829 0.57735027 0.59113912]]

4.4正交矩阵

对于任意一个n阶方阵A,若矩阵的行向量之间互相正交,且行向量都是单位向量,即满足:
AA^T=A^T A=E \tag{2.15}
则称矩阵A是一个正交矩阵。由上式可以看出,若A是一个正交矩阵,则可推出A^T=A^{-1}
补充向量正交、单位向量的定义:
单位向量
任意给定的向量ν,若其L^2范数为1,即||v||_2=1,则称向量ν为单位向量。
正交向量
假设现有向量v=[v_1,v_2,\cdots,v_n]^T,x=[x_1,x_2,\cdots,x_n]^T,则满足
v^Tx =0
成立,则称向量v和向量x正交。这里v^T与x表示向量的点积运算。
正交矩阵的性质:
(1)正交矩阵的列/行向量组为标准正交向量组。
(2)正交矩阵的特征值只能为±1。