【机器学习】(19)—— 数据特性与标签

数据特性与标签:划分前先摸清

文章目录

  • 数据特性与标签:划分前先摸清
    • [1. 为什么「先划分」还不够](#1. 为什么「先划分」还不够)
    • [2. 数据特性四问](#2. 数据特性四问)
      • [2.1 类型:是什么数据](#2.1 类型:是什么数据)
      • [2.2 数量:样本够不够](#2.2 数量:样本够不够)
      • [2.3 数据质量](#2.3 数据质量)
      • [2.4 可信度](#2.4 可信度)
    • [3. 不可靠数据从哪来](#3. 不可靠数据从哪来)
    • [4. 不完整样本:删除还是填补](#4. 不完整样本:删除还是填补)
      • [4.1 什么时候删除](#4.1 什么时候删除)
      • [4.2 什么时候填补](#4.2 什么时候填补)
    • [5. 标签:直接标签与代理标签](#5. 标签:直接标签与代理标签)
      • [5.1 两种标签](#5.1 两种标签)
      • [5.2 人工标注 vs 自动标注](#5.2 人工标注 vs 自动标注)
    • [6. 划分中的隐藏坑](#6. 划分中的隐藏坑)
      • [6.1 跨集合重复](#6.1 跨集合重复)
      • [6.2 验证集 / 测试集磨损](#6.2 验证集 / 测试集磨损)
      • [6.3 分布不一致与非平稳](#6.3 分布不一致与非平稳)
      • [6.4 变换泄漏](#6.4 变换泄漏)
    • [7. 划分前清单与汽车小例子](#7. 划分前清单与汽车小例子)
    • [8. 动手:去重、填补、防泄漏划分](#8. 动手:去重、填补、防泄漏划分)
    • [9. 能力边界与常见误区](#9. 能力边界与常见误区)
      • [9.1 适用边界](#9.1 适用边界)
      • [9.2 常见误区](#9.2 常见误区)
    • [10. 关键术语速查](#10. 关键术语速查)
    • [11. 延伸阅读](#11. 延伸阅读)
    • [12. 小结](#12. 小结)

摘要 :第 18 篇讲了训练/验证/测试三分法,但若数据本身不可靠,再标准的划分也只是「把垃圾切成三份」。本文讲清数据集的类型、数量、质量与可信度 ,不完整样本该删还是该补,直接标签与代理标签怎么选,以及划分前后最常见的隐藏坑(重复、验证集磨损、分布错位、变换泄漏)。继续用汽车重量与油耗示例。适合刚读完泛化入门的读者。


1. 为什么「先划分」还不够

三分法回答的是:参数在哪学、超参在哪调、最终在哪验收。

它回答不了另一类问题:

  • 这批车的重量、标签靠不靠谱?
  • 缺了 MPG 的行怎么办?
  • 「高效」标签是真标记,还是用别的字段凑的?
  • 训练集和测试集是不是同一辆车出现了两次?

数据集(Dataset) 是样本的集合;模型再强,也强不过它所见过的数据。划分之前,先把家底摸清。

本单元进度:

篇次 聚焦
第 18 篇 泛化、过/欠拟合、三分法
本篇(19) 数据特性、标签、划分中的坑
后续篇 类别不平衡;模型复杂度与损失曲线

2. 数据特性四问

2.1 类型:是什么数据

一张表里,常见并存:

类型 汽车示例 专栏位置
数值 重量、排量、MPG 第 14~16 篇
类别 品牌、颜色、邮编 第 17 篇
文本 / 多媒体 车评、外观图 后续专题
其他模型输出 上游打分、Embedding 进阶篇

类型搞错(把邮编当数值)会从根上歪掉,第 17 篇已强调过。

2.2 数量:样本够不够

粗经验:可训练参数越多,通常需要越多样本。简单说法是:样本数最好比参数量大一个数量级以上;好模型往往还要更多。

另一条实用规律:大样本 + 少而精的特征 ,常常胜过小样本 + 特征堆满。专栏里 7 辆车只够讲概念,真实油耗模型需要远更大规模。

小数据也不是绝路:若能从同结构、大数据上预训练再适配,有时也能出活------但那是迁移学习路线,前提仍是标签与特征定义要对齐。

2.3 数据质量

质量不必玄学化,用结果定义即可:

高质量数据 帮助模型达成目标;低质量数据阻碍目标。

预测「是否高效」时,若高效标签大量标反,再漂亮的 AUC 也只是拟合错误标签。

2.4 可信度

可信度(Reliability) 问的是:标签错得多吗?特征噪不噪?过滤条件是否匹配任务?

做垃圾邮件检测时,机器人流量可能该留;做「真人搜索体验」时,机器人查询往往该滤掉------同一类脏数据,任务不同,去留不同


3. 不可靠数据从哪来

问题 汽车例子 典型后果
缺值 某行重量空白 无法组成完整特征向量
重复样本 同一日志上传两次 训练/测试泄漏,分数虚高
坏特征值 3.43 录成 34.3 回归被极端点拉歪(第 16 篇)
坏标签 重油车标成高效 监督信号本身错了
坏数据段 某日传感器全坏 局部切片系统性偏差

大到一定规模的数据集,几乎一定有异常值;关键是用规则、单测、监控把离谱值标出来,再决定删、改还是保留(第 16 篇的异常值决策树仍然适用)。


4. 不完整样本:删除还是填补

完整样本 :每个要用的特征都有值。

不完整样本:至少一个必要特征缺失。

不要直接拿缺特征的行去训线性/逻辑回归------向量长度对不上,或被迫塞进无意义的默认值却不告诉模型。

4.1 什么时候删除

  • 完整样本已经够训出有用模型
  • 某一列缺失极多,且实验证明去掉该特征损失不大 → 可删列,而不是硬补

删除要小心:别把重要但稀有的真实样本当垃圾扔掉。吃不准时,可以做两套数据(只删 vs 填补)对比验证集表现。

4.2 什么时候填补

完整样本不够时,常用填补(Imputation):用有依据的估计值补上,而不是乱填。

数值列常见:均值、中位数;有时序时,也可用邻近时刻(但补完后训练集仍要打乱,避免按时间排序直接训练)。

填补值几乎总不如真值。更好的做法是加一列布尔标记 ,例如 weight_is_imputed,让模型自己学「补出来的重量要不要少信一点」。标准化后均值常为 0,缺值补 0 在 z-score 空间里往往对应「补均值」。


5. 标签:直接标签与代理标签

监督信号来自标签(Label)。标签也必须最终能变成浮点数,才能进损失计算。

5.1 两种标签

类型 含义 汽车例子
直接标签 与预测目标完全一致 预测是否高效,列里就有 efficient
代理标签 与目标相近但不相同 没有 efficient,用「是否上过节能榜」近似

能直接用直接标签,就别绕弯。代理标签永远是折中:模型上限取决于「代理」和「真目标」有多贴。

再举一个非车例子帮助直觉:想预测「是否有自行车」,若没有 owns_bike,用 recently_bought_bike 往往是还不错但不完美的代理------买车的人多半有车,但也可能是送礼。

专栏里用 MPG 阈值造「高效」标签时,要想清楚:你要的是「官方节能认证」,还是「按 MPG 切一刀」?后者是可复现的工程定义,前者才是某些业务的直接标签。

5.2 人工标注 vs 自动标注

人工标注 自动标注
优点 能做难任务;倒逼标准写清楚 便宜、可规模化
风险 贵、慢、人也会错;需多人交叉 上游模型错会系统性传染

实用建议:自己先标一小批(如 100~1000 条),和众包/同事结果对照。不一致时,先别默认自己一定对------尤其涉及主观判断时,优先把标注说明书写清楚再重标。


6. 划分中的隐藏坑

第 18 篇讲了三分法该怎么用;下面是分数「假好看」的常见原因。

6.1 跨集合重复

同一辆车(或同一条日志)既在训练集又在测试集,等于开卷考试。划分后应检查并去掉验证/测试里与训练重复的样本。

邮件反垃圾场景里,同一封垃圾信复制多份,最容易制造「训练测试双 99%」的幻觉。

6.2 验证集 / 测试集磨损

验证集可以反复用于调参,但用得越多,越像间接训练集,置信度下降。测试集若也拿来天天调,最后验收就失真。对策:阶段性换新验证/测试数据,或严格限制测试集动用次数。

6.3 分布不一致与非平稳

训练集全是夏季车况、测试全是冬季;或用十年前的用户口味预测三年后的爆款------都属于第 18 篇提过的同分布 / 平稳假设被破坏。此时测试损失低,只说明切到了相似切片,不代表上线能泛化。

6.4 变换泄漏

更隐蔽的一种:先对全表StandardScaler.fit,再划分训练/测试。测试信息通过均值方差漏进了预处理。正确顺序是:

text 复制代码
先划分 → 只在训练集 fit 变换 → 再 transform 验证/测试

第 15、17 篇的 Pipeline 思路,正是为了堵住这类洞。


7. 划分前清单与汽车小例子

假设原始表如下(含故意埋的坑):

id weight mpg note
1 3.50 18 正常
2 3.69 15 正常
3 3.50 18 与 id=1 重复
4 NaN 16 缺重量
5 34.3 16 疑似录入错误
6 2.37 24 正常

建议处理顺序:

  1. 去重(按业务键,如车架号;演示里可用 weight+mpg 近似)
  2. 异常值:34.3 核对后删除或改正
  3. 缺值:完整样本够则删行;不够则中位数填补 + weight_is_imputed
  4. 确认标签定义(回归用 mpg,分类用阈值后的 efficient
  5. 打乱,再切训练/验证/测试
  6. 检查各集合是否仍有重复、重量分布是否离谱

8. 动手:去重、填补、防泄漏划分

python 复制代码
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

df = pd.DataFrame({
    "weight": [3.50, 3.69, 3.50, np.nan, 34.3, 2.37, 4.34, 4.42, 3.44, 3.43],
    "mpg":    [18, 15, 18, 16, 16, 24, 15, 14, 18, 16],
})

# 1) 去重
df = df.drop_duplicates()

# 2) 粗滤明显录入错误(业务阈值示例)
df = df[df["weight"].isna() | (df["weight"] < 10)].copy()

# 3) 划分:先切出测试,再切验证(标签与特征一起切)
X = df[["weight"]]
y = df["mpg"]
X_tv, X_test, y_tv, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_tv, y_tv, test_size=0.25, random_state=0)

# 4) 只在训练集 fit:中位数填补 + 标准化
pipe = Pipeline([
    ("imputer", SimpleImputer(strategy="median")),
    ("scaler", StandardScaler()),
    ("model", LinearRegression()),
])
pipe.fit(X_train, y_train)

print("val MSE:", mean_squared_error(y_val, pipe.predict(X_val)))
print("test MSE:", mean_squared_error(y_test, pipe.predict(X_test)))
# 注意:没有在全表上先 fit scaler,避免变换泄漏

样本很少时分数会抖,重点看流程:去重 → 清洗 → 再划分 → 训练集上 fit。


9. 能力边界与常见误区

9.1 适用边界

  • 本篇面向表格型监督数据;图像/语音的「质量」还有分辨率、采样率等维度,原则相同:先可信,再划分。
  • 类别严重不平衡时,「可信的标签」仍可能让准确率虚高------下一篇专门讲。

9.2 常见误区

误区 正解
有三分法就够了 先保证数据可信,再谈划分
缺值一律删光 可能删掉关键稀有样本;可对比填补方案
缺值乱填 0 且不告知模型 至少标记是否为填补值
代理标签当直接真相 始终评估代理与真目标的差距
验证集刷到完美再测一次测试集 测试集也会磨损;限制动用次数
全表标准化后再划分 典型泄漏,必须先划分再 fit

10. 关键术语速查

术语 一句话解释
数据集 用于训练与评估的样本集合
样本 / 示例 表中的一行(一组特征 + 可选标签)
数据质量 是否有助于达成建模目标
可信度 特征与标签可被信任的程度
填补 用合理估计补全缺失特征
直接标签 与预测目标完全一致的标签
代理标签 近似目标、但不完全相同的标签
变换泄漏 用到了验证/测试信息来 fit 预处理

11. 延伸阅读

资源 适合看什么
pandas 去重 drop_duplicates 用法
sklearn SimpleImputer 均值/中位数等填补
sklearn Pipeline 防止预处理泄漏
专栏第 16 篇 异常值识别与处理
专栏第 18 篇 泛化与三分法

12. 小结

三分法之前,先问四件事:类型对不对、样本够不够、质量帮不帮目标、数值与标签信不信。不完整样本在「删」与「补」之间权衡,填补时最好带上标记列。标签能直接则直接,代理要清楚近似误差。划分时盯死重复、验证/测试磨损、分布错位和变换泄漏。

text 复制代码
摸清家底 → 去重清洗 → 处理缺失与标签 → 打乱划分 → 仅训练集 fit 变换

下一篇进入类别不平衡:正负样本差几个数量级时,为什么准确率会骗人,以及该怎么评估与处理。

系列导航


如果本篇对你有帮助,欢迎点赞、收藏、关注博主,机器学习专栏持续更新中,下次更新不迷路。

相关推荐
俊哥V1 小时前
每日 AI 研究简报 · 2026-07-16
人工智能·ai
EMBA寰球网1 小时前
2026年SEM代运营推广公司哪家好:专业机构能力分析与主流选型参考
人工智能
小程故事多_801 小时前
拆解SOP+ReAct对话Agent,告别硬编码,解锁智能对话的柔性迭代能力
前端·人工智能·react.js·前端框架
码农学院1 小时前
GEO效果维持的持续迭代机制与内容老化监控技术
大数据·人工智能
WUYOUGYLU1 小时前
大模型:通向智能时代的新入口
人工智能
星核0penstarry1 小时前
递归式长上下文架构梳理:拓展文本窗口的递归处理思路
人工智能
TMT星球1 小时前
金山办公持续落子AI办公:灵犀专业版、WPS Comate同日发布
大数据·人工智能·wps
互联网科技看点1 小时前
微星电源售后服务深度解析:从质保政策到用户权益全覆盖
人工智能
名侦探7221 小时前
构建 Agent 的五大难点与解决方案
java·大数据·人工智能