愉快的学习就从翻译开始吧_12-例子中的一些问题

前面的例子作者将数据做了差分,然后又搞了个逆差分,作者说是让数据stationary,我觉得他根本没有说到本质,事实上这个问题相当于速度和加速度的关系,每个月相当于一个单位时间,那么每个月的销量就是这个月的销售速度,差分相当于前后两个月的速度变化,即加速度,那么这个差分就相当于在更深的一层的加速度上来研究问题,好处是它的变化大多数情况下没有原始数据那么剧烈,因为一段时间内大多数情况下不会频发的发生影响数据的事件,拿加速来说就是导致加速度变化的外力不会频繁的变化。这对应于数学上的求导,微分,偏微分什么的!那么问题来了,LSTM经过多次的递代能否发现隐藏的加速?如果不能,或是需要运算的次数非常庞大,那么就最好直接的告诉它本质在哪里,来减小运算开销。

关于缩放,我觉得这作者犯了一个错误

def scale(train, test):
    # fit scaler
    scaler = MinMaxScaler(feature_range=(-1, 1))
    scaler = scaler.fit(train)
    # transform train
    train = train.reshape(train.shape[0], train.shape[1])
    train_scaled = scaler.transform(train)
    # transform test
    test = test.reshape(test.shape[0], test.shape[1])
    test_scaled = scaler.transform(test)
    return scaler, train_scaled, test_scaled

scaler = scaler.fit(train)是确定train的最大,最小值,转换test的时候也用的这个最大,最小值,那就不能保证把test里的数据都转化为-1~1。

scaler, train_scaled, test_scaled = scale(train, test)
print('scaler is :', '\n', scaler, '\n', 'train_scaled is :', '\n', train_scaled, '\n', 'test_scaled is :', '\n',
      test_scaled)

加入上面的打印代码输出结果如下:

MinMaxScaler(copy=True, feature_range=(-1, 1)) 
 train_scaled is : 
 [[-0.15241435 -0.80037766]
 [-0.80037766  0.04828702]
 [ 0.04828702 -0.496628  ]
 [-0.496628    0.17669274]
 [ 0.17669274 -0.21607769]
 [-0.21607769  0.1891017 ]
 [ 0.1891017  -0.1917993 ]
 [-0.1917993  -0.32344214]
 [-0.32344214 -0.52953871]
 [-0.52953871  1.        ]
 [ 1.         -0.96493121]
 [-0.96493121 -0.10709469]
 [-0.10709469 -0.39411923]
 [-0.39411923  0.17453466]
 [ 0.17453466  0.18856218]
 [ 0.18856218 -0.59428109]
 [-0.59428109  0.3633666 ]
 [ 0.3633666  -0.48152145]
 [-0.48152145  0.26625303]
 [ 0.26625303 -0.22632857]
 [-0.22632857  0.55813326]
 [ 0.55813326 -1.        ]
 [-1.          0.26733207]] 
 test_scaled is : 
 [[ 0.26733207 -0.16644187]
 [-0.16644187  0.39088211]
 [ 0.39088211 -0.82411654]
 [-0.82411654  0.51335312]
 [ 0.51335312 -0.35743189]
 [-0.35743189  0.04235231]
 [ 0.04235231  0.59266253]
 [ 0.59266253 -1.05826814]
 [-1.05826814  1.32802806]
 [ 1.32802806 -1.26760183]
 [-1.26760183  0.41947667]

 [ 0.41947667  0.20151066]]

可以看到6个值超出了-1~1的范围,所以我一直吐槽这个作者有些地方叙述混乱,果然就在代码中出了问题。这个模型使用前23个数据(差分把第一个数据弄没了)训练得到的权重和偏置来预测后面12个数据,这种固定方法,必然是测试数据越靠后偏差越大。

吐槽归吐槽,人无完人,不管怎么说,我们确实找不到更详尽的例子了,下面开始Keras中LSTM多输入时序预测的学习

Multivariate Time Series Forecasting with LSTMs in Keras

猜你喜欢

转载自blog.csdn.net/dreamscape9999/article/details/80678695
今日推荐