X、y 与数据形状
X 的行对应样本、列对应特征,y 的第 i 项必须与 X 的第 i 行保持配对。
学习前需要掌握
背景与问题
机器学习代码中的许多问题来自“数字对了,轴的含义错了”。同样有 12 个元素,一个 3×4 矩阵与一个 4×3 矩阵可以分别表示三条四特征样本与四条三特征样本,不能因为元素数相等就互换。
先标记每个轴的语义,再讨论切片、拼接与模型接口,通常比等到模型报错后猜测 reshape 更可靠。
概念定义
常见表格任务把特征写成 X,形状为 (n,d):n 行样本,d 列特征。单目标 y 通常形状为 (n,),也存在多输出目标 (n,k),应按具体估计器约定处理。
样本位置必须在 X、y、时间与实体编号之间保持一致。shape 相同只能说明维度兼容,不能证明同一行仍对应同一个对象。
直观理解
把 X 的一行看成一张记录卡,把 y 的相同行看成这张卡的答案。只打乱卡片、不打乱答案,模型仍可能正常 fit,却已经在学习错误配对。
用同一 mask 同时筛选 X 与 y
三条样本分别是 [年龄20,收入3]、[年龄40,收入8]、[年龄30,收入5],标签依次为 [0,1,0]。若筛选收入至少为 5 的记录,mask 应为 [False,True,True],得到的标签必须是 [1,0]。
若错误地直接取 y 的前两项,会得到 [0,1]:结果长度仍是 2,却已与样本错配。这个例子说明 shape 检查和记录对齐检查缺一不可。
核心原理
筛选、重排与划分应共享同一个行索引或布尔 mask。特征列变化则需要同步更新列名、顺序和后续变换;不要把行操作与列操作混在一起。
单条预测通常仍要保留二维输入,例如两个特征的一条样本是 (1,2),不是含义不明的长度 2 向量。有些接口会把一维数组解释成不同对象,因此不能只靠自动推断。
转置、reshape 与广播解决不同问题。转置交换轴,reshape 改变分组方式而不保证语义正确,广播按尺寸规则对齐运算;任何一种操作都不能自动修复标签错位。
检查不应止于打印 shape。还要抽查几条样本的标识与标签、各列单位、缺失值和 dtype,确认接口输入与实际数据定义一致。
数学表达
核心表达
任何筛选、打乱和划分都必须对 X 与 y 使用相同索引;单条预测也通常保留二维形状 (1,d)。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1打印 X/y shape
- 2验证第一维相等
- 3随机检查样本标签对应
- 4划分时同时传入 X/y
代码对应位置
示例 1X、y 与数据形状:最小可验证示例:把正文原理映射为可检查的代码行为。
计算与实现步骤
- 打印 X/y shape
- 验证第一维相等
- 随机检查样本标签对应
- 划分时同时传入 X/y
- 预测单条时保留二维
代码实现
示例 1
X、y 与数据形状:最小可验证示例
example_01.py用途:把正文原理映射为可检查的代码行为。
import numpy as np
X = np.arange(12).reshape(3, 4)
y = np.array([0, 1, 0])
assert X.shape[0] == y.shape[0]
print(X[1], y[1])
print(X[1:2].shape)代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
把正文原理映射为可检查的代码行为。
X- 完整特征矩阵,每行一个样本、每列一个特征。
y- 目标标签或连续目标值。
Step 1 · 1–6 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import numpy as np
X = np.arange(12).reshape(3, 4)
y = np.array([0, 1, 0])
assert X.shape[0] == y.shape[0]
print(X[1], y[1])
print(X[1:2].shape)预期输出或运行结果
打印第二条样本与标签,单条切片形状为 (1,4)。 [4 5 6 7] 1 (1, 4)
常见错误 · 3 条
- 分别打乱 X 和 y
- 用 X[i] 代替需要二维的 X[i:i+1]
- 确认样本轴、特征轴以及 X 与 y 的第一维完全对应。
实际应用
- sklearn 输入检查
- 批量预测
常见错误
- 分别打乱 X 和 y
- 用 X[i] 代替需要二维的 X[i:i+1]
推荐学习资料
UCI Machine Learning Repository
提供分类、回归、聚类等任务常用的公开数据集和字段说明。
UC Irvine · UCI