【问题标题】:Feature scaling for a big dataset [closed]大数据集的特征缩放[关闭]
【发布时间】:2019-03-09 14:56:42
【问题描述】:

我正在尝试使用深度学习模型进行时间序列预测,在将数据传递给模型之前,我想缩放不同的变量,因为它们的范围大不相同。

我通常是“即时”完成的:加载数据集的训练子集,从整个子集中获取缩放器,存储它,然后在我想使用它进行测试时加载它。

现在数据非常大,我不会一次加载所有训练数据进行训练。

我怎么去获得缩放器?我事先考虑过一次性加载所有数据以计算缩放器(通常我使用 sklearn 缩放器,如 StandardScaler),然后在我的训练过程中加载它。

这是一种常见的做法吗?如果是,如果将数据添加到训练数据集中,你会怎么做?是否可以组合缩放器来避免一次性操作而只是“更新”缩放器?

【问题讨论】:

  • 我正在尝试使用...您是否有机会编辑您的帖子,以minimal reproducible example 的形式包含其中的某些部分?如果你没有遇到什么具体问题,可以简明扼要地回答,这就是一份咨询工作。

标签: python machine-learning scikit-learn data-science


【解决方案1】:

scikit-learn 中的StandardScaler 能够使用partial_fit() 以增量方式(对于小块数据)计算数据的均值和标准差:

partial_fit(X, y=None)

在线计算 X 上的均值和标准差,以供以后缩放。所有的 X 是 作为一个批次处理。这适用于适合的情况 由于 n_samples 的数量非常多或因为 X 是不可行的 从连续流中读取。

您需要对数据进行两次传递:-

  • 一个完整的pass(可以分批,调用partial_fit()计算均值和std),
  • 其他方式将您提前发送到深度学习框架的数据即时传递给transform()

示例:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()

# First pass
# some_generator can be anything which reads the data in batches
for data in some_generator:
    scaler.partial_fit(data)

    # View the updated mean and std variance at each batch
    print(scaler.mean_)
    print(scaler.var_)


# Second pass
for data in some_generator:
    scaled_data = scaler.transform(data)

    # Do whatever you want with the scaled_data

【讨论】:

  • 非常感谢!对于回复和应用示例。作为编辑的旁注,第二次打印应该打印 scaler.std_。
猜你喜欢
  • 2021-03-09
  • 2019-12-09
  • 2021-12-09
  • 2020-05-31
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2014-02-05
  • 2020-04-21
相关资源
最近更新 更多