大数据集的特征缩放

rpi*_*ste 1 python machine-learning scikit-learn data-science

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

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

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

我怎样才能获得定标器?先验我想到做一次加载所有数据的操作,只是为了计算缩放器(通常我使用 sklearn 缩放器,如 StandardScaler),然后在我进行训练过程时加载它。

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

Viv*_*mar 11

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

partial_fit(X, y=None)

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

您将需要两次传递数据:-

  • 一次完整传递(可以分批,调用partial_fit()计算均值和标准差),
  • 其他人将您发送到深度学习框架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
Run Code Online (Sandbox Code Playgroud)