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

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

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

例如,如果你使用最小-最大缩放器将特征限制在[-1, 1]之间或标准化你的数据,它们学习并最终用于转换数据的参数是从一个子集的训练数据中学习的,这些数据恰好是在给定迭代中操作的数据子集。

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

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


回答:

你可以在一大块足够大的子集上拟合StandardScaler实例,这些子集可以一次性装入RAM(比如几GB的数据),然后重复使用同一个固定的缩放器实例,一次处理一批剩余的数据。你应该能够在几千个样本上获得每个特征的均值和标准差值的良好估计,因此没有必要仅仅为了缩放器而在全部数据上计算实际的拟合。

尽管如此,向StandardScaler类添加一个partial_fit方法,实现流式均值和方差估计以实现完整性会很好。

但即使StandardScaler有一个partial_fit方法,你仍然需要对数据进行多次处理(并可选地将预处理后的数据存储在驱动器上以供以后重用):

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注