利用LSTM预测时间序列未来........

ps.非常感谢各位大佬对这篇帖子的关注,我也没想到会这么多评论  - -!

已经写了很久啦,因为工作原因,后边可能不会来维护和回复评论了,谢谢。

这篇帖子只是提出了一点 lstm 的时间序列预测方法和疑问,抛砖引玉!


 

< ----------------- 正文-------------------------------- >

 

最近在做一个东西,用到了LSTM时间序列预测。。。

网上搜索吗,比如别人做过的比较典型的有:

1.  https://blog.csdn.net/aliceyangxi1987/article/details/73420583  

2. https://www.cnblogs.com/mtcnn/p/9411597.html

3. https://cloud.tencent.com/developer/article/1083338  等等

他们都是利用已有的一条序列,当成Y ,再利用它往前滑动t-1构造一条序列X,

fit(X,Y)来做。以及后边利用测试集看表现啊 评估啊  等等。。。

然而,没有一个能够说利用LSTM如何真正预测未来的???

(因为按照他们这种做法,预测未来是没有这个所谓的 一个X  来喂给训练好的模型的?)

 

《《《-----------------------------滑动窗口的LSTM方法预测:----------------------------------------------------------------------------》》》

前面描述的都是比如一个时间序列的value为

Y :[10, 20, 30, 40, 50, 60, 70, 80, 90]  他们会为其构造一条X  按照逐个t-1时刻的X对应逐个t时刻Y值。

X:[0, 10, 20, 30, 40, ......]      具体参考上述链接做法。

然后再利用构造的X,Y训练lstm模型,达到预测的目地。

但是这个做法,无法预测未来。

 

经过搜索,以上方法是数据LSTM中sequence to sequence 的方法的。一对一,适用于中英文翻译方法!!

或者一对一预测等等,不是预测未来的方法~ 所以前面那些链接中,应该是对sequence to sequence有点误会!

因此,我们应该采用滑动窗口的数据预测未来一个数据,sequence to vector的,可以根据前面几个预测下一个,比如下面:

比如X[t-3,t-2,t-1]   预测X[t],  此时X[t]可以当作标签Y

针对上述数据我们可以构造 (左为X, 右为Y ):

[10,20,30], [40]

[20,30,40], [50]

[30,40,50], [60]  

.......................

这样依赖,利用多个滑动窗口(此处为3)来预测下一个数据的目地。。。。

预测未来如何逐个添加? 答:唯有预测一个,往后添加一个,再加入预测。

缺点:误差会积累!

 

《《《-----------------------------滑动窗口的LSTM方法python实例:------------------------------------------------》》》

from numpy import array
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense


'''
下面的split_sequence()函数实现了这种行为,并将给定的单变量序列分成多个样本,其中每个样本具有指定的时间步长,输出是单个时间步。
'''
# split a univariate sequence into samples
def split_sequence(sequence, n_steps):
    X, y = list(), list()
    for i in range(len(sequence)):
        # find the end of this pattern
        end_ix = i + n_steps
        # check if we are beyond the sequence
        if end_ix > len(sequence)-1:
            break
        # gather input and output parts of the pattern
        seq_x, seq_y = sequence[i:end_ix], sequence[end_ix]
        X.append(seq_x)
        y.append(seq_y)
    return array(X), array(y)


if __name__ == '__main__':

    # define input sequence
    raw_seq = [10, 20, 30, 40, 50, 60, 70, 80, 90]
    print raw_seq
    # choose a number of time steps
    n_steps = 3
    # split into samples
    X, y = split_sequence(raw_seq, n_steps)
    print X, y
    # reshape from [samples, timesteps] into [samples, timesteps, features]
    n_features = 1
    X = X.reshape((X.shape[0], X.shape[1], n_features))
    # define model
    model = Sequential()
    model.add(LSTM(50, activation='relu', input_shape=(n_steps, n_features)))  # 隐藏层,输入,特征维
    model.add(Dense(1))
    model.compile(optimizer='adam', loss='mse')
    # fit model
    model.fit(X, y, epochs=300, batch_size=1, verbose=2)  # 迭代次数,批次数,verbose决定是否显示每次迭代
    # demonstrate prediction
    x_input = array([70, 80, 90])
    x_input = x_input.reshape((1, n_steps, n_features))
    yhat = model.predict(x_input, verbose=0)
    print x_input, yhat
    print(yhat)

预测未来?

比如[70,80,90] 预测一个假如为[100]

可以继续构造[80,90,100], 预测下一个。。。。

等等....

本文方法灵感参考转载于:

https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/

  • 47
    点赞
  • 247
    收藏
    觉得还不错? 一键收藏
  • 52
    评论
### 回答1: lstm-regression-master.rar 是一个基于 LSTM 算法在 Matlab 中进行短期风速预测的项目文件。在该项目中,利用 LSTM 算法对风速数据进行建模和预测。 首先,我们需要了解 LSTM(Long Short-Term Memory)算法的基本原理。LSTM 是一种循环神经网络(RNN)的特殊类型,能够处理和预测序列数据,适用于时间相关性较强的数据预测任务。LSTM 利用长期和短期记忆单元来捕捉和学习序列数据中的长期依赖关系,通过输入和输出门以及遗忘门来控制记忆单元中的信息流动。 在 MatLab 中,我们可以利用 lstm-regression-master.rar 中的文件进行短期风速预测。这个项目文件夹包含了 LSTM 模型的实现代码以及所需的辅助函数和数据集。 首先,我们需要准备好风速数据集。可以从实际观测得到的风速数据中提取用于训练和测试的样本。这些样本包含了一段时间内的风速观测值和相应的目标输出,即未来一段时间内的风速。 然后,我们可以使用 lstm_train.m 文件来训练 LSTM 模型。这个函数会读取准备好的风速数据集,设定参数和模型的结构,利用训练数据集进行模型的训练,并保存训练好的模型。 接下来,我们可以使用 lstm_predict.m 文件来对未来的风速进行预测。这个函数会读取训练好的 LSTM 模型,利用测试数据集进行预测,并返回预测结果。预测结果可以用来评估模型的性能。 通过对短期风速进行预测,我们可以利用 lstm-regression-master.rar 中的 LSTM 算法模型在 Matlab 环境下实现风速预测任务。这个项目文件提供了一个使用 LSTM 算法的基本框架,可以根据具体的需求进行参数调整和优化,以得到更准确的风速预测结果。 ### 回答2: 基于LSTM算法可以在Matlab上对短期风速进行预测LSTM是一种循环神经网络结构,可以有效处理时间序列数据,并且在短期风速的预测中取得了良好的效果。 首先,我们需要准备好数据集。可以使用lstm-regression-master.rar中的数据集作为输入。该数据集应该包括历史的风速数据,以及对应的时间戳。在Matlab中,可以使用readtable函数将数据集读取到一个table中,然后分别提取出风速数据和时间戳数据。 接下来,我们需要对数据进行预处理。首先,我们可以对风速数据进行归一化处理,将其转换到一个特定的范围内,通常是0到1之间。可以使用matlab中的MinMaxScaler函数来实现。然后,可以将时间戳数据转换为适合LSTM算法输入的格式,例如将其转换为一维向量。 然后,我们可以使用LSTM算法对短期风速进行预测。在Matlab中,可以使用trainNetwork函数来训练LSTM模型。该函数需要指定训练数据、目标数据和一些超参数,例如LSTM网络的层数、隐藏层的大小等等。经过训练后,可以使用该模型对新的输入数据进行预测,使用predict函数即可。 最后,可以根据预测结果评估模型的性能,通常使用均方根误差(RMSE)等指标来衡量预测结果与实际结果之间的误差大小。可以使用matlab中的evaluateRegression函数来计算这些指标。 总之,基于LSTM算法在Matlab中预测短期风速的步骤包括数据准备、数据预处理、模型训练和评估等。通过这些步骤,可以得到一个准确性较高的风速预测模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值