我正在尝试使用深度学习模型进行时间序列预测,并且在将数据传递给模型之前,我希望对不同的变量进行缩放,因为它们的范围差异很大。
我通常是“即时”完成的:加载数据集的训练子集,从整个子集获取缩放器,存储它,然后在想要使用它进行测试时加载它。
现在数据非常大,我不会立即加载所有训练数据进行训练。
我如何去获得洁牙机?我先验地想到了一次加载所有数据的操作,只是为了计算缩放器(通常我使用sklearn缩放器,如StandardScaler),然后在进行训练时将其加载。
这是常见的做法吗?如果是的话,如果将数据添加到训练数据集中该怎么办?可以将洁牙机组合起来以避免一次性操作,而只是“更新”洁牙机?
答案 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