【问题标题】:How to do standardization on time series data with Scikit-learn Standard Scaler?如何使用 Scikit-learn Standard Scaler 对时间序列数据进行标准化?
【发布时间】:2019-04-04 03:19:03
【问题描述】:

我用的是Keras,所以数据的形状是(batch_size, timesteps, input_dim)。而Standard Scaler 正好适合二维数据。

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

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])

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

【问题讨论】:

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


    【解决方案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 秒

    【讨论】:

    • 数据太大时是否应该选择版本1?
    • 是的,如果数据太大,您可以使用 partial_fit。但是,您不需要逐个迭代样本。这需要太多时间。也许您可以批量进行部分拟合
    猜你喜欢
    • 2014-05-25
    • 2014-10-17
    • 2018-08-12
    • 2015-08-01
    • 2015-07-31
    • 2015-06-27
    • 2016-04-18
    • 2021-01-15
    • 2015-04-08
    相关资源
    最近更新 更多