首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在直接多步预测策略中,增加预测步长会使预测图变平,而不是移动

在直接多步预测策略中,增加预测步长会使预测图变平,而不是移动
EN

Stack Overflow用户
提问于 2018-04-09 02:12:29
回答 1查看 63关注 0票数 0

我在用神经网络做时间序列预测。只要我向网络提供预测步长=0(对于Y,取参考日的值),它看起来就没问题。将预测步长增加N (对于Y,取参考日的值+ N)会使预测图变平,而不是将其移位N。您知道会出什么问题吗?

编辑

至于模型:

代码语言:javascript
复制
model = Sequential()
model.add(Dense(14, input_dim=14, kernel_initializer='normal', activation='relu'))
model.add(Dense(7, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal'))
model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['mae'])

至于数据准备

代码语言:javascript
复制
data0 = renameColumns(addTimestampForwardShift(history[['year', 'month', 'day', 'hour', 'high']], timeShift), 0)
data1 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 1), -1)
data2 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 2), -2)
data3 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 3), -3)
data4 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 4), -4)
data5 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 5), -5)
data6 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 6), -6)
data7 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 7), -7)
data8 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 8), -8)
data9 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 9), -9)
data10 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 10), -10)
data11 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 11), -11)
data12 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 12), -12)
data13 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 13), -13)
data14 = renameColumns(addTimestampBackwardShift(history[['year', 'month', 'day', 'hour', 'high']], 14), -14)

data = pandas.merge(data0, data1, on=['timestamp'], how='left')
data = pandas.merge(data, data2, on=['timestamp'], how='left')
data = pandas.merge(data, data3, on=['timestamp'], how='left')
data = pandas.merge(data, data4, on=['timestamp'], how='left')
data = pandas.merge(data, data5, on=['timestamp'], how='left')
data = pandas.merge(data, data6, on=['timestamp'], how='left')
data = pandas.merge(data, data7, on=['timestamp'], how='left')
data = pandas.merge(data, data8, on=['timestamp'], how='left')
data = pandas.merge(data, data9, on=['timestamp'], how='left')
data = pandas.merge(data, data10, on=['timestamp'], how='left')
data = pandas.merge(data, data11, on=['timestamp'], how='left')
data = pandas.merge(data, data12, on=['timestamp'], how='left')
data = pandas.merge(data, data13, on=['timestamp'], how='left')
data = pandas.merge(data, data14, on=['timestamp'], how='right')

data = data.dropna()

data = data[['high0',
            'high-1',
            'high-2',
            'high-3',
            'high-4',
            'high-5',
            'high-6',
            'high-7',
            'high-8',
            'high-9',
            'high-10',
            'high-11',
            'high-12',
            'high-13',
            'high-14']]

normalized = (data - data.mean()) / (data.max() - data.min())
normalized = normalized.values

X = normalized[:, 1:]
Y = normalized[:, 0]

seed = int(time.time())
numpy.random.seed(seed)

model.fit(X, Y)

对于结果数据(timeshift=12):

代码语言:javascript
复制
    year0  month0  day0  hour0  high0  timestamp  year-1  month-1  day-1  \
0   2014.0    12.0  28.0    0.0   5.15 2014-12-16  2014.0     12.0   15.0   
1   2014.0    12.0  29.0    0.0   5.72 2014-12-17  2014.0     12.0   16.0   
2   2014.0    12.0  30.0    0.0   5.95 2014-12-18  2014.0     12.0   17.0   
3   2014.0    12.0  31.0    0.0   5.75 2014-12-19  2014.0     12.0   18.0 
    hour-1  high-1  year-2  month-2  day-2  hour-2  high-2  year-3  month-3  \
0      0.0    5.21  2014.0     12.0   14.0     0.0    5.21  2014.0     12.0   
1      0.0    5.50  2014.0     12.0   15.0     0.0    5.21  2014.0     12.0   
2      0.0    5.90  2014.0     12.0   16.0     0.0    5.50  2014.0     12.0   
3      0.0    5.89  2014.0     12.0   17.0     0.0    5.90  2014.0     12.0   
rest according to the same pattern
EN

回答 1

Stack Overflow用户

发布于 2018-04-13 04:42:05

  • 看看你的标准化函数。您需要将"data.mean()“替换为"data.min()”,以获得真正的最小-最大比例。此外,我将在之前扩展data ,以将其分解为各个lag功能。

  • 如果你要设置种子,请使用静态值来表示可重复性。否则,没有理由设置种子,因为每次运行都会有所不同。

从这个开始,看看这是否会从平面输出中提高它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49721127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档