如何将训练集特定的学习参数与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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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