数据集:数据特征

数据集是一组示例

许多数据集会以表格(网格)的形式存储数据,例如以逗号分隔值 (CSV) 格式存储,或直接从电子表格或数据库表中存储。表格是一种直观的机器学习模型输入格式。您可以将表格的每一行视为一个示例,将每一列视为一个潜在的特征或标签。不过,数据集也可以从其他格式(包括日志文件和协议缓冲区)派生而来。

无论格式如何,机器学习模型的效果取决于其训练数据的质量。本部分将介绍关键数据特征。

数据类型

数据集可以包含多种类型的数据,包括但不限于:

  • 数值数据,详见单独的单元
  • 分类数据(详见单独的单元
  • 人类语言,包括单个字词和句子,甚至整个文本文档
  • 多媒体内容(例如图片、视频和音频文件)
  • 其他机器学习系统的输出
  • 嵌入向量,将在后面的单元中介绍

数据数量

一般而言,模型的训练样本数量应至少比可训练参数多一个数量级(或两个数量级)。不过,优质模型通常会使用比这多得多的示例进行训练。

特征较少的大型数据集上训练的模型通常比在特征较多的较小数据集上训练的模型效果更好。过去,Google 在使用大型数据集训练简单模型方面取得了巨大成功。

不同机器学习程序的数据集可能需要大量不同的示例才能构建实用的模型。对于一些相对简单的问题,几十个示例可能就足够了。对于其他问题,一万亿个示例可能还不够。

如果您要调整已使用来自同一架构的大量数据训练的现有模型,则有可能使用小型数据集获得良好的结果。

数据的质量和可靠性

每个人都喜欢优质内容,但质量是一个非常模糊的概念,可以用很多不同的方式来定义。本课程以实用的方式定义了质量

高质量的数据集有助于模型实现其目标。质量较低的数据集会妨碍模型实现其目标。

优质的数据集通常也比较可靠。可靠性是指您对数据的信任度。与基于不可靠数据训练的模型相比,基于可靠数据集训练的模型更有可能做出有用的预测。

衡量可靠性时,您必须确定:

  • 标签错误有多常见?例如,如果您的数据由人工标注,人工评分员出错的频率是多少?
  • 您的特征是否噪声过大?也就是说,特征中的值是否包含错误?请务实一点,您无法从数据集中清除所有噪声。出现一些噪声是正常的;例如,任何位置的 GPS 测量值每周都会略有波动。
  • 数据是否已针对您的问题进行了适当过滤?例如,您的数据集是否应包含来自聊天机器人的搜索查询?如果您要构建垃圾内容检测系统,那么答案可能为是。但是,如果您想为用户改进搜索结果,则不可以。

以下是导致数据集中数据不可靠的常见原因:

  • 遗漏值。例如,有人忘记输入某个房龄。
  • 重复示例。例如,服务器错误地将同一条日志条目上传了两次。
  • 不良特征值。例如,有人多输入了一位数,或者温度计被遗落在太阳底下。
  • 不良标签。例如,有人误将一颗橡树的图像标记为枫树。
  • 数据有部分损坏。例如,某项功能非常可靠,但在网络不断崩溃的那一天除外。

我们建议使用自动化功能标记不可靠的数据。例如,定义或依赖于外部正式数据架构的单元测试可以标记超出定义范围的值。

完整示例与不完整示例

在理想情况下,每个示例都是完整的;也就是说,每个示例都包含每个特征的值。

图 1. 一个示例,其中包含其所有五个特征的值。
图 1. 完整示例。

 

遗憾的是,现实世界的示例通常不完整,也就是说,至少缺少一个特征值。

图 2. 一个示例,其中包含其五个特征中的四个特征的值。有一个地图项被标记为缺失。
图 2. 不完整的示例。

 

请勿使用不完整的示例训练模型。请改为执行以下操作之一,修正或移除不完整的示例:

  • 删除未完成的示例。
  • Impute缺失值;即,通过为缺失值提供合理的猜测,将不完整的示例转换为完整的示例。
图 3. 一个包含三个示例的数据集,其中两个示例是不完整的示例。有人已从数据集中移除这两个不完整的示例。
图 3.从数据集中删除未完成的示例。

 

图 4. 一个包含三个示例的数据集,其中两个示例不完整,包含缺失的数据。某个实体(人工或插值软件)已插入值来替换缺失的数据。
图 4. 为不完整示例估算缺失值。

 

如果数据集包含足够的完整示例来训练实用的模型,请考虑删除不完整的示例。同样,如果只有一个特征缺少大量数据,并且该特征可能对模型帮助不大,那么不妨考虑从模型输入中删除该特征,看看移除该特征会导致质量下降多少。如果模型在没有该特征的情况下也能正常运行或几乎能正常运行,那就太棒了。 反之,如果您没有足够的完整示例来训练有用的模型,则可以考虑对缺失值进行插值。

删除无用或冗余的示例是可以的,但删除重要的示例则不太好。遗憾的是,很难区分无用示例和有用示例。如果您无法确定是删除还是插值,不妨考虑构建两个数据集:一个通过删除不完整的示例构建,另一个通过插值构建。然后,确定哪个数据集训练出的模型更好。


一种常见的算法是使用平均值或中位数作为插值值。因此,如果您使用Z 得分来表示数值特征,则插入的值通常为 0(因为 0 通常是平均 Z 得分)。

练习:检查您的理解情况

下面是按 Timestamp 排序的数据集的两个列。

时间戳 温度
2023 年 6 月 8 日 09:00 12
2023 年 6 月 8 日 10:00 18
2023 年 6 月 8 日 11:00 缺失
2023 年 6 月 8 日 12:00 24
2023 年 6 月 8 日 13:00 38

以下哪个值适合用来对缺失的温度值进行插值?

23
可能。23 是相邻值(12、18、24 和 38)的平均值。 不过,我们看不到数据集的其余部分,因此 23 可能只是其他日期 11:00 的离群值。
31
不太可能。我们可以看到的数据集的有限部分表明,11:00 的温度为 31 度实在太高了。不过,如果没有基于更多示例进行插值,我们无法确定这一点。
51
可能性不大。51 远高于任何显示的值(因此也远高于平均值)。