【机器学习】机器学习工程实战-第3章 数据收集和准备

上一章:第2章 项目开始前

3.1 关于数据的问题

3.1.1 数据是否可获得

1、首先考虑数据是否存在?
2、若存在,考虑是否可获得:物理上、合同上、道德上、成本上

3.1.2 数据是否相当大

判断是否收集了足够数据的一个实用的方法:绘制学习曲线(learningcurve),具体操作为:不同数量训练样本的学习算法会对应不同的训练得分和验证得分,分别将它们绘制出来。
通过观察学习曲线,会发现模型在达到一定数量的训练样本后,表现趋于平缓。在达到这个训练样本数量后,额外增加样本而受益却递减。
如果学习算法的表现趋于平缓,那么有三种情况:

  • 收集更多数据对训练更好的模型没有帮助
  • 包含信息的特征不足以建立表现更好的模型
  • 选择的学习算法无法利用已有数据训练出足够复杂的模型

3.1.3 数据是否可用

(1)数据质量
信息错误
(2)数据集是否规整
用于机器学习的数据集必须是规整的
(3)是否有缺失值(missing value)
使用数据填补(data imputation)技术填补缺失值
(4)神奇数字(magic number)
人们用9999或-1等特殊数字标记的缺失值,需要通过使用适当的数据填补技术替换这些神器数字
(5)重复(duplicate)
重复数据通常会被删除,除非是故意用来解决不平衡问题(imbalanced problem)
(6)数据过期(expired)
如需要训练一个识别打印机异常行为的模型,却使用上一代打印机的测量结果,将使用过期数据训练出来的模型部署到新一代打印机,就可能会的表现的很差。
(7)数据不完整(incomplete)或现象代表性不足(unrepresentative)
如自动驾驶汽车系统的行人数据集,如果只有工程师冒充行人,会导致大多数情况下只采集到年轻男性,而儿童、女性和老人的代表性不足或完全没有。

3.1.4 数据是否可理解

防止数据泄露(data leakage)/目标泄露(target leakage)
如预测房屋交易价格,如果使用房子的属性(卧室数量、位置、建造年份等)训练模型,发现测试集中的表现几乎完美,生产部署后却大多数时候错误。
仔细检查发现训练数据中包含了房地产经纪人的佣金,因为佣金取决于售价,模型很容易学会了将这个属性完美地转换成房价。

3.1.5 数据是否可靠

(1)收集程序是否可靠
(2)是否存在标签延迟(delayed)或间接(indirect)特性影响

  • 标签延迟

以客户流失预测(churn prediction)问题为例。
有一个描述客户的特征向量,用来预测客户是否会在未来6个月后离开。特征向量代表对用户现在的了解,但标签是在未来指定。在现在和未来之间,很多事件会影响客户的去留,因此延迟的标签会使数据可靠性降低。

  • 间接特性

以预测网站访问者对某网页是否感兴趣为例。
数据集中的“感兴趣”/“不感兴趣”标签,反映了特定用户是否对该网页感兴趣。例如用户按下了“喜欢”按钮,这是直接的兴趣指标。但如果用户只点击了链接,这是间接指标,因为有可能存在用户误点的情况。所以如果标签是间接的,则可能导致数据不太可靠。
(3)反馈环路(feedback loop)
反馈环路是系统设计的一种属性,其用于训练模型的数据是利用模型本身获得的。
如在预测网站特定用户是否会喜欢某内容的问题。如果只有间接标签:点击。当模型部署在网站上,用户点击了模型推荐的链接,这意味模型返回的新的数据,不仅间接反映了用户对内容的兴趣,也反映了模型推荐该内容的密集程度。而当模型判定某个链接足够重要,就会推荐给更多的用户,那么更多的用户就可能会点击这个链接。

3.2 数据的常见问题

3.2.1 高成本

3.2.2 质量差

数据质量有两个部分:原始数据质量、标签质量
原始数据的常见问题:噪声、偏差、预测能力低、样本过时、离群值和泄露

3.2.3 噪声(noise)

数据中的噪声是对样本的损坏。
如图像模糊或不完整,音频背景噪声,民意调查缺失年龄、性别属性,等等。

3.2.4 偏差(bias)

数据的偏差是指,与数据所代表的现象不一致。
偏差类型:
(1)选择偏差(selection bias)
(2)自选偏差(self-selection bias)
如训练一个预测成功企业家的模型。
先询问企业家是否成功,然后选取宣称自己成功的企业家那里获得数据。
问题是,真正成功的企业家没时间回答你的问题,而自称成功的人很可能不是真的成功。
(3)遗漏变量偏差(omitted variable bias)
(4)赞助偏差(sponsorship bias)或资助偏差(funding bias)
(5)采样偏差(sampling bias)/分布偏差(distribution shift)
用于训练的样本分布不能反映模型在生产中收到的输入的分布
(6)偏见/刻板印象偏差(prejudice/stereotype bias)
(7)系统性值失真(systematic value distortion)
(8)实验者偏差(experimenter bias)
(9)贴标偏差(labeling bias)
避免偏差的方法
(1)选择偏差
可以通过系统地质疑选择特定数据源的原因来避免。
(2)自选偏差
无法完全消除。
预先选择回答者以减少自选偏差。
(3)遗漏变量偏差
很难完全避免。
试着用用代理变量代替被省略的变量。
如要训练一个预测二手车价格的模型。若无法得到车龄,就用当前车主拥有该车的时间来代替。
(4)赞助偏差
通过仔细调查数据来源,特别是来源所有者提供数据的动机,可以减少赞助偏差。
(5)采样偏差
通过研究生产中数据的各种属性的真实比例,然后在训练数据中保持类似的比例进行采样,来避免采样偏差。
(6)偏见/刻板印象偏差
通过将学习算法暴露在更均匀的样本分布中,减少偏见/刻板印象偏差。
(7)系统性值失真偏差
通过多个设备测量,或者聘请经过训练的人员来比较测量,或观察设备的输出来缓解。
(8)实验者偏差
通过让多人验证调查中提出的问题来避免。
(9)贴标偏差

3.2.5 预测能力低(low predictive power)

3.2.6 过时的样本

在实际场景中,由于概念漂移(concept drift),模型开始出错。概念漂移是特征和标签之间的统计关系发生了根本性的变化。
如预测用户是否喜欢网站上的某些内容。随着时间的推移,用户的喜好可能会改变。过去的样本不再反映这些用户的偏好,并开始伤害模型的表现。

3.2.7 离群值

3.2.8 数据泄露/目标泄漏

监督学习中的数据泄露是指无意中引入了不该提供的目标信息,这就是所谓的“污染”。
在污染数据上进行训练,会导致模型表现的期望值过于乐观

3.3 什么是好数据

3.3.1 好数据是有信息的

3.3.2 好数据有好的覆盖面

3.3.3 好数据反映真实的输入

3.3.4 好数据没有偏差

3.3.5 好数据不是反馈环路的结果

如,在使用模型判定哪些邮件对用户重要的问题上,高亮显示了这些重要的邮件,就不应该再把这些邮件的点击作为邮件重要的信号。因为用户很可能是因为模型高亮标记了这些邮件才点击的。

3.3.6 好数据有一致的标签

标签不一致可能来自以下几个方面:

  • 不同的任根据不同的标准进行标注。
  • 一些类的定义是随着时间的推移而演变的。这就导致了两个非常相似的特征向量得到两个不同标签的情况出现。
  • 误解用户的动机。例如,用户忽略了一篇推荐的新闻文章,使得该新闻文章得到一个负面标签。然而,用户忽略这个推荐的原因可能是他们已经知道了这个故事,而不是对这个故事的主题不感兴趣。

3.3.7 好数据足够大

好数据足够大,可以进行泛化。

3.3.8 好数据总结

  • 包含足够多的信息,可以用于建模;
  • 很好地覆盖了你想用模型做的事情;
  • 反映了模型在生产环境中会看到的真实输入;
  • 尽可能没有偏差;
  • 不是模型本身的结果;
  • 有一致的标签;
  • 足够大,可以进行泛化。

3.4 处理交互数据

交互数据(interaction data)是可以从用户与模型支持的系统的交互中收集到的数据。
好的交互数据包含三个方面的信息:

  • 交互的上下文背景;
  • 用户在该上下文中的动作;
  • 交互的结果。
    例如,对于一个搜索引擎,模型对每个用户的搜索结果分别进行重新排序。
    重新排序模型根据用户提供的关键词将搜索引擎返回的链接表作为输入,并输出另一个列表,其中的项目会改变顺序。
    通常情况下,重新排列模型会得到一些关于用户及其偏好的信息,并能根据每个用户学习到的偏好,分别对每个用户的通用搜索结果进行重新排序
    这里的“上下文”是搜索查询和以特定顺序呈现给用的上百篇文档。“动作”是用户对某个特定文档链接的点击。“结果”是用户花了多少时间阅读该文档,以及用户是否点击了“返回”、“下一页”等链接。
    直觉上,如果用户点击了某个链接,并且花了明显的时间阅读该页面,则排名就很好。如果用户点击了某个结果的链接,然后迅速点击“返回”,那么排名就不是很好。如果用户点击了“下一篇”,排名就不好。这些数据可以用来改进排名算法,使其更加个性化

3.5 数据泄露的原因

3.5.1 目标是一个特征的函数

如,目标(GDP)是两个特征(人口和人均GDP)的简单函数,如果根据面积、人口、地理区域等属性预测一个国家的GDP,则会导致数据泄露。
再如,训练一个模型来预测员工的年薪。训练数据的属性中包含了该员工的月薪,那么单单这一个属性就能完美预测年薪,也不需要建模了。

3.5.2 特征隐藏目标

比如一列名为“人口统计分组”的信息是这样的:M35-50、M25-35、F25-35,分别代表男女及其年龄段。如果使用包含这列信息的数据集去预测用户的性别,这就构成了一种数据泄露的形式,即预测值被隐藏在了特征值中

3.5.3 特征来自未来

如果要使用年龄、性别、学历、工资、婚姻状况等属性预测借款人是否会还款,而不了解模型被使用的业务背景,则可能会出现数据泄露。
如果该模型被用户用于审批信贷之前,客户根本不涉及到是否会还款的问题,所以这个预测值将始终都是0,也就没有意义。

3.6 数据划分

  • List item

训练集:机器学习算法用来训练模型的。
验证集(validation set):找到机器学习流水线的超参数的最佳值。
测试集:用于报告。
验证集和测试集通常被称为留出集,包含学习算法不允许被看到的样本。
为了更好的将整个数据集划分为三个不相干的集,划分必须满足以下几个条件。

条件1: 对原始数据进行划分。
这有助于避免数据泄露。
条件2: 数据在划分前先随机洗牌。
条件3: 验证集和测试集遵循相同的分布。**
条件4:** 避免划分期间的泄露。
划分过程可能发生分组泄漏(group leakage)。
假设你有多个患者大脑的核磁共振图像,每张图像都被贴上了某种脑部疾病的标签,同一个病人可能有几张在不同时间的拍摄图像。
如果使用随机洗牌然后划分,同一患者的图像可能会同时出现在训练集和留出集中。
而模型可能会从病人的特殊性而不是疾病中学习。比如模型会记住病人A的大脑有特定的脑沟回,如果他们在训练数据中还有特定的疾病,模型就会在验证集中仅通过脑沟回识别病人A,然后预测出这种疾病。
结局分组泄露的方法是分组划分(group partitioning)。它将所有患者样本一起保存在同一个集合中,训练集或留出集。

3.7 处理缺失的属性

处理属性缺失值的典型方法:

  • 从数据集中删除属性确实的样本(数据集足够大,可以安全地牺牲一些数据);
  • 使用能够处理确实属性值的学习算法(如决策树学习算法);
  • 使用数据填补技术。

3.7.1 数据填补技术

为了计算一个缺失的数据属性值,一种方法是将缺失值替换为该属性在其余数据集中的平均值。另一种方法是用正常范围外的值来替代缺失值。还有一种更高级的方法是将缺失值作为回归问题的目标变量。

3.7.2 填补过程中的泄漏问题

如,使用整个数据集来计算属性缺失值时,就会发生泄露。
需要通过先划分数据、再单独在某个集上使用数据填补技术来避免。

3.8 数据增强

3.8.1 图像的数据增强

一种方法是翻转、旋转、裁剪、色彩变幻、增加噪声、透视改变、对比度改变、信息损失。
另一种方法是混搭(mixup)。一些实验表明,混搭可以提高神经网络模型的泛化能力。可以提高对对抗性样本(adversarial example)的健壮性,稳定生成式对抗网络(Generative Adversarial Network,GAN)的训练。

3.8.2 文本的数据增强

一种技术是用同义词(synonyms)替换句子中的随机词。类似的技巧是用超义祠(hypernyms)代替同义词。超义祠是指具有更普遍意义上的词。如“mammal”是“whale”和“cat”的超义祠。
参考deepseek解释:
在这里插入图片描述
另一个有用的文本数据增强技术是回译(back translation)。
如果要通过一个英文文本创建一个新的样本,首先使用机器翻译系统将其翻译成另一种语言,然后再回译成英文。如果通过回译得到的文本与原文不同,就将其添加到数据集中,赋予与原文相同的标签。

3.8.3 音频、视频

可通过添加噪声,在时间上移动音频或视频片段,减慢或加速,改变音频的音调和视频的色彩平衡,等。

3.9 处理不平衡的数据

类不平衡(class imbalance)可以显著影响模型的表现,而与选择的学习算法无关。

3.9.1 过采样

经常使用的一种缓解类不平衡的计算是过采样(oversampling)。通过对少数类的样本进行多份复制,增加他们的权重。

3.9.2 欠采样

欠采样(undersampling)是从训练集中删除一些多数派类的样本。

3.9.3 混合策略

通过开发混合策略(通过结合过采样和欠采样),获得更好的结果。
其中一种策略是使用ADASYN进行过采样,然后使用Tomek链接进行欠采样。还有一种策略是将基于聚类的欠采样与SMOTE结合。

3.10 数据采样策略

主要有两种策略:

  • 概率采样(probability sampling)
  • 非概率采样(nonprobability sampling)
    本书只介绍概率采样。

3.10.1 简单随机采样(simple random sampling)

使用随机数发生器选择。

3.10.2 系统采样(systematic sampling),也称为区间采样(interval sampling)

创建一个包含所有样本的列表。从列表的前k个元素中随机选择第一个样本xmax。然后从xmax开始选择列表中的每个第k个数据项。
这个方法不适合周期性或重复性的样本。在这种情况下会出现偏差。
如果列表样本是随机的,系统采样的结果优于简单随机采样。

3.10.3 分层采样(stratified sampling)

事先知道数据中存在几个组(如性别、地点或年龄),然后从每个分层中随机选择样本,从每个分层中选择的样本数量与分层的大小成正比。
如果不知道如何最好地定义分层,可以使用聚类(clustering)。我们唯一需要做的就是决定需要多少个聚类。
缺点:成本高、速度慢。
优点:产生较少偏差样本。

3.11 存储数据

3.11.1 数据格式

  • 逗号分隔值(CSV)
  • 文件制表分隔值(TSV)文件
  • XML(可扩展标记语言)文件
  • JSON(JavaScript对象符号)文件
    某些流行的机器学习软件包提供应用编程接口,使用专有数据格式:
  • ARFF(Weka机器学习软件包中使用的属性-关系文件格式)
  • LIBSVM(支持向量机库):是LIBSVM和LIBLINEAR(大型线性分类库)机器学习库使用的默认格式。

3.11.2 数据存储级别

  • 文件系统(filesystem)
  • 本地文件系统(local filesystem)
  • 分布式文件系统(distributed filesystem):如NFS(网络文件系统)、CephFS(Ceph文件系统)或HDFS
  • 文件共享(file sharing)
  • 本地存档(local archiving)
  • 数据保护(data protection):在文件系统级别上访问数据,减速访问速度快,存储速度慢,适用于较小的团队和数据。
  • 对象存储(object storage):是一种定义在文件系统上的应用编程接口(API)
  • 数据库(database)
  • 数据湖(data lake)

3.11.3 数据版本化

数据版本化可以在以下层次上实现,从最基本到最复杂依次为:
第0级:数据未版本化
第1级:数据在训练时作为快照进行版本化
第2级:数据和代码都作为一项资产实现版本化
第3级:使用或构建专门的数据版本解决方案
第2级版本化是大多数项目实施版本化的推荐方式。

3.11.4 文档和元数据

任何用于训练模型的数据资产都必须附带文档。该文档必须包含以下细节:

  • 该数据的含义。
  • 如果收集或用于创建的方法(对贴标员的指示和质量控制方法)。
  • 训练-验证-测试划分的细节。
  • 所有预处理步骤的细节。
  • 解释所有被排除的数据。
  • 使用什么格式来存储数据。
  • 属性或特征的类型(每个属性或特征允许有哪些值)。
  • 样本的数量。
  • 标签的可能值或数字目标的允许范围。

3.11.5 数据生命周期

对于每一项敏感的数据资产,数据生命周期文件必须描述该资产,并明确出在项目开发过程中和项目开发结束后可以接触到该数据资产的人员范围。

3.12 数据处理最佳实践

可重复性和“数据第一、算法第二”。

3.12.1 可重复性

3.12.2 数据第一、算法第二

数据增强如果实施得好,很可能比寻找最佳超参数值或默许架构对模型质量的贡献更大。

3.13 小结

下一章:第4章 特征工程

请在关闭网页之前,利用2秒钟的时间,在脑海中迅速回顾一遍本部分的框架及要点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值