如何将训练集特定的学习参数与 sklearn 在线(核外)学习相结合

how can I combine training set specific learned parameters with sklearn online (out-of-core) learning

我的数据集越来越大,我正在 sklearn 中寻找在线学习解决方案,他们称之为核外学习。

他们提供了一些 类,它们使用部分拟合 API,基本上可以让您将数据的一个子集保存在内存中并对其进行操作。然而,许多预处理阶段(例如数据缩放)在训练数据的拟合阶段保留参数,然后用于转换。

例如,如果您使用最小-最大缩放器将特征绑定到 [-1, 1] 或标准化您的数据,则它们学习并最终用于转换数据的参数是从 a 中学习的他们恰好在给定迭代中操作的训练数据的子集

这意味着在一个训练数据子集的拟合阶段学习到的参数可能与另一个训练数据子集不同,因为它们是特定于训练集的。这就是我的问题的核心:

当使用 online/out-of-core 学习时,当学习的参数是训练数据的函数时,如何组合在预处理步骤的拟合阶段学习的参数?

您可以将 StandardScaler 实例放在一个足够大的子集上,该子集可以一次放入 RAM(比如几 GB 的数据),然后重新使用缩放器的相同固定实例来转换其余数据一次一批。您应该能够对几千个样本的每个特征的均值和标准值进行很好的估计,因此无需仅为缩放器计算完整数据的实际拟合。

StandardScaler class 添加一个 partial_fit 方法仍然很好,为完整性实现 streaming mean & variance estimation

但即使 StandardScaler 有一个 partial_fit 方法,您仍然需要执行多个数据路径(并可选择将预处理数据存储在驱动器上以供以后重用):

  • 第一遍:在所有原始数据块上调用standard_scaler.partial_fit()
  • 第二遍:对每个原始数据块调用 standard_scaler.transform,然后将结果传递给 model.partial_fit 方法。