很多人刚开始训练模型时,会犯两个非常典型的错误:

  • 直接把原始数据丢进去训练
  • 用同一份数据既训练又评估

结果就是:

  • 模型训练不稳定
  • 评估结果不可信

但他们往往不知道问题出在哪。

其实原因很简单:模型训练前,有两件必须做的事:数据归一化 + 数据划分
在这里插入图片描述

这张图其实在讲一个完整流程:

  • 原始数据 → 数据归一化 → 数据划分 → 训练 → 验证 → 测试

你只要顺着这条线看,就能理解:

👉 为什么既要“处理数据”,又要“划分数据”


一、第一步:为什么要做数据归一化(左半部分)

先看图的左侧。

你会发现一个问题:

  • 有的特征范围是 0~1000
  • 有的特征只有 0~1

👉 这就是:特征尺度不一致

1.会带来什么问题?

模型在训练时,本质是在做加权计算:

在这里插入图片描述

如果:

  • 𝑥1 很大(比如 1000)
  • 𝑥2 很小(比如 0.1)

那么模型更容易被“大数值特征”主导。

👉 结果就是:

  • 小特征被忽略
  • 学习不公平
  • 训练过程不稳定

2.从优化角度看(关键理解)

你可以把训练想象成:

👉 在“山谷”里找最低点(梯度下降)

  • 未归一化:山谷又窄又扁 → 走得歪、来回震荡
  • 归一化后:山谷更圆 → 更容易找到方向

👉 这就是图左边在表达的核心:

归一化 = 统一尺度,让模型更容易学习

3.怎么做归一化?

最常见的方法是标准化:

在这里插入图片描述

简单理解:

  • 减去平均值
  • 再除以标准差

👉 让所有特征处于相似范围,左半部分总结一句:

归一化的本质,是让模型“学得更顺”


二、第二步:为什么要划分 Train / Val / Test(右半部分)

再看图右侧。这里在讲另一件完全不同但同样重要的事:如何正确评估模型

为什么不能用同一份数据训练和评估?看图里的类比:“背过的题 vs 真考试”

如果你:

  • 用同一份数据训练
  • 再用这份数据评估

那就相当于:考前把答案背了一遍,再去做同一张试卷, 结果当然很好,但没有任何意义。

正确做法:三份数据,图中已经帮你拆好了:

1️⃣ Train(训练集)

  • 学参数
  • 不断优化模型

2️⃣ Validation(验证集)

  • 调整模型(学习率、结构等)
  • 判断是否过拟合

对应你之前学的:val_loss 上升 = 开始过拟合

3️⃣ Test(测试集)

  • 最终评估模型

最关键的一点(必须记住):Test 集只在最后用一次,不参与训练和调参

这一部分的本质

数据划分,是为了让评估“可信”


三、把两件事串起来(这才是这篇的重点)

现在你可以把整张图串起来看:

左边在解决什么?

👉 数据归一化:让模型更容易学(训练问题)

右边在解决什么?

👉 数据划分:让结果更可信(评估问题)

两者本质不同,但缺一不可:

  • 只做归一化,不划分数据 → 评估会骗人
  • 只划分数据,不归一化 → 模型学得很痛苦

一句话总结整张图:

归一化让模型学得顺,数据划分让结果更可信


四、最容易踩的两个坑(帮你补全认知)

1.坑1:用全部数据做归一化

很多人会这样做:

  • 用全部数据算均值和方差
  • 再做归一化

这是不对的

正确做法是:只用训练集计算归一化参数,再应用到 Val/Test
否则就会:数据泄露(Data Leakage)

2.坑2:反复用 Test 调模型

如果你:

  • 一边看 Test 结果
  • 一边调模型

那么:Test 就不再是“真正没见过的数据”,评估就失去意义了


五、最后总结

你只需要记住这三点:

1️⃣ 数据归一化:解决“模型好不好学”

2️⃣ 数据划分:解决“评估准不准”

3️⃣ 两者都是训练前必须做的准备工作

最核心一句:

一个影响训练效率,一个决定评估可信度

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐