返回首页

Roadmap
更新于 2026年10月21日 全文 928 字未阅读

数值型数据:数据清洗#

苹果树结的果子,总是好果与虫果并存,但是在高档超市货架上的苹果却个个剔透。从果园到超市之间的那段路,靠的是工人挑出坏果、给凑合的果打上一层蜡。然而,在 ML 工程里我们也得做同样的事——花大量时间挑出坏例子、把凑合能用的例子修一修。 因为哪怕只是几个坏苹果,也可能毁掉一整筐数据。

数据集里有相当一部分样本是不可靠的,要么缺、要么多、要么错。下面这张表把最常见的四种成因摊开:

问题类别例子
缺漏值(Omitted values)普查员漏记了一位居民的年龄。
重复样本(Duplicate examples)一台服务器把同一批日志上传了两次。
越界特征值(Out-of-range feature values)人手误多敲了一位数字。
坏标签(Bad labels)标注员把橡树图错标成了枫树。

其中前 3 类是可由程序 / 脚本自动检测的,坏标签就只能靠人抽检或者多个标记者互相校验了。

下面先看前 3 类怎么用脚本揪出来。

自动检测的常见套路#

下面这几类问题,写一个程序或者脚本就能揪出来:

  • 缺漏值

  • 重复样本

  • 越界特征值

下面看两个具体例子。

重复样本#

比如下面这组数据——前 6 个值是重复的,剩下的 8 个值彼此都不重复。

图 15. 一组按值列出的数据。前 6 个值重复出现多次,最后 8 个值彼此互不重复。
图 15. 前 6 个值是重复的

越界值#

再举一个例子。假设某个特征要求温度落在 10 到 30 度之间(含端点),但意外总是会来——温度计临时被太阳一晒,就会扔出一个离谱的越界值。脚本要能把「小于 10 或大于 30」这两种情况都揪出来:

图 16. 一组按值列出的温度测量数据。19 个点落在 10 到 30 度的合法区间内,最后多出一个高出 30 度的异常点。
图 16. 一个越界值

多人标注时的额外校验#

当标签由多个标记者共同给出时,我们建议先做一个统计层面的核查,即确认每个标记者产出的标签集是否彼此相当。否则就会出现这种情况:某个标记者下手更狠,或者用的根本是另一套评分标准。这种偏差会悄悄渗进训练数据里,靠统计方法比逐条肉眼去发现更稳。

检测出"坏"之后怎么修#

一旦识别出问题,我们通常有两种修法——删掉,或者补上一个合理的值:

  • 从数据集中直接删掉——干净利落,但样本会少;样本量本就紧张时慎用。

  • 用插补(imputation)补上一个合理的值——保住了样本量,但补什么就要拍脑袋;用均值 / 中位数 / 模型预测都行,关键是同一种处理在训练集和推理集要保持一致。

MLWM: 关于数据清洗和预处理的示例,可以参见 随机森林实战:泰坦尼克号生还预测示例 中第9.3.3节 缺失值填充部分的内容。

具体做法不在本章展开,可参阅 数据集、泛化与过拟合 模块里的数据特征一节。

阅读 --