机器学习中的数据集与矩阵表示
一个典型的机器学习数据集(Dataset)由若干样本(Sample)组成,每个样本包含若干特征(Feature),在监督学习中还会带有对应的标签(Label)。
所属专题:机器学习基础 (ml-basics·04)
机器学习中的数据集与矩阵表示
一、数据集的基本组成
一个典型的机器学习数据集(Dataset)由若干样本(Sample)组成,每个样本包含若干特征(Feature),在监督学习中还会带有对应的标签(Label)。
| 术语 | 英文 | 别名 | 说明 |
|---|---|---|---|
| 样本 | Sample | 示例、实例、Example、Instance、记录 | 一条独立的数据记录 |
| 特征 | Feature | 属性、Attribute、变量、自变量 | 描述样本的一个维度 |
| 标签 | Label | 目标、Target、因变量、y 值 | 需要预测的答案 |
| 数据集 | Dataset | 样本集 | 所有样本的集合 |
示例:房价数据集
| 编号 | 面积(㎡) | 房间数 | 楼层 | 房龄(年) | 价格(万元) |
|---|---|---|---|---|---|
| 1 | 89 | 2 | 5 | 3 | 520 |
| 2 | 120 | 3 | 12 | 8 | 680 |
| 3 | 65 | 1 | 2 | 15 | 310 |
| 4 | 145 | 4 | 20 | 1 | 890 |
- 样本数 m = 4(每一行是一个样本)
- 特征数 n = 4(面积、房间数、楼层、房龄)
- 标签 = 价格
二、数学符号约定
机器学习中通常使用以下符号(本文遵循主流教材如吴恩达 CS229、周志华《机器学习》的约定):
- m:样本数量
- n:特征数量
- x:特征向量(输入)
- y:标签(输出)
- x⁽ⁱ⁾:第 i 个样本(上标加括号)
- xⱼ:第 j 个特征
- xⱼ⁽ⁱ⁾:第 i 个样本的第 j 个特征
单个样本的表示
第 i 个样本是一个 n 维列向量:
⎡ x₁⁽ⁱ⁾ ⎤
x⁽ⁱ⁾ = ⎢ x₂⁽ⁱ⁾ ⎥ ∈ ℝⁿ
⎢ ... ⎥
⎣ xₙ⁽ⁱ⁾ ⎦
以上面房价数据的第 1 个样本为例:
x⁽¹⁾ = [89, 2, 5, 3]ᵀ, y⁽¹⁾ = 520
三、数据集的矩阵表示
1. 特征矩阵 X(Design Matrix / 设计矩阵)
将所有 m 个样本按行堆叠,得到一个 m × n 的矩阵:
⎡ — (x⁽¹⁾)ᵀ — ⎤ ⎡ x₁⁽¹⁾ x₂⁽¹⁾ ... xₙ⁽¹⁾ ⎤
⎢ — (x⁽²⁾)ᵀ — ⎥ ⎢ x₁⁽²⁾ x₂⁽²⁾ ... xₙ⁽²⁾ ⎥
X = ⎢ ... ⎥ = ⎢ ... ... ... ... ⎥
⎣ — (x⁽ᵐ⁾)ᵀ — ⎦ ⎣ x₁⁽ᵐ⁾ x₂⁽ᵐ⁾ ... xₙ⁽ᵐ⁾ ⎦
- 每一行 = 一个样本
- 每一列 = 一个特征
- X ∈ ℝᵐˣⁿ
房价数据集的特征矩阵为:
⎡ 89 2 5 3 ⎤
X = ⎢ 120 3 12 8 ⎥ (4 × 4)
⎢ 65 1 2 15 ⎥
⎣ 145 4 20 1 ⎦
2. 标签向量 y
所有样本的标签构成一个 m 维列向量:
⎡ y⁽¹⁾ ⎤ ⎡ 520 ⎤
⎢ y⁽²⁾ ⎥ ⎢ 680 ⎥
y = ⎢ ... ⎥ = ⎢ 310 ⎥ ∈ ℝᵐ
⎣ y⁽ᵐ⁾ ⎦ ⎣ 890 ⎦
- 回归:y ∈ ℝᵐ
- 二分类:y ∈ {0, 1}ᵐ
- 多分类(K 类,one-hot 编码):Y ∈ ℝᵐˣᴷ
3. 参数向量 θ (或 w)
模型的参数(权重)通常是一个 n 维列向量:
⎡ θ₁ ⎤
θ = ⎢ θ₂ ⎥ ∈ ℝⁿ
⎢ ...⎥
⎣ θₙ ⎦
四、常见运算的矩阵形式
1. 单样本的线性预测
对第 i 个样本:
ŷ⁽ⁱ⁾ = θ₁·x₁⁽ⁱ⁾ + θ₂·x₂⁽ⁱ⁾ + ... + θₙ·xₙ⁽ⁱ⁾ = θᵀx⁽ⁱ⁾
2. 批量预测(所有样本一次算完)
用矩阵乘法一步得到所有样本的预测值:
ŷ = X · θ
⎡ ŷ⁽¹⁾ ⎤ ⎡ x₁⁽¹⁾ ... xₙ⁽¹⁾ ⎤ ⎡ θ₁ ⎤
⎢ ŷ⁽²⁾ ⎥ = ⎢ ... ... ... ⎥ · ⎢ ...⎥
⎣ ŷ⁽ᵐ⁾ ⎦ ⎣ x₁⁽ᵐ⁾ ... xₙ⁽ᵐ⁾ ⎦ ⎣ θₙ ⎦
(m×1) (m×n) (n×1)
维度验证:(m×n) · (n×1) → (m×1) ✓
这是机器学习中向量化(Vectorization) 的核心 —— 用一次矩阵乘法替代 m 次循环,效率提升几十到上百倍。
3. 加入偏置项(截距 bias)
方式一:扩展 X,在最左边加一列全 1,同时 θ 增加一维 θ₀:
⎡ 1 x₁⁽¹⁾ ... xₙ⁽¹⁾ ⎤ ⎡ θ₀ ⎤
⎢ 1 x₁⁽²⁾ ... xₙ⁽²⁾ ⎥ ⎢ θ₁ ⎥
X' = ⎢ ... ... ... ... ⎥ , θ = ⎢ ...⎥
⎣ 1 x₁⁽ᵐ⁾ ... xₙ⁽ᵐ⁾ ⎦ ⎣ θₙ ⎦
ŷ = X'·θ (X' ∈ ℝᵐˣ⁽ⁿ⁺¹⁾)
方式二:显式偏置 b:
ŷ = X·w + b (深度学习框架常用写法)
4. 损失函数的矩阵表示
以均方误差(MSE) 为例:
标量写法: J(θ) = (1/2m) · Σᵢ (ŷ⁽ⁱ⁾ - y⁽ⁱ⁾)²
矩阵写法: J(θ) = (1/2m) · ‖Xθ - y‖²
= (1/2m) · (Xθ - y)ᵀ(Xθ - y)
5. 梯度的矩阵形式
对 MSE 求梯度:
∇θ J(θ) = (1/m) · Xᵀ(Xθ - y) ∈ ℝⁿ
维度验证:Xᵀ ∈ ℝⁿˣᵐ, (Xθ - y) ∈ ℝᵐ → 结果 ∈ ℝⁿ ✓
6. 正规方程(Normal Equation)闭式解
线性回归可以直接一步求最优解:
θ* = (XᵀX)⁻¹ Xᵀ y
五、数据在深度学习中的张量表示
深度学习中数据的维度会更高,用张量(Tensor) 表示:
| 数据类型 | 形状(Shape) | 例子 |
|---|---|---|
| 表格数据 | (m, n) | 房价数据 (4, 4) |
| 序列数据 | (m, T, n) | 句子:批大小×时间步×词向量 |
| 灰度图像 | (m, H, W) | MNIST (60000, 28, 28) |
| 彩色图像 | (m, H, W, C) 或 (m, C, H, W) | ImageNet (m, 224, 224, 3) |
| 视频 | (m, T, H, W, C) | 批×帧数×高×宽×通道 |
- m:batch size(批次大小)
- H, W:图像高、宽
- C:通道数(RGB=3,灰度=1)
- T:时间步长 / 帧数
约定差异
- NHWC:TensorFlow 默认(Batch, Height, Width, Channel)
- NCHW:PyTorch 默认(Batch, Channel, Height, Width)
六、代码示例(NumPy)
import numpy as np
# 特征矩阵 X:4 个样本,4 个特征
X = np.array([
[ 89, 2, 5, 3],
[120, 3, 12, 8],
[ 65, 1, 2, 15],
[145, 4, 20, 1],
]) # shape: (4, 4)
# 标签向量 y
y = np.array([520, 680, 310, 890]) # shape: (4,)
# 参数向量 θ(假设值)
theta = np.array([5.0, 20, 2, -3]) # shape: (4,)
# 批量预测(一次矩阵乘法算完所有样本)
y_hat = X @ theta # shape: (4,)
# MSE 损失
m = X.shape[0]
loss = (1 / (2*m)) * np.sum((y_hat - y) ** 2)
# 梯度
grad = (1/m) * X.T @ (y_hat - y) # shape: (4,)
# 正规方程闭式解
theta_star = np.linalg.inv(X.T @ X) @ X.T @ y
print("预测值:", y_hat)
print("损失:", loss)
print("最优参数:", theta_star)
七、常见维度速查表
| 对象 | 符号 | 形状 |
|---|---|---|
| 特征矩阵 | X | (m, n) |
| 单样本 | x⁽ⁱ⁾ | (n,) 或 (n, 1) |
| 标签向量(回归/二分类) | y | (m,) |
| 标签矩阵(多分类 one-hot) | Y | (m, K) |
| 参数向量(线性模型) | θ, w | (n,) |
| 权重矩阵(神经网络第 l 层) | W⁽ˡ⁾ | (n_{l-1}, n_l) |
| 偏置向量 | b | (n_l,) |
| 预测值 | ŷ | (m,) 或 (m, K) |
八、要点小结
- 样本按行、特征按列 —— 是机器学习中最重要的排列约定。
- 向量化 是性能优化的核心:一次矩阵乘法 = m 次样本循环。
- 维度验证 是调试模型的第一步:算清楚每一步的 shape,bug 就少一半。
- 张量 只是矩阵在更高维度的推广,本质是”多维数组”。
- 不同框架的维度约定不同(NHWC vs NCHW),迁移代码时务必确认。