· 机器学习 ·阅读时长约 5 分钟

机器学习中的数据集与矩阵表示

一个典型的机器学习数据集(Dataset)由若干样本(Sample)组成,每个样本包含若干特征(Feature),在监督学习中还会带有对应的标签(Label)。

数据集特征工程矩阵表示

所属专题:机器学习基础 (ml-basics·04)

机器学习中的数据集与矩阵表示

一、数据集的基本组成

一个典型的机器学习数据集(Dataset)由若干样本(Sample)组成,每个样本包含若干特征(Feature),在监督学习中还会带有对应的标签(Label)

术语英文别名说明
样本Sample示例、实例、Example、Instance、记录一条独立的数据记录
特征Feature属性、Attribute、变量、自变量描述样本的一个维度
标签Label目标、Target、因变量、y 值需要预测的答案
数据集Dataset样本集所有样本的集合

示例:房价数据集

编号面积(㎡)房间数楼层房龄(年)价格(万元)
189253520
21203128680
3651215310
41454201890
  • 样本数 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)

八、要点小结

  1. 样本按行、特征按列 —— 是机器学习中最重要的排列约定。
  2. 向量化 是性能优化的核心:一次矩阵乘法 = m 次样本循环。
  3. 维度验证 是调试模型的第一步:算清楚每一步的 shape,bug 就少一半。
  4. 张量 只是矩阵在更高维度的推广,本质是”多维数组”。
  5. 不同框架的维度约定不同(NHWC vs NCHW),迁移代码时务必确认。

评论