如何将训练集特定的学习参数与 sklearn 在线(核外)学习相结合
Posted
技术标签:
【中文标题】如何将训练集特定的学习参数与 sklearn 在线(核外)学习相结合【英文标题】:how can I combine training set specific learned parameters with sklearn online (out-of-core) learning 【发布时间】:2015-03-22 18:37:45 【问题描述】:我的数据集变得太大,我正在 sklearn 中寻找在线学习解决方案,他们将其称为核心外学习。
他们提供了一些使用部分拟合 API 的类,基本上可以让您将数据的子集保存在内存中并对其进行操作。但是,许多预处理阶段(例如数据缩放)在训练数据的拟合阶段保留参数,然后将其用于转换。
例如,如果您使用 min-max 缩放器将特征绑定到 [-1, 1] 或标准化您的数据,则它们学习并最终用于转换数据的参数是从子集 他们碰巧在给定迭代中操作的训练数据。
这意味着,在拟合阶段对一个训练数据子集学习的参数可能与另一训练数据子集不同,因为它们是特定于训练集的。这就是我的问题的核心:
当学习的参数是训练数据的函数时,如何结合在预处理步骤的拟合阶段学习的参数?
【问题讨论】:
【参考方案1】:您可以将 StandardScaler
实例放在足够大的子集上,该子集可以一次放入 RAM(比如几 GB 数据),然后重新使用相同的缩放器固定实例来转换其余数据一次一批。您应该能够在数千个样本上很好地估计每个特征的均值和标准值,因此无需仅针对缩放器计算对完整数据的实际拟合。
将partial_fit
方法添加到StandardScaler
类,实现streaming mean & variance estimation 以保持完整性仍然很好。
但即使StandardScaler
有partial_fit
方法,您仍然需要执行多个数据路径(并且可以选择将预处理数据存储在驱动器上以供以后重用):
standard_scaler.partial_fit()
第二遍:对每个原始数据块调用standard_scaler.transform
,然后将结果传递给model.partial_fit
方法。
【讨论】:
以上是关于如何将训练集特定的学习参数与 sklearn 在线(核外)学习相结合的主要内容,如果未能解决你的问题,请参考以下文章