如何使用 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 秒
我正在使用 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 秒