线性代数(Linear Algebra)
线性代数(Linear Algebra)
1. 标量、向量、矩阵和张量
1.1 标量(Scalar)
一个标量就是一个单独的数
1.2 矢量(Vector)
一个向量是一列数,这些数是有序排列的,用粗体符号表示,例如矢量
1.3 矩阵(Matrix)
矩阵是一个二维数组,常会用粗体的大写变量名称,比如
1.4 张量(Tensor)
如果把标量理解为0维数据,矢量理解为1维数据,矩阵理解为2维数据,那么更高维的数据可以称为“张量(Tensor)”,例如一张图片数据维3维张量(x,y,channel),一批图片数据为4维张量(number,x, y, channel)
2. 基本运算
2.1 转置(Transpose)
矩阵的转置是以对角线为轴的镜像,将矩阵
2.2 乘法(Product)
矩阵之间的乘法,需要满足矩阵
具体地,该乘法操作定义为
两个同维数的矢量
3. 单位矩阵和逆矩阵
3.1 单位矩阵(Identity Matrix)
单位矩阵的结构很简单,所有沿主对角线的元素都是1,而所有其他位置的元素都是0, 任意向量和单位矩阵相乘,都不会改变。 们将保持
3.2 逆矩阵(Matrix Inversion)
只有正方形矩阵有逆矩阵,对于一个
4. 线性相关和生成子空间
4.1 生成子空间(Span)
一组向量的生成子空间(Span),是指通过所有可能的线性组合,这组向量可以填充出来的那个空间,例如给定一组向量
例如对于只包含1个二维向量的集合
对于包含了2个不重合的向量的集合
4.2 线性相关(Linearly Dependent)和线性无关(Linearly Independent)
如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量称为线性无关,反之则成为线性相关
例如在3维空间中,如果3个向量不共面,则是线性无关的,如果共面,则是线性相关的
5. 范数(Norm)
范数用来衡量一个向量的“长度/大小/距离”这个概念,例如常用的
通用范数表示为:
另外一个经常在机器学习中出现的范数是范数
6. 特殊矩阵和向量
6.1 对角矩阵(Diagonal Matrix)
只在主对角线上含有非零元素,其他位置都是0的矩阵. 用
6.2 对称(Symmetric)矩阵是转置和自己相等的矩阵
6.3 单位向量(Unit Vector)是指具有单位范数的向量
6.4 正交(Orthogonal)
对于向量
如果一组向量两两正交,并且范数都为1,则称它们为标准正交(Orthonormal)
6.5 正交矩阵(Orthogonal Matrix)是指行向量和列向量是分别标准正交的方阵:
这也意味着:
7. 特征分解(Eigen Decomposition)
正如整数可以分解质因数相乘一样,可以通过分解矩阵来发现一些隐藏的特质,特征分解用于将矩阵分解为一组特征值和特征向量.
对于方阵
矢量
如果
假设矩阵
并且将特征值组成一个对角矩阵
那么方阵
使用numpy求矩阵的特征向量和特征值
# 定义一个 3x3 矩阵
A = np.array([[3, 4, 7],
[0, 2, 5],
[1, 9, 9]])
# 计算特征值、特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值:")
print(eigenvalues)
print("\n特征向量(每一列是一个):")
print(eigenvectors)8. 奇异值分解(Singular Value Decomposition,SVD)
奇异值分解是另一种分解矩阵的方法,不同于特征分解只能用于方阵,奇异值分解可以应用与任何形状的矩阵.
经过奇异值分解,矩阵
如果矩阵
: 是 正交矩阵,其列向量被称为左奇异向量,通常代表了原始数据在行空间上的特征 : 是 对角矩阵,对角线上的元素 称为奇异值(Singular Values),他们按照从大到小的顺序排列, : 是一个 的正交矩阵,其行向量(即 的列向量)被称为右奇异向量,代表了原始数据在列空间上的特征
8.1 几何意义
如果把矩阵
- 旋转 (
):在原空间中进行坐标旋转,不改变向量长度 - 缩放 (
):在旋转后的坐标轴方向上进行拉伸或压缩 - 再次旋转 (
):在目标空间中再次进行坐标旋转。
8.2 使用numpy计算
A = np.array([[1, 2, 3],
[4, 5, 6]])
U, S, VT = np.linalg.svd(A)
print("U:\n", U)
print("S(奇异值):\n", S)
print("VT:\n", VT)
print(f"VT[0]={VT[0]}, VT[1]={VT[1]}, VT[2]={VT[2]}")numpy输出的S是特征值向量,如果需要转换为对角矩阵,可以使用np.diag(S)转换为对角矩阵,但这个对角矩阵是方阵,需要在补充全零的行向量或者列向量,使其成为
9. 伪逆(Moore-Penrose)
TODO...
10. 迹运算
TODO...