如何使用Scikit-learn Standard Scaler对时间序列数据进行标准化?

时间:2018-10-31 01:51:49

标签: python scikit-learn keras time-series data-processing

我正在使用Keras,因此数据的形状为(batch_size,timesteps,input_dim)。而Standard Scaler仅适合2D数据。

我认为的一种解决方案是使用局部拟合然后进行变换。

scaler = StandardScaler()
for sample in range(data.shape[0]):
    scaler.partial_fit(data[sample])

for sample in range(data.shape[0]):
    data[sample] = scaler.transform(data[sample])

这是正确/有效的方法吗?

1 个答案:

答案 0 :(得分:1)

您有两种可能性

data = np.random.randn(batch_size*time_length*nb_feats).reshape((bsize,time,feats))

第1版正在执行您的操作:

scaler = StandardScaler()
for sample in range(data.shape[0]):
    scaler.partial_fit(data[sample])

for sample in range(data.shape[0]):
    data[sample] = scaler.transform(data[sample])

另一种可能性(版本2)是将数组弄平,装配和变换然后重塑形状

scaler = StandardScaler()
data   = scaler.fit_transform(data.reshape((bsize*time,feats))).reshape((bsize,time,feats))

在我的计算机上

版本1耗时0.8759770393371582秒

版本2需要0.11733722686767578秒