生产标准化

数据挖掘 机器学习 Python 正常化 批量标准化
2022-03-05 20:21:39

我目前正在为我的时间序列应用程序编写机器学习管道。在每个月底,我收集数据,对其进行归一化 ([0, 1]),仅使用新观察值重新训练 ML 模型并预测未来值。

问题

我是否应该在每次获得新的观察时读取整个数据集,标准化整个数据集,创建 ML 模型,然后进行预测?

我是如何陷入困境的:

  • 假设我有 1 个特征,并且在t-1时所有值都有 min/max = [0, 1000]
  • 在 t 处,一个新的观察值出现,值 = 1001
  • 鉴于 ML 模型已使用不同的最小值/最大值进行训练,我应该如何规范化新值?

谢谢

3个回答

真的取决于

为什么?更新生产中的所有内容(预处理、装配等)可能会变得非常昂贵。如果你有一些复杂的架构,那是不值得的。

备择方案

  1. 如果您知道未来数据的分布,则近似协变量偏移可以提前调整所有参数,例如标准化参数。

  2. 每次进行预测时保存您未来的数据,将数据快速保存在数据库中可能会更便宜,并且根据您的系统每周、每月更新一次

规范化是数据的转换。应该在训练数据集上找到该转换的参数。然后在预测期间应应用相同的参数。

您不应该在预测期间重新找到归一化参数。机器学习模型将特征值映射到目标标签。如果您不应该更改特征值而不更改映射。如果仅更改特征值,则可能会出现不一致的映射。

如果您正在对特定范围的特征进行训练,然后在预测期间存在超出范围的特征值,则有两种选择:

  1. 将其设置为范围的限制,在 1001 的情况下,它将被转换为 1。

  2. 决定对那个特征值进行预测是否有意义,一些机器学习模型不应该外推。

针对单个新观察对整个数据集进行归一化可能不切实际。如果归一化给出 [0, 1] 之外的值,请考虑使用 0 或 1(视情况而定)作为近似值。通常,这就足够了。

请记住使用适当的标记和警报来标记事件,以便预测用户了解风险。如果这些警报经常出现,您可能希望重新定义公式/模型以不依赖于 [0, 1] 标准化或更改数据整形逻辑以确保您始终在范围内。