">

编程数学之矩阵

摘要:数学在计算机科学、机器学习、深度学习、自然语言处理等多个领域占据比较重要的位置。比如:特征值和特征向量在PCA降维中会使用;均值在回归算法中估计公式参数中使用;期望和均值在回归方程应用;余弦定理求相似度中运用;拉格朗日定理在支持向量机中使用;求导在解决梯度下降中使用;矩阵和向量在数据格式转换和预处理中运用等等。还有在算法建模、参数设置、验证策略、识别欠拟合和过拟合等方面依然应用广泛。本系列数学文章旨在带领大家快速回顾常用知识,重在理解。(本文原创,转载必须注明出处.)


矩阵定义

矩阵定义

数学上,一个m×n的矩阵是一个由m行n列元素排列成的矩形阵列。矩阵里的元素可以是数字、符号或数学式。以下是一个由6个数字元素构成的2行3列的矩阵:

大小相同(行数列数都相同)的矩阵之间可以相互加减,具体是对每个位置上的元素做加减法。矩阵的乘法则较为复杂。两个矩阵可以相乘,当且仅当第一个矩阵的列数等于第二个矩阵的行数。矩阵的乘法满足结合律和分配律,但不满足交换律。

矩阵的理解

将一些元素排列成若干行,每行放上相同数量的元素,就是一个矩阵。这里说的元素可以是数字,例如以下的矩阵:

排列成的形状是矩形,所以称为矩阵。矩阵一般用大写拉丁字母表示,一般用方括号或圆括号括起。以上的矩阵A是一个4行3列的矩阵。

行数是1或列数是1的矩阵又可分别称为行向量和列向量。矩阵的任一行(列)都是一个行(列)向量,例如矩阵A的第一行\({\begin{bmatrix}9&13&5\end{bmatrix}}\)就是一个行向量。行(列)向量可以看成一个向量,因此可以称矩阵的两行(列)相等,或者某一行等于某一列,表示其对应的向量相等。

增广矩阵

矩阵的一个重要用途是解线性方程组。线性方程组中未知量的系数可以排成一个矩阵,加上常数项,则称为增广矩阵。

矩阵表示

一个矩阵A从左上角数起的第i行第j列上的元素称为第i,j项,通常记为Ai,j、Aij、ai,j或A[i,j],在上述例子中A[4,3] = 7。


矩阵运算

矩阵加法

定义:m×n矩阵A和B的和,A+B为一个m×n矩阵,其中每个元素是A和B相应元素的和,\((A+B)_{ij}=A_{i,j}+B_{i,j}\),其中1 ≤ i ≤ m , 1 ≤ j ≤ n.

例子:

运算律(A,B,C都是同型矩阵):

\( A+B=B+A \)

\((A+B)+C=A+(B+C)\)

应该注意的是只有同型矩阵之间才可以进行加法

矩阵减法

定义:m×n矩阵A和B的差,A-B为一个m×n矩阵,其中每个元素是A和B相应元素的差,\( (A-B)_{ij}=A_{i,j}-B_{i,j}\),其中1 ≤ i ≤ m , 1 ≤ j ≤ n.

例子:

矩阵数乘

定义:标量c与矩阵A的数乘:cA的每个元素是A的相应元素与c的乘积,\((cA)_{ij}=cA_{i,j}\)

例子:

运算律:

  • \((\lambda\mu )A=\lambda(\mu A)\)

  • \((\lambda+\mu )A=\lambda A+\mu A\)

  • \(\lambda(A+B)=\lambda A+\lambda B\)

矩阵转置

定义:m×n矩阵A的转置是一个n×m的矩阵,记为\(A^T\)(其中的第i个行向量是原矩阵A的第i个列向量;或者说,转置矩阵\(A^T\)第i行第j列的元素是原矩阵A第j行第i列的元素,\((A^T)_{i,j}=A_{j,i}\)

例子:

运算律:

  • \((A^T)^T=A\)

  • \((\lambda A)^T=\lambda A^T\)

  • \((A+B)^T=B^T+ A^T\)

共轭矩阵

定义:矩阵的共轭定义为:\( A_{i,j}= \overline A_{ij} \)。

例子:

一个2×2复数矩阵的共轭如下:

则A的共轭矩阵是:

线性方程组

矩阵乘法的一个基本应用是在线性方程组上。线性方程组是方程组的一种,它符合以下的形式:

其中的\( a{1,1},a{1,2} \) 以及\( b{1,1},b{1,2}\)等等是已知的常数,而\( x_1,x_2\)等等则是要求的未知数。运用矩阵的方式,可以将线性方程组写成一个向量方程:\( \mathbf {A} \mathbf {x} =\mathbf {b} \)

其中,A是由方程组里未知量的系数排成的m×n 矩阵,x是含有n 个元素的行向量,b 是含有m 个元素的行向量。

这个写法下,将原来的多个方程转化成一个向量方程,在已知矩阵A和向量b的情况下,求未知向量x。


行列式

方块矩阵

方块矩阵是行数与列数相同的矩阵称为方块矩阵,简称方阵。如下表示:

逆矩阵

方阵A称为可逆或非奇异的,如果存在另一个方阵B,使得\(AB=I_n\)成立。这时候可以证明也有\(BA=I_n\)成立,可将矩阵B称为A的逆矩阵。一个矩阵A的逆矩阵如果存在的话,就是唯一的,通常记作\(A^{-1}\)。

矩阵的迹

矩阵A的元素Ai,i称为其主对角线上的元素。方块矩阵A的所有主对角线元素之和称为它的迹,写作tr(A)。

例子:

A的迹是\(tr(A)=a_{1,1}a_{2,2}\)

矩阵的迹具备以下特征:

尽管矩阵的乘法不满足交换律,方阵相乘时交换顺序会导致乘积变化,但它们的迹不会变,即:\(tr(AB)=tr(BA)\).矩阵转置的迹等于其自身的迹,\(tr(A)=tr(A^T)\)

对角矩阵

如果一个方阵只有主对角线上的元素不是0,其它都是0,那么称其为对角矩阵。如下所示:

上三角矩阵

如果主对角线下方的元素都是0,那么称为上三角矩阵。如下所示:

下三角矩阵

如果主对角线上方的元素都是0,那么称为下三角矩阵,如下所示:

行列式

1×1方阵的行列式为该元素本身。


2×2方阵,其行列式用主对角线元素乘积减去次对角线元素的乘积。


3×3阶方阵


三阶矩阵发现\(a{12}\)的对角线少一部分(也就是\(a{23}\)的右下部分缺失)。一种方法是copy三个完全一样的矩阵做补充。

另一种方式就是利用代数余子式来计算:

在一个n阶行列式A中,把(i,j)元素\(a_{ij}\)所在的第i行和第j列划去后,留下的n−1阶方阵的行列式叫做元素\(a_{ij}\)的余子式,记作\(M_{ij}\)。代数余子式:\( A_{ij}=(-1)^{i+j}M_{ij} \).注意:代数余子式是个数值!

下图方框里计算的值便是\(a_{11}a_{12}\)的代数余子式\(M_{11}M_{12}\)

n阶的行列式等于它的任意一行(或列)的各元素与其对应的代数余子式乘积之和。
对于任意一列:

对于任意一行:

所以上面三阶方阵的行列式A就是:


特征值和特征向量

n×n的方块矩阵A的一个特征值和对应特征向量是满足\(\mathbf {Av} =\lambda \mathbf {v} \)的标量\(\lambda \)以及非零向量\(\mathbf {v}\)。特征值和特征向量的概念对研究线性变换很有帮助。一个线性变换可以通过它对应的矩阵在向量上的作用来可视化。一般来说,一个向量在经过映射之后可以变为任何可能的向量,而特征向量具有更好的性质。假设在给定的基底下,一个线性变换对应着某个矩阵A,如果一个向量x可以写成矩阵的几个特征向量的线性组合:\( \mathbf{x} = c_1 \mathbf{x}_{\lambda_1}+c_2\mathbf {x}_{\lambda_2}+\cdots +c_k\mathbf{x}_{\lambda_k} \)

其中的\( \mathbf{x}_{\lambda_i}\) 表示此向量对应的特征值是\(\lambda_i\),那么向量x经过线性变换后会变成:\({\displaystyle \mathbf {Ax} =c_{1}\lambda_{1}\mathbf {x}_{\lambda_{1}}+c_{2}\lambda_{2}\mathbf {x}_{\lambda_{2}}+\cdots +c_{k}\lambda_{k}\mathbf {x}_{\lambda_{k}}} \).可以清楚地知道变换后向量的结构。另一个等价的特征值定义是:标量\(\lambda\)为特征值,如果矩阵\( \mathbf{A} -\lambda {\mathsf {I}}_n \) 是不可逆矩阵。根据不可逆矩阵的性质,这个定义也可以用行列式方程描述:\(\lambda\)为特征值,如果\(\det(\lambda {\mathsf {I}}_n-\mathbf {A} )=0.\)
这个定义中的行列式可以展开成一个关于\(\lambda\)的n阶多项式,叫做矩阵A的特征多项式,记为\(p_A\)。特征多项式是一个首一多项式(最高次项系数是1的多项式)。它的根就是矩阵A特征值。哈密尔顿-凯莱定理说明,如果用矩阵A本身代替多项式中的不定元 \( \lambda\) ,那么多项式的值是零矩阵:\( p_{\mathbf {A} }(\mathbf {A} )=0 \)


参考文献

  1. Python官网
  2. 中文维基百科
  3. GitHub
  4. 图书:《机器学习实战》
  5. 图书:《自然语言处理理论与实战》

完整代码下载

源码请进【机器学习和自然语言QQ群:436303759】文件下载:自然语言处理和机器学习技术QQ交流

作者声明

本文版权归作者所有,旨在技术交流使用。未经作者同意禁止转载,转载后需在文章页面明显位置给出原文连接,否则相关责任自行承担。

白宁超 wechat
扫一扫关注微信公众号,机器学习和自然语言处理,订阅号datathinks!