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

tri*_*ta2 5 python machine-learning data-mining data-analysis scikit-learn

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

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

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

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

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

ogr*_*sel 5

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

partial_fitStandardScaler类中添加方法,实现流均值和方差估计的完整性仍然是很好的.

但即使StandardScaler有一个partial_fit方法,你仍然需要做几个数据路径(并且可选地将预处理的数据存储在驱动器上以便以后重用):

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