趋近智
如我们所见,矩阵是组织数据和描述线性变换的重要工具。虽然任何数字网格都构成矩阵,但某些类型的矩阵具有特殊结构和性质,使其在机器学习中尤为有用。识别这些类型有助于更好地理解算法,并常带来明显的计算效率提升。下面介绍一些您会经常遇到的常见类型。
最基本的分类是方阵,它简单地说就是行数和列数相等(n×n)。许多重要性质,如矩阵逆、行列式、特征值和特征向量(我们将在后面介绍),主要为方阵定义。它们常表示给定维度空间内的变换,或方程数量与未知数数量相等的系统。
单位矩阵,表示为 I(或 In 以指定 n×n 大小),是标量乘法中数字1的矩阵对应物。它是一个方阵,主对角线(从左上到右下)上均为1,其余位置均为0。
I3=100010001其主要性质是,任何矩阵 A 乘以适当大小的单位矩阵后,矩阵 A 保持不变: AI=A 和 IA=A。 同样,向量 x 乘以 I 后,向量保持不变:Ix=x。
在机器学习中,单位矩阵可代表不进行任何操作的变换,作为基准或初始状态。它在定义中也起着基本作用,例如矩阵逆的定义。
您可以使用NumPy中的 np.identity() 或 np.eye() 创建单位矩阵:
import numpy as np
# 创建一个3x3单位矩阵
I = np.identity(3)
print(I)
# 输出:
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
# np.eye() 类似但更灵活(可创建非方阵)
I_eye = np.eye(3)
print(I_eye)
对角矩阵是一种方阵,其中所有非对角线元素均为零。主对角线元素可以是任意值,包括零。单位矩阵是对角矩阵的一个特例。
D=d1000d2000d3对角矩阵在计算上非常方便。涉及对角矩阵的矩阵乘法会大大简化,通常只是对另一个矩阵的行或列进行缩放。对角矩阵的逆(如果存在)通过取每个对角线元素的倒数即可轻松求得。
在机器学习中,对角矩阵常表示沿坐标轴的缩放变换。例如,对角协方差矩阵意味着特征之间不相关。它们也作为奇异值分解(SVD)中的一个核心组成部分(Σ)出现。
NumPy使用 np.diag() 可以轻松创建对角矩阵:
# 从列表或数组创建对角矩阵
diag_elements = [2, -1, 5]
D = np.diag(diag_elements)
print(D)
# 输出:
# [[ 2 0 0]
# [ 0 -1 0]
# [ 0 0 5]]
# 从现有矩阵中提取对角线元素
diag_extracted = np.diag(D)
print(diag_extracted)
# 输出: [ 2 -1 5]
对称矩阵是一种方阵,它等于其自身的转置。也就是说,A=AT。这意味着第 i 行第 j 列的元素与第 j 行第 i 列的元素相同(aij=aji)。
S=17−2730−205是对称矩阵,因为 S=ST对称矩阵在机器学习中非常重要。例子包括:
对称矩阵的一个重要性质是其特征值总是实数,对应于不同特征值的特征向量是正交的。这个性质是主成分分析(PCA)等方法的基础。
您可以在NumPy中检查对称性:
S = np.array([[1, 7, -2], [7, 3, 0], [-2, 0, 5]])
is_symmetric = np.allclose(S, S.T) # 使用 np.allclose 进行浮点数比较
print(f"S是对称的吗? {is_symmetric}")
# 输出: S是对称的吗? True
NotSymmetric = np.array([[1, 7], [-7, 3]])
print(f"NotSymmetric是对称的吗? {np.allclose(NotSymmetric, NotSymmetric.T)}")
# 输出: NotSymmetric是对称的吗? False
我们刚刚使用转置定义了对称矩阵。矩阵 A 的转置,表示为 AT,是通过交换其行和列获得的。如果 A 是一个 m×n 矩阵,AT 将是一个 n×m 矩阵,其中 (AT)ij=Aji。
A=[142536]⟹AT=123456转置操作有几个性质,特别是 (AB)T=BTAT 和 (A+B)T=AT+BT。它常在机器学习公式和推导中出现,例如线性回归的正规方程 (XTXβ^=XTy),以及在处理数据表示时。
在NumPy中,转置可以轻松通过 .T 属性或 np.transpose() 函数访问:
A = np.array([[1, 2, 3], [4, 5, 6]])
A_transpose = A.T
print(A_transpose)
# 输出:
# [[1 4]
# [2 5]
# [3 6]]
# 使用函数实现相同效果
A_transpose_func = np.transpose(A)
print(A_transpose_func)
对于一个方阵 A,其逆矩阵,表示为 A−1,是一个与 A 相乘后得到单位矩阵的矩阵: AA−1=A−1A=I 一个矩阵必须是方阵才能有逆,但并非所有方阵都有逆。有逆矩阵的矩阵称为可逆矩阵或非奇异矩阵。如果逆矩阵不存在,则该矩阵称为不可逆矩阵或奇异矩阵。逆矩阵是否存在由一个称为行列式的值决定(在第3章中讨论)。
逆矩阵对于解 Ax=b 形式的线性方程组很重要。如果 A 可逆,则唯一解为 x=A−1b。虽然这在数学上很优美,但与解决 Ax=b 的其他方法相比,对于大型矩阵,直接计算逆矩阵通常数值不稳定且计算成本高昂。我们将在下一章进一步说明。
性质包括 (AB)−1=B−1A−1 和 (AT)−1=(A−1)T。
NumPy提供了 np.linalg.inv() 用于计算逆矩阵:
A = np.array([[1, 2], [3, 4]])
try:
A_inv = np.linalg.inv(A)
print("矩阵A的逆:")
print(A_inv)
# 验证: A @ A_inv 应该接近单位矩阵
identity_check = A @ A_inv
print("\n验证 (A @ A_inv):")
print(identity_check)
print(f"接近单位矩阵吗? {np.allclose(identity_check, np.eye(2))}")
except np.linalg.LinAlgError:
print("矩阵A是奇异的,没有逆。")
# 奇异矩阵的例子
B = np.array([[1, 2], [2, 4]])
try:
B_inv = np.linalg.inv(B)
print(B_inv)
except np.linalg.LinAlgError:
print("\n矩阵B是奇异的。")
# 输出:
# Inverse of A:
# [[-2. 1. ]
# [ 1.5 -0.5]]
#
# Verification (A @ A_inv):
# [[1.0000000e+00 0.0000000e+00]
# [8.8817842e-16 1.0000000e+00]]
# Is close to identity? True
#
# Matrix B is singular.
如前所述,对于求解 Ax=b,通常更推荐使用 np.linalg.solve(A, b) 而不是显式计算逆矩阵。
正交矩阵 Q 是一种方阵,其列(和行)构成一组标准正交向量。这意味着每个列向量的长度(L2范数)为1,并且每个列向量都与其他所有列向量正交(点积为零)。
正交矩阵的一个主要性质是其转置等于其逆: QTQ=QQT=I⟹Q−1=QT 这使得涉及逆的计算变得简单。向量乘以正交矩阵相当于对向量进行刚性旋转和/或反射。重要的是,这些变换保持向量的长度和它们之间的角度不变:∣∣Qx∣∣2=∣∣x∣∣2。
正交矩阵在数值计算中很有用,因为它们本身稳定且不放大误差。它们在主成分分析(PCA)等算法(其中对称矩阵的特征向量矩阵可以选择为正交的)以及QR分解和SVD等矩阵分解中扮演重要角色。
# 二维旋转矩阵的例子(它是正交的)
theta = np.pi / 4 # 45 degrees
Q = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
print("正交矩阵Q(45度旋转):")
print(Q)
# 验证正交性: Q^T @ Q 应该为单位矩阵
identity_check = Q.T @ Q
print("\n验证 (Q.T @ Q):")
print(identity_check)
print(f"接近单位矩阵吗? {np.allclose(identity_check, np.eye(2))}")
# 验证逆矩阵等于转置矩阵
Q_inv = np.linalg.inv(Q)
print("\nQ的逆矩阵:")
print(Q_inv)
print(f"逆矩阵接近转置矩阵吗? {np.allclose(Q_inv, Q.T)}")
# Output:
# Orthogonal matrix Q (45-degree rotation):
# [[ 0.70710678 -0.70710678]
# [ 0.70710678 0.70710678]]
#
# Verification (Q.T @ Q):
# [[1. 0.]
# [0. 1.]]
# Is close to identity? True
#
# Inverse of Q:
# [[ 0.70710678 0.70710678]
# [-0.70710678 0.70710678]]
# Is inverse close to transpose? True
理解这些常见矩阵类型有助于简化问题,理解算法行为(例如PCA依赖对称协方差矩阵),并采用高效的计算实现。随着学习的推进,您会发现这些结构在各种机器学习场景中反复出现。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造