机器学习、深度学习的基础除了编程语言之外, 还有一个就是应用数学。一般包括线性代数
、概率论与信息论
、概率图
、数值计算与最优化
等。
一、标量、向量、矩阵和张量
1、标量(scalar)
一个标量是一个单独的数, 一般用小写的变量名称表示, 如a、z等
2、向量(vector)
向量就是一列数或者一个一维数组, 我们可以把向量看作空间里的点, 如下: a可以看作一个一维数组
1 | import numpy as np |
3、矩阵(matrix)
就是一个二维数组, 具体操作见上一篇笔记
1 | import numpy as np |
矩阵还可以用嵌套向量生成, 和向量一样。
4、张量(tensor)
张量是向量和矩阵的推广, 标量–>零阶张量, 矩阵–>二阶张量, 以此类推。如一张图片就是一个三阶张量, 三个维度分别代表图片的高度、宽度和色彩数据。
1 | import numpy as np |
5.转置(transpose)
转置就是以主对角线(左上到右下)为轴进行镜像操作, 通俗来说就是行列互换, 如下所示:
1 | import numpy as np |
二、矩阵和向量运算
三、特殊矩阵与向量
1、可逆矩阵
𝐴⁻¹𝐴=𝐼𝘯 (其中𝐼𝘯为单位矩阵)
2、对角矩阵
只有对角线上的元素为非零元素, 其余全为零
3、对称矩阵
𝐴=𝐴ᵀ
4、单位向量
任意给定的向量𝘷, 若其𝙇²范数为, 即||𝘷||₂=1
, 则𝘷为单位向量
5、正交向量
𝐴𝐴ᵀ=𝐴ᵀ𝐴=𝐼 (单位向量)
四、线性相关性及向量空间
由多个同维度的的列向量构成的集合称为向量组
1、线性组合
2、线性相关
3、向量组的秩
五、范数
我们通过范数(Norm)来衡量向量的大小, 定义如下:
如何使用上代码:
1 | import numpy as np |
六、特征值分解
特征分解是使用最广的矩阵分解之一,将矩阵分解为一组特征向量和特征值。下面来看看他们的概念,设A是一个n阶方阵,如果存在实数$\lambda$和n维的非零向量x,满足:
$Ax=\lambda x$
那么$\lambda$称为方阵A的特征值,向量x为矩阵A对应特征值$\lambda$的特征向量
假设矩阵A有n个线性无关的特征向量{v¹, v², v³, ···, vⁿ},他们对应的特征值为{$\lambda$₁, $\lambda$₂, $\lambda$₃, ···, $\lambda$𝓃},把这n个线性无关的特征向量构成一个新方阵,每一列就是一个特征向量
$V=[v¹, v², v³, ···, vⁿ]$
用特征值构成一个n阶对角矩阵,对角线的元素都是特征值
$diag(\lambda)=[v¹, v², v³, ···, vⁿ]ᵀ$
那么,A的特征分解可表示为:
$A=Vdiag(\lambda)V⁻¹$
注意:并非所有的方阵都能进行特征值分解,一个方阵能进行特征值分解的充要条件是它含有n个线性无关的特征向量
下面我们来展示下求方阵的特征向量与特征值:
1 | import numpy as np |
七、奇异值分解
八、迹运算
迹运算返回的是矩阵对角元素的的和:
$Tr(A)=\sum_{i}A_{i,i}$
迹运算在某些场合非常有用,若不使用求和符号,某些矩阵运算很难描述。例如,迹运算提供了一种描述矩阵Frobenius范数的方式:
$||A||_{F}=\sqrt{Tr(AAᵀ)}$
利用NumPy对矩阵求迹同样方便,上代码
1 | import numpy as np |