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

How to do standardization on time series data with Scikit-learn Standard Scaler?

我正在使用 Keras, so the shape of data is (batch_size, timesteps, input_dim). And 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])

这是correct/efficient方法吗?

你有两种可能

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 秒