数学基础
机器学习本质上是数学。三个核心领域的关系:
flowchart TD A[线性代数] --> D[机器学习] B[概率论] --> D C[微积分] --> D A -->|数据表示| D B -->|不确定性建模| D C -->|模型优化| D线性代数:数据的语言
Section titled “线性代数:数据的语言”数据在机器学习中表示为向量和矩阵。一张图片是一个矩阵,一个 batch 是三维张量,模型的权重也是矩阵。
import numpy as np
v = np.array([1, 2, 3])u = np.array([4, 5, 6])
# 点积:衡量两个向量的相似度dot = np.dot(v, u) # 1×4 + 2×5 + 3×6 = 32print(f"点积: {dot}")
# 范数:向量的长度norm = np.linalg.norm(v) # √(1²+2²+3²) ≈ 3.74print(f"L2 范数: {norm:.2f}")A = np.array([[1, 2], [3, 4]])B = np.array([[5, 6], [7, 8]])
# 矩阵乘法C = A @ Bprint(f"A @ B =\n{C}")
# 转置print(f"A^T =\n{A.T}")
# 逆矩阵:A⁻¹ 满足 A × A⁻¹ = IA_inv = np.linalg.inv(A)print(f"A⁻¹ × A =\n{A_inv @ A}") # 单位矩阵特征值与特征向量
Section titled “特征值与特征向量”矩阵 乘以向量 等于向量 缩放 倍。这在 PCA 降维中至关重要:
eigenvalues, eigenvectors = np.linalg.eig(A)print(f"特征值: {eigenvalues}")概率论:不确定性的数学
Section titled “概率论:不确定性的数学”机器学习处理的是不确定性——模型给出的是概率,不是确定的答案。
# 概率分布:所有事件的概率之和为 1p = np.array([0.2, 0.3, 0.5]) # 三个事件
# 期望值:加权平均x = np.array([1, 2, 3])expectation = np.sum(p * x)print(f"期望值: {expectation}") # 0.2×1 + 0.3×2 + 0.5×3 = 2.3机器学习中最常见的分布。中心极限定理保证大量独立随机变量的均值趋近于正态分布:
import matplotlib.pyplot as plt
x = np.linspace(-4, 4, 100)y = (1 / np.sqrt(2 * np.pi)) * np.exp(-x**2 / 2)
plt.plot(x, y)plt.fill_between(x, y, alpha=0.2)plt.axvline(0, color='red', linestyle='--', label='μ=0')plt.title('标准正态分布 N(0,1)')plt.legend()plt.show()关键性质:
- 68% 的数据落在
- 95% 的数据落在
- 99.7% 的数据落在
微积分:优化的基础
Section titled “微积分:优化的基础”导数 = 函数在某点的变化率。梯度下降用导数来确定更新方向:
# 数值微分def derivative(f, x, h=1e-6): return (f(x + h) - f(x - h)) / (2 * h)
f = lambda x: x**3 + 2*xprint(f"f'(2) = {derivative(f, 2):.4f}") # 3×2² + 2 = 14梯度是导数的多维推广——指向函数增长最快的方向:
梯度下降沿负梯度方向更新参数,逐步逼近最小值:
flowchart LR A[当前位置] --> B[计算梯度] B --> C[沿负梯度方向移动] C --> D{收敛?} D -->|否| A D -->|是| E[找到最小值]# 梯度下降:求 f(x) = x² 的最小值def gradient_descent(f_grad, start, lr=0.1, steps=50): x = start path = [x] for _ in range(steps): grad = f_grad(x) x = x - lr * grad # 沿负梯度方向移动 path.append(x) return path
f_grad = lambda x: 2*x # f(x) = x² 的导数path = gradient_descent(f_grad, start=5.0)print(f"起点: {path[0]:.1f} → 终点: {path[-1]:.4f}")💡 不要先学完数学再看 ML。 边学机器学习边补数学,哪个概念不懂就查哪个。理解了”为什么需要这个数学工具”之后,学习效率最高。
| 当你不理解… | 去补… |
|---|---|
| 数据怎么表示 | 线性代数 |
| 模型为什么这样预测 | 概率论 |
| 参数怎么更新 | 微积分(链式法则) |
- 机器学习概念 — 用数学理解机器学习
- Python 工具链 — 用代码实践数学