如何规范在线学习中的数据?
在理想的世界中,我们的训练数据应该代表生产数据,这意味着描述性统计数据(例如平均值、最大值或最小值)不应该发生太大变化。因此,在“在线学习”环境中,我们应该能够使用历史训练数据中的最大值和最小值来进行归一化。
如果训练数据不能代表生产数据,或者我们不知道生产数据是如何分布的,答案是1.收集数据;2.做“线下培训”;然后投入生产。
一种可能性是以在线方式使用所有历史数据更新统计数据(平均值、方差、最小值、最大值等),并使用它们来标准化您的数据。Welford 的在线算法就是这样一个例子。
但是,这种“在线”规范化不是单射的(如果以严格的在线方式使用)。从某种意义上说,可以将在不同时间到达的两个不同输入映射/归一化为相同的输出值。此外,这种映射/过滤/归一化不能保证是单调的(尤其是在观察到很少数据的开始时)。
因此,根据数据的稀缺程度,可以使用不同的策略。如果数据稀缺或样本效率是关键标准,例如在一些现实生活中的应用中,我们只是使用严格的在线策略。否则,例如在有模拟器生成数据的情况下,我们可能会提到“冷启动”,我们首先收集数据以获得足够稳定的统计数据(均值、方差等),然后再使用它们来规范化训练数据。在训练时,可以根据数据的稀缺程度使用或不使用训练数据来进一步调整/更新这些统计数据。在测试时,测试数据不会用于调整/更新统计数据。
当我将分类器投入生产时遇到了这个问题。我们考虑的两个备选方案是:
1. 使用历史数据(正如在其他问题中提出的)指标(最小值、最大值、sdv)来规范化新的数据。
2. 用新来的数据重新规范化所有数据并重新计算模型。
即使选项二在理论上更正确(所有数据都被考虑到归一化),它也带来了新的问题(模型的重新计算,分类时间的大延迟)。因此,如果在第一次归一化中使用了足够大的样本,我不会在每次添加数据时都寻找新的归一化参数,而是使用旧的。