数据依赖项

数据对机器学习开发者来说就像代码对传统编程人员一样重要。 本节课将重点介绍您应该针对数据提出的问题类型。

数据依赖关系

  • 输入数据(特征)决定了机器学习系统的行为。
    • 我们为软件库编写单元测试,但数据呢?
  • 选择输入信号时需要小心谨慎。
    • 甚至在决定要依赖哪些软件库时,可能还需要格外小心?
  • 可靠性
    • 没有信号怎么办?您知道吗?
  • 可靠性
    • 没有信号怎么办?您知道吗?
  • 版本控制
    • 计算此信号的系统是否发生过变化?频率会出现什么情况?
  • 可靠性
    • 没有信号怎么办?您知道吗?
  • 版本控制
    • 计算此信号的系统是否发生过变化?频率会出现什么情况?
  • 必要性
    • 信号的实用性是否能证明添加它的费用?
  • 相关性
    • 是否有任何输入信号密不可分,以至于需要采取额外策略来梳理它们?
  • 相关性
    • 是否有任何输入信号密不可分,以至于需要采取额外策略来梳理它们?
  • 反馈环
    • 我的哪些输入信号可能会受到模型输出的影响?

视频讲座总结

机器学习系统的行为取决于其输入特征的行为和品质。随着特征的输入数据发生变化,您的模型也会随之变化。有时,这种变化是可取的,但有时却不是。

在传统软件开发中,您更关注代码而不是数据。在机器学习开发中,虽然编码仍然是这项工作的一部分,但您的关注点必须更多,才能包含数据。例如,在传统软件开发项目中,最好编写单元测试以验证代码。在机器学习项目中,您还必须不断测试、验证和监控输入数据。

例如,您应该持续监控模型,以移除未使用的(或很少使用的)特征。想象一下,某项特征对模型贡献很少或没有贡献。如果该功能的输入数据突然更改,则模型的行为也可能会以意想不到的方式突然发生变化。

可靠性

需要考虑输入数据的可靠性的一些问题:

  • 信号是否始终可用,还是来源不可靠?例如:
    • 信号是否来自因负载过重而崩溃的服务器?
    • 这个信号是否来自每年 8 月去度假的人们?

版本控制

关于版本控制的一些问题:

  • 计算这些数据的系统是否发生了变化?如果是这样:
    • 频率
    • 您如何知道系统何时发生了变化?

有时数据来自上游进程。如果该过程突然改变,您的模型可能会受到影响。

考虑为从上游进程收到的数据创建自己的副本。然后,只有当您确定可以安全执行此操作时,才转到下一版本的上游数据。

必要性

以下问题可能会提醒您注意正则化

  • 此功能的实用性是否能证明添加它的费用?

您总是会倾向于向模型添加更多特征。例如,假设您发现了添加特征,使模型略微准确的一项新功能。较高的准确率听起来当然比较低的准确率更好。 但是,现在您已经增加了维护负担。该附加功能可能会意外降级,因此您必须对其进行监控。请先三思,然后添加能带来短期成功的功能。

相关性

有些特征会与其他特征相关联(正或负)。 请思考以下问题:

  • 是否有任何特征密不可分,以至于需要采取额外策略来梳理它们?

反馈环

有时,模型会影响自己的训练数据。例如,一些模型的结果会直接或间接地向同一个模型输入特征。

有时,一个模型会影响另一个模型。例如,考虑以下两种用于预测股票价格的模型:

  • 模型 A - 是一个不良的预测模型。
  • 型号 B。

由于模型 A 存在 bug,因此它错误地决定购买库存 X 中的库存。 这些交易会推动库存 X 的价格上涨。模型 B 将股票 X 的价格用作输入特征,因此模型 B 很容易就股票 X 的价值得出一些错误的结论。因此,模型 B 可以根据模型 A 的错误行为购买或出售股票 X 的股份。而模型 B 的行为可能会影响模型 A,并可能触发郁金香狂热行为或触发 X 公司的股票