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

时间:2015-01-23 16:49:01

标签: python machine-learning scikit-learn data-mining data-analysis

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

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

例如,如果您使用最小 - 最大缩放器将要素绑定到[-1,1]或标准化您的数据,那么他们学习并最终用于转换数据的参数将从子集他们碰巧在给定的迭代中操作的训练数据。

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

当学习参数是训练数据的函数时,如何在使用在线/核外学习的预处理步骤的拟合阶段中学习参数?

1 个答案:

答案 0 :(得分:5)

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

partial_fit类添加StandardScaler方法,实现streaming mean & variance estimation的完整性仍然很不错。

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

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