大数据集的特征缩放

时间:2018-10-04 09:04:09

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

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

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

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

我如何去获得洁牙机?我先验地想到了一次加载所有数据的操作,只是为了计算缩放器(通常我使用sklearn缩放器,如StandardScaler),然后在进行训练时将其加载。

这是常见的做法吗?如果是的话,如果将数据添加到训练数据集中该怎么办?可以将洁牙机组合起来以避免一次性操作,而只是“更新”洁牙机?

1 个答案:

答案 0 :(得分:2)

StandardScaler中的

scikit-learn通过使用partial_fit()可以以递增方式(对于小数据块)计算数据的均值和标准差:

  

partial_fit(X,y = None)

     

对X上的均值和标准差进行在线计算,以便以后进行缩放。 X都是   批量处理。这适用于适合的情况   由于n_sample数量过多或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