吴恩达课程系列
1-3监督学习【监督学习的定义,监督学习的分类(回归与分类)】
1-4无监督学习【无监督学习的定义,无监督学习问题的分类(聚类/信号分离/降维)】
2-1模型描述【如何描述一个模型(用一些符号),单变量线性回归是什么?】
2-2~2-4代价函数【代价函数的数学定义、代价函数的直观理解】
2-7线性回归的梯度下降【线性回归问题运用梯度下降法(求偏导)】
本篇博客主要记录矩阵的一些操作(线性代数知识的回顾),简单记录,不赘述
3 线性代数回顾(linear algebra review)
3-1 矩阵(matrix)和向量(vector)
如图:这个是 4×2 矩阵,即 4 行 2 列,如 m 为行,n 为列,那么 m×n 即 4×2

矩阵的维数即行数×列数
今天看西瓜书,也看到了维数的概念:
矩阵元素(矩阵项):

\(A_{ij}\)指第 \(i\)行,第 \(j\) 列的元素。
向量是一种特殊的矩阵,讲义中的向量一般都是列向量,如:

为四维列向量(\(4 \times 1\))。 如下图为 1 索引向量和 0 索引向量,左图为 1 索引向量,右图为 0 索引向量,一般我们用 1 索引向量。

编程中肯定更习惯用右边的。
3-2 矩阵加法和标量乘法
矩阵的加法:行列数相等的可以加。 比如下图:

矩阵的乘法:每个元素都要乘

组合算法也类似,例如下图:

3-3 矩阵向量乘法
矩阵和向量的乘法如图:m×n 的矩阵乘以 n×1 的向量,得到的是 m×1 的向量

3-4 矩阵乘法
矩阵乘法: m×n 矩阵乘以 n×o 矩阵,变成 m×o 矩阵。
如果这样说不好理解的话就举一个例子来说明一下,比如说现在有两个矩阵 A 和 B,那么它们的乘积就可以表示为图中所示的形式。

3-5 矩阵乘法的性质
矩阵乘法的性质: 矩阵的乘法不满足交换律:A×B≠B×A
矩阵的乘法满足结合律。即:A×(B×C)=(A×B)×C
单位矩阵:在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的 1,我们称这种矩阵为单位矩阵.它是个方阵,一般用 I 或者 E 表示,本讲义都用 I 代表单位矩阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1 以外全都为 0。如:

对于单位矩阵,有 AI=IA=A
3-6 逆、转置
矩阵的逆:如矩阵 A 是一个 m×m 矩阵(方阵),如果有逆矩阵,则:

矩阵的转置:设 A 为 m×n 阶矩阵(即 m 行 n 列),第 i 行 j 列的元素是 a(i,j),即:A=a(i,j)
定义 A 的转置为这样一个 n×m 阶矩阵 B,满足 B=a(j,i),即 b (i,j)=a (j,i)(B 的第 i 行第j 列元素是 A 的第 j 行第 i 列元素),记\(A^T=B\)。(有些书记为 \(A'=B\))
直观来看,将 \(A\) 的所有元素绕着一条从第 1 行第 1 列元素出发的右下方 45 度的射线作镜面反转,即得到 \(A\) 的转置。
比如:

矩阵的转置基本性质:

补充:numpy/pandas中的矩阵运算
主要补充:
- 乘法
- 逆
- 转置
NumPy 中的矩阵运算
NumPy 提供了强大的数组(ndarray)对象,非常适合进行矩阵运算。
元素级乘法:要求两个数组的形状(shape)必须相同
1
2
3
4
5
6
7
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
element_wise_product = a * b
print("Element-wise Product:\n", element_wise_product)

矩阵乘法
这个就是一般我们说的矩阵乘法
使用 @ 运算符或 np.matmul() 函数。 这种乘法符合线性代数中矩阵乘法的定义。 a @ b 要求 a 的列数等于 b 的行数。(也是两个矩阵相乘的要求):
1
2
3
4
5
6
7
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
matrix_product = a @ b # 或者 np.matmul(a, b)
print("Matrix Product:\n", matrix_product)

逆矩阵
使用 np.linalg.inv() 函数计算方阵的逆矩阵。 只有方阵(行数和列数相等的矩阵)才可能存在逆矩阵。 如果矩阵不可逆(奇异矩阵),则会引发 LinAlgError 异常。
1
2
n = np.array([[1, 2], [3, 4]])
np.linalg.inv(n)

转置
使用 .T 属性或 np.transpose() 函数获取矩阵的转置。 转置矩阵是将原矩阵的行和列互换得到的新矩阵。
1
2
3
a = np.array([[1, 2], [3, 4]])
a.T
a.transpose()

Pandas 中的矩阵运算
Pandas 的 DataFrame 对象也可以进行一些矩阵运算,但通常需要先将其转换为 NumPy 数组,然后再进行计算。
元素级乘法
与 NumPy 类似,使用 * 运算符。
1
2
3
4
df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])
display(df1, df2)
df1*df2

矩阵乘法
需要先将 DataFrame 转换为 NumPy 数组,然后再使用 @ 或 np.matmul()。
1
2
3
4
df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])
df1.values @ df2.values

逆矩阵
需要先将 DataFrame 转换为 NumPy 数组,然后再使用 np.linalg.inv()。
1
2
3
4
5
6
7
8
a = pd.DataFrame([[1, 2], [3, 4]])
try:
inver = np.linalg.inv(a.values)
display(inver)
except:
print("矩阵不可逆")

转置
使用 .T 属性或 np.transpose() 函数。 可以直接对 DataFrame 对象进行转置
1
2
3
4
5
df = pd.DataFrame([[1, 2], [3, 4]])
df.T
df.transpose()
df.values.T
df.values.transpose()

总结:
- NumPy 是进行数值计算的基础库,提供了丰富的矩阵运算函数。
- Pandas 主要用于数据处理和分析,DataFrame 对象可以进行一些基本的矩阵运算,但更复杂的运算需要转换为 NumPy 数组进行(
df.values就转换成了ndarray)。 - 记住 * 是元素级乘法,
@或np.matmul()是矩阵乘法。 - 使用
np.linalg.inv()计算逆矩阵,注意处理奇异矩阵的情况。 - 使用
.T属性或np.transpose()函数进行转置。
