精华内容
下载资源
问答
  • 2020-02-05 16:07:15

    //TODO 有空了我找个例子使用python和MLP实现对比一下四种策略

    参考:

    [1] 4 Strategies for Multi-Step Time Series Forecasting, 2017

    [2] Machine Learning Strategies for Time Series Forecasting, 2013

    [3] Recursive and direct multi-step forecasting: the best of both worlds, 2012 [PDF]

    更多相关内容
  • 海洋资源大数据系统中缺陷多步预测方法
  • 海洋资源大数据系统中缺陷多步预测方法.pdf
  • 的直接多步预测模型; 给出了易于实现的动量梯度学习算法, 并对其收敛性进行了验证. 仿真结果表明, 直接多步预 测不依赖于单步预测的结果, 对比单步预测模型能快速、准确地预测船舶横摇运动时间序列, 具有更好的...
  • 基于VMD-Leaky-ESN的电力系统短期负荷多步预测方法.pdf
  • 时间序列连续多步预测方法

    千次阅读 2018-07-13 22:33:00
    Direct Multi-step Forecast Strategy. 同时建多个模型,缺点:没有考虑预测的相邻两个值的相关性 Recursive Multi-step Forecast Strategy.缺点:预测误差往后迅速积累,数据...

    https://machinelearningmastery.com/multi-step-time-series-forecasting/

     

    1. Direct Multi-step Forecast Strategy.   同时建多个模型,缺点:没有考虑预测的相邻两个值的相关性
    2. Recursive Multi-step Forecast Strategy.缺点:预测误差往后迅速积累,数据会很快没有意义
    3. Direct-Recursive Hybrid Multi-step Forecast Strategies.前两者结合起来做预测,
    4. Multiple Output Forecast Strategy.一个模型,一次预测多个输出

    转载于:https://www.cnblogs.com/eagou/p/9307766.html

    展开全文
  • 为了提高风电场短期风速预测的精确度以及预测尺度,提出了一种将小波分解法、经验模式分解法及最小二乘支持向量机相结合对风速时间序列进行短期多步预测建模的方法。该方法采用小波分解法对风速信号进行分解,使之分解...
  • 提出了基于多步预测控制方法的多变量非线性神经网络逆控制方案。利用预测模型对系统动态特性进行预测,使用一个带有时延因子的前馈神经网络作为控制器,利用多步预测性能指标对其在线训练,实现神经网络逆系统;在...
  • 针对离散非线性系统, 利用非线性激励函数的局部线性表示, ...线性多步预测方程给出了直观而有效的线性形式, 并用线性预测控制方法求得控制律, 避免了复杂的非线性优化求 解. 仿真结果表明了该算法的有效性.</p>
  • 为了减小车用汽油机空燃比传输延迟对空燃比控制精度的影响,提出一种基于Elman神经网络的空燃比多步预测模型。通过对空燃比数学模型的分析,确定神经网络空燃比多步预测模型的输入向量,同时,为了提高过渡工况空燃...
  • 针对较强非线性的控制问题, 提出一种以RBF 神经网络为模型的多步预测控制方法. 构建多步预测模型, 并给出预测误差关于控制序列的雅可比矩阵的计算方法. 利用Levenberg-Marquardt(L-M) 算法设计滚动优化策略, 过误差...
  • 针对传感网环境监测应用采集的时间序列数据,提出了一种新的基于高斯过程模型的多步预测方法,实现了对未来时刻的环境监测数据的预测。高斯过程模型通过核函数描述数据的特性,通过对环境监测数据的经验模态分解,...
  • 时间序列多步预测的五种策略

    千次阅读 2022-01-17 00:19:12
    点击蓝字关注我们#TSer#时间序列知识整理系列,持续更新中⛳️后台回复"讨论"加入讨论组交流吧 ????时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值...

    点击蓝字

    关注我们

    #TSer#

    时间序列知识整理系列,持续更新中 ⛳️

    后台回复"讨论"加入讨论组交流吧 🏃

    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。

    通常,时间序列预测描述了预测下一个时间步长的观测值。这被称为“单步预测”,因为仅要预测一个时间步。例如,给定最近7天观察到的温度:

    bb40272de39fafd0dca05b2066e93042.png

    c0b6f9e6da2c88bf2dddd1b9bbac445c.png

    单步预测仅需要在时间步骤8进行预测。在一些时间序列问题中,必须预测多个时间步长。与单步预测相比,这些称为多步时间序列预测问题。

    在开始之前,需要明确一些一直很模糊的问题,也就是时间序列预测的数据形式,我们平常在公众号的一些blog里看到的时间序列预测的数据形式都很简单,并且基本都是单个序列,单变量的序列问题,比如说我们要预测某一个商品的未来销量。这类问题算是最初进入大众视野的时间序列问题的形式,arima,fbprophet之类的都是针对这类问题的。但是在一般复杂业务场景上碰到的问题基本上是成百上千的序列。

    当然我们可以对每个序列单独用arima之类的方法来建模,理论上可以,但是实际上基本不可能,一方面维护成千上万的模型的成本是不可估计的,另一方面不同商品的序列长度差异很大,有的序列长度可能非常完整有1500+个序列数据,有的冷门商品或者是新上的商品序列长度很短可能只有不到10个,这种情况下,后者基本没法单独建模。

    因此实际上我们常见的业务问题的数据形式是这样的:

    商品 日期  销量序列数据
    nike的XXX款衣服 2020-01-01  100
    nike的XXX款衣服 2020-01-02  200
    nike的XXX款衣服 2020-01-03  150
    nike的XXX款衣服 2020-01-04  250
    ...

    这也是web traffic,m5 forecast,favorite store 这些序列比赛的数据的普遍形式,可以说我们面对的主要的问题形式是这样的。

    对这些数据进行建模的时候我们面临最直接的问题就是,使用多少的时间步的历史数据预测未来多少个时间步的未来数据,即时间窗的问题,比如我们就用前一天的数据预测后一天的,那么数据就要变成:

    商品 日期 过去一天销量 销量序列数据
    nike的XXX款衣服 2020-01-01 nan 100
    nike的XXX款衣服 2020-01-02 100 200
    nike的XXX款衣服 2020-01-03 200 150
    nike的XXX款衣服 2020-01-04 150 250
    ...

    这就是我们的所谓的滞后特征,也是时间序列问题中最常见的也是最重要的特征衍生方法。

    一般来说,时间距离约接近的滞后特征对于预测的准确的贡献越大。所以我们会用所谓的窗口的问题,比如你使用 “1阶滞后 2阶滞后……n阶滞后”来预测未来,则你的时间窗的长度为n,当然这个时间窗不一定连续,你可以使用“1阶滞后,3阶滞后,7阶滞后……n阶滞后”等,但是你的时间窗长度仍旧为n,只不过滞后特征的数量变少了而已。

    除此之外,还有一个就是gap的问题,也就是提前多少天预测,实际的应用的时候,很多时候除了多步预测之外,还需要你做提前预测,也就是你可能要提前几天的时间进行预测,例如你需要在11月1日预测11月11日,则就是提前10天做预测,那么进行特征构建的时候也需要注意,滞后特征要从10天前开始做起。

    为了便于描述,这里假设一个序列:[1,2,3,4,5,6,7,8,9,10,X,Y,Z]

    我们要做的是预测未来的3个时间点,X,Y,Z的序列的值,并且为了方便描述,这里我们统一仅仅使用1阶滞后特征。

    000fd5d23a611853a56e963fd070b451.gif

    第一种:直接多步预测

    直接多步预测的本指还是单步预测,多步转单步,比如上面我们要预测3个时间点的序列的值,则我们就构建3个模型:

    model1:[1,2,3,4,5,6,7,8,9],[X]

    model2:[1,2,3,4,5,6,7,8,9],[Y]

    model3:[1,2,3,4,5,6,7,8,9],[Z]

    这种做法的问题是如果我们要预测N个时间步,则复杂度很高,比如预测未来100天,则意味着我们要构建100个模型;

    另外需要注意的是,在使用这种方法的时候,我们在进行特征工程的时候要比较小心,因为我们在序列问题的特征工程过程中常常会涉及到一些lag方法,即滞后特征的引入,比如对于: model1:[1,2,3,4,5,6,7,8,9],[X]

    我们可以构建一阶滞后特征:[1,2,3,4,5,6,7,8,9],[nan,1,2,3,4,5,6,7,8],而待预测的X的一阶滞后是9,是我们已经观测到的值,因此取1阶滞后没有问题。

    但是对于:model2:[1,2,3,4,5,6,7,8,9],[Y] 我们无法使用1阶滞后,因为Y的一阶滞后是X,X并不是我们的观测值,这个时候我们的滞后特征只能从二阶滞后开始做起

    对于后续的model3,model4等,基本是一样的道理

    这里我们仅仅使用了1阶滞后,所以时间窗长度是 1。

    另外需要注意的是,时间窗的长度和我们处理无序的结构化问题有一些区别,我们直观的感受是,长度的概念对应的是样本的数量,但是实际上在结构化数据中,对应的是特征的维度,比如:

    13881dbfdda7d6f1b72c0710c4cc3747.png

    这就是滑动窗口的概念,当我们使用n阶滞后特征训练了一个模型之后,我们可以称这个模型为n阶滞后模型。

    直接预测方法的缺点在于可能会出现较高的方差,特别是如果我们要预测的时间步长比较长的情况下,比如我们要预测未来100个时间步骤,则第100个时间步骤使用的最近的一样观测样本是100个时间步之前的,我们直到,周期约接近当前时间点的滞后特征预测效果越好,间隔时间越长效果越差。

    第二种:递归多步预测

    递归多步预测,递归多步预测的本质还是简单的单步预测,但是和第一种情况不同,递归多步预测不需要预测 时间步个模型,仅仅一个模型就够了。举个例子,假设我们构建了一个3阶滞后模型:

    lag(t-3) lag(t-2) lag(t-1) t
    1 2 3 4
    2 3 4 5
    ...

    则当我们预测的时候,还是以上面的例子为例:

    [1,2,3,4,5,6,7,8,9,10,X,Y,Z]

    我们先预测X,即根据:

    用model 去 predict([8,9,10]) 得到 prediction(X),假设predict出来的结构为11.24,然后我们把预测值当作特征,得到[9,10,11.24],然后用model去predict([9,10,11.24])得到prediction(y),依此类推。

    由于使用预测代替真实值,因此递归策略会累积预测误差,即递归策略的偏差比较大,从而随着预测时间范围的增加,模型的性能可能会迅速下降。

    第三种:直接+递归的混合策略

    可以将直接策略和递归策略结合使用,以提供这两种方法的好处。

    例如,可以为要预测的每个时间步构建一个单独的模型,但是每个模型都可以将模型在先前的时间步进行的预测用作输入值。

    思路也不复杂,和直接预测一样我们要根据n个时间步构造n个模型,还是以原来的例子为例:[1,2,3,4,5,6,7,8,9,10,X,Y,Z]

    我们先构造一个3阶滞后的model 1:[8,9,10][X],然后用model1 进行预测得到prediction(X),然后我们构造model2 ,按照直接预测法的思路,

    model2应该是无法将X作为观测样本进行训练,因此model2可以是[8,9,10][Y],当然,使用直接预测法不一定要构造相同的n阶模型,也可以是[7,8,9,10][Y]……依此类推,但是核心都是无法使用X处的数据,因为X是未知的没有观测到的值,

    那么混合策略的做法是,我们用model1预测X得到prediction(X),然后将这个prediction(X)作为model2的”观测“数据,纳入模型训练,即:

    model2:[9,10,model1.prediction(X)][Y],然后
    model3:[10,model1.prediction(X),model2.prediction(Y)][Z]

    依此类推。

    第四种:多输出策略

    为什么会有上述三种策略呢?本质原因是传统的机器学习算法无法正常处理多输出问题,多步预测的本指是多输出,我们需要多输出模型才能在一个模型里预测多个标签,比如 预测未来的3步是一个3输出模型,这个概念就类似于我们的多标签分类、多标签回归的概念。实际上针对于直接预测法,就是一种常见的使用传统的机器学习算法解决多标签问题的转化方法,而递归预测法本质上还是普通的简单的单标签问题。

    但是深度学习可以很容易的打破这样的限制,这里介绍第四种策略:多输出策略。

    注意,直接进行多输出,则model的形式是:

    model 多输出:[8,9,10][X,Y,Z]

    传统的机器学习算法包括lr gbdt无法直接构建多输出模型而要借助于直接预测、递归预测或者混合策略,但是神经网络可以打破这样的限制,nn可以非常灵活的支持多输入或者多输出的形式。

    778dc80518534391de5bfd32b51acc45.png

    我们只需要把这里的main_output的Dense层的神经元个数设置为 n就可以(n是要预测的未来的时间的步数)。

    这是常见的使用nn进行多步预测的网络设计,特点就只是输出层的nn根据预测的时间步数进行设置而已。

    有没有发现和序列标注问题的形式非常类似?早期使用nn来处理序列标注(序列标注问题是一个多分类问题),简单直观的思路就是输出接一个n分类层。

    这种方法的问题就是,我们的标签如果是时序依赖的,比如时间序列预测未来3个时间步骤t+1,t+2,t+3,如果我们直接使用多输出的方式,则 t+1,t+2,t+3 三个标签我们其实是认为它们是完全独立的,但是实际上它们是存在序列依赖性的,这个问题和序列标注早期的简单方法存在的问题是一样的,就是没有考虑标签的序列依赖的性质。因此就诞生了第五种策略,也是基于深度学习的方法。

    第五种:seq2seq结构

    fdc54122c2c009e7b2e8fe0c7d922ec6.png

    这是一个常见的问答系统的seq2seq结构,以上面的例子为例:

    [1,2,3,4,5,6,7,8,9,10][X,Y,Z],我们可以直接构造上述seq2seq结构的输入输出样本,假设我们使用3阶滞后,预测未来的3个时间步,则样本构造为:

    input output
    [1,2,3][4,5,6]
    [2,3,4],[5,6,7]
    [3,4,5],[6,7,8]
    .....
    [8,9,10],[X,Y,Z]

    在seq2seq的结构中,我们使用LSTM或者CNN的网络结构作为encoder和decoder的组件即可,这种情况下,当然,attention+seq2seq,transformer,bert等网络结构都可以直接处理这样的问题。

    并且,他们都可以考虑输出的标签之间的序列依赖性。

    推荐阅读:

    我的2022届互联网校招分享

    我的2021总结

    浅谈算法岗和开发岗的区别

    互联网校招研发薪资汇总

    2022届互联网求职现状,金9银10快变成铜9铁10!!

    公众号:AI蜗牛车

    保持谦逊、保持自律、保持进步

    52e03c7f0466f363ff999d3e542d34a9.png

    发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

    发送【1222】获取一份不错的leetcode刷题笔记

    发送【AI四大名著】获取四本经典AI电子书

    展开全文
  • 针对一类P ID 型模糊控制器, 提出基于多步预测性能指标的模糊控制器参数优化设计方法. 通过最小化多 步预测性能指标和调整比例因子, 定量给出了控制器的设计准则, 对于现场操作人员具有一定的指导意义. 仿真...
  • 将支持向量机技术应用于水泵的时间序列多步预测中。为提高预测精度,提出利用多个测量通道获得的多时间序列进行预测,并通过水泵电机上获得的实际测量数据进行对比分析,证明该方法在设备长期预测中具有较好的预测精度...
  • 递归预测值上展开, 实现对非线性系统多步预测输出值的二次逼近, 减少了预测误差. 进而通过对P ID 型多步预测 性能指标函数极小化求取控制量. 控制器与广义预测控制器结构相似, 其参数通过神经网络在线辨识获得....
  • 该项目的目的是研究时空数据的多步提前预测中的两个方面: 动态模型与静态模型:我们将比较几种静态模型和动态模型的性能。 动态模型都具有递归神经网络作为其体系结构的一部分。 在这些模型中,先前时间步长中的...
  • 综合运用上游路段、当前路段的实时和历史行程时间数据,从历史数据中寻找与当前日期交通状况最接近的历史日期,解决卡尔曼滤波未来一段时间内没有观测值而无法进行多步预测的问题.实验表明,算法能够合理地预测未来几个...
  • LSTM 单变量多步预测航空乘客复杂版

    千次阅读 2021-08-26 19:55:54
    LSTM 航空乘客预测单步预测的两种情况。 简单运用LSTM 模型进行预测分析。 加入注意力机制的LSTM 对航空乘客预测采用了目前市面上比较流行的注意力机制,将两者进行结合预测。 多层 LSTM 对航空乘客预测 简单运用...

    前言

    1. LSTM 航空乘客预测单步预测的两种情况。 简单运用LSTM 模型进行预测分析。
    2. 加入注意力机制的LSTM 对航空乘客预测采用了目前市面上比较流行的注意力机制,将两者进行结合预测。
    3. 多层 LSTM 对航空乘客预测 简单运用多层的LSTM 模型进行预测分析。
    4. 双向LSTM 对航空乘客预测双向LSTM网络对其进行预测。
    5. MLP多层感知器 对航空乘客预测简化版 使用MLP 对航空乘客预测
    6. CNN + LSTM 航空乘客预测采用的CNN + LSTM网络对其进行预测。
    7. ConvLSTM 航空乘客预测采用ConvLSTM 航空乘客预测
    8. LSTM的输入格式和输出个数说明 中对单步和多步的输入输出格式进行了解释
    9. LSTM 单变量多步预测航空乘客

    本文采用LSTM网络多步进行预测,复杂版

    程序

    复杂版
    前一步预测下两步

    # 单变量,多步预测
    # 第二种方法尝试
    
    from pandas import DataFrame
    from pandas import Series
    from pandas import concat
    from pandas import read_csv
    from pandas import datetime
    from sklearn.metrics import mean_squared_error
    from sklearn.metrics import mean_absolute_error
    from sklearn.preprocessing import MinMaxScaler
    from keras.models import Sequential
    from keras.layers import Dense
    from keras.layers import LSTM
    from math import sqrt
    from matplotlib import pyplot
    from numpy import array
     
     
     
    # 将时间序列转换为监督类型的数据序列
    def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
        n_vars = 1 if type(data) is list else data.shape[1]
        df = DataFrame(data)
        cols, names = list(), list()
        # 这个for循环是用来输入列标题的 var1(t-1)var1(t)var1(t+1)var1(t+2)
        for i in range(n_in, 0, -1):
            cols.append(df.shift(i))
            names += [('var%d(t-%d)' % (j + 1, i)) for j in range(n_vars)]
        # 转换为监督型数据的预测序列 每四个一组,对应 var1(t-1)var1(t)var1(t+1)var1(t+2)
        for i in range(0, n_out):
            cols.append(df.shift(-i))
            if i == 0:
                names += [('var%d(t)' % (j + 1)) for j in range(n_vars)]
            else:
                names += [('var%d(t+%d)' % (j + 1, i)) for j in range(n_vars)]
        # 拼接数据
        agg = concat(cols, axis=1)
        agg.columns = names
        # 把null值转换为0
        if dropnan:
            agg.dropna(inplace=True)
        print(agg)
        return agg
     
        
    # 对传入的数列做差分操作,相邻两值相减 ,消除趋势的标准方法是差分化数据
    def difference(dataset, interval=1):
        diff = list()
        for i in range(interval, len(dataset)):
            value = dataset[i] - dataset[i - interval]
            diff.append(value)
        return Series(diff)
     
        
    # 将序列转换为用于监督学习的训练和测试集
    def prepare_data(series, n_test, n_lag, n_seq):
        # 提取原始值
        raw_values = series.values
        # 将数据转换为静态的
        diff_series = difference(raw_values, 1)
        diff_values = diff_series.values
        diff_values = diff_values.reshape(len(diff_values), 1)
        # 重新调整数据为(-1,1)之间
        scaler = MinMaxScaler(feature_range=(0, 1))
        scaled_values = scaler.fit_transform(diff_values)
        scaled_values = scaled_values.reshape(len(scaled_values), 1)
        # 转化为有监督的数据X,y
        supervised = series_to_supervised(scaled_values, n_lag, n_seq)
        supervised_values = supervised.values
        # 分割为测试数据和训练数据
        train, test = supervised_values[0:-n_test], supervised_values[-n_test:]
        return scaler, train, test
     
        
    # 匹配LSTM网络训练数据
    def fit_lstm(train, n_lag, n_seq, n_batch, nb_epoch, n_neurons):
        # 重塑训练数据格式 [samples, timesteps, features]
        X, y = train[:, 0:n_lag], train[:, n_lag:]
        X = X.reshape(X.shape[0], 1, X.shape[1])
        
        # 配置一个LSTM神经网络,添加网络参数
        model = Sequential()
        model.add(LSTM(n_neurons, batch_input_shape=(n_batch, X.shape[1], X.shape[2]), stateful=True))
        model.add(Dense(y.shape[1]))
        model.compile(loss='mean_squared_error', optimizer='adam')
        
        # 调用网络,迭代数据对神经网络进行训练,最后输出训练好的网络模型
        for i in range(nb_epoch):
            model.fit(X, y, epochs=nb_epoch, batch_size=n_batch, verbose=0, shuffle=False)
            model.reset_states()
        return model
     
        
    # 用LSTM做预测
    def forecast_lstm(model, X, n_batch):
        # 重构输入参数 [samples, timesteps, features]
        X = X.reshape(1, 1, len(X))
        # 开始预测
        forecast = model.predict(X, batch_size=n_batch)
        # 结果转换成数组
        return [x for x in forecast[0, :]]
     
    
        
    # 利用训练好的网络模型,对测试数据进行预测
    def make_forecasts(model, n_batch, train, test, n_lag, n_seq):
        forecasts = list()
        # 预测方式是用一个X值预测出后三步的Yfor i in range(len(test)):
            X, y = test[i, 0:n_lag], test[i, n_lag:]
            # 调用训练好的模型预测未来数据
            forecast = forecast_lstm(model, X, n_batch)
            # 将预测的数据保存
            forecasts.append(forecast)
        return forecasts
     
        
    # 对预测后的缩放值(-11)进行逆变换
    def inverse_difference(last_ob, forecast):
        # invert first forecast
        inverted = list()
        inverted.append(forecast[0] + last_ob)
        # propagate difference forecast using inverted first value
        for i in range(1, len(forecast)):
            inverted.append(forecast[i] + inverted[i - 1])
        return inverted
     
        
        
    # 对预测完成的数据进行逆变换
    def inverse_transform(series, forecasts, scaler, n_test):
        inverted = list()
        for i in range(len(forecasts)):
            # create array from forecast
            forecast = array(forecasts[i])
            forecast = forecast.reshape(1, len(forecast))
            # 将预测后的数据缩放逆转换
            inv_scale = scaler.inverse_transform(forecast)
            inv_scale = inv_scale[0, :]
            # invert differencing
            index = len(series) - n_test + i - 1
            last_ob = series.values[index]
            # 将预测后的数据差值逆转换
            inv_diff = inverse_difference(last_ob, inv_scale)
            # 保存数据
            inverted.append(inv_diff)
        return inverted
     
        
    # 评估每个预测时间步的RMSE
    def evaluate_forecasts(test, forecasts, n_lag, n_seq):
        for i in range(n_seq):
            actual = [row[i] for row in test]
            predicted = [forecast[i] for forecast in forecasts]
            rmse = sqrt(mean_squared_error(actual, predicted))
            print('t+%d RMSE: %f' % ((i + 1), rmse))
            mae = mean_absolute_error(actual, predicted)
            print('t+%d MAE: %f' % ((i + 1), mae))
     
     
    # 在原始数据集的上下文中绘制预测图
    def plot_forecasts(series, forecasts, n_test):
        # plot the entire dataset in blue
        pyplot.plot(series.values)
        # plot the forecasts in red
        for i in range(len(forecasts)):
            off_s = len(series) - n_test + i - 1
            off_e = off_s + len(forecasts[i]) + 1
            xaxis = [x for x in range(off_s, off_e)]
            yaxis = [series.values[off_s]] + forecasts[i]
            pyplot.plot(xaxis, yaxis, color='red')
        # show the plot
        pyplot.show()
     
     
    # 加载数据
    series = read_csv('airline-passengers.csv', usecols=[1], engine='python')
    #series = series.values.astype('float64')
    # print(len(series))
    
    # 配置网络信息
    n_lag = 1  # 时间步长
    n_seq = 2  # 预测步长
    n_test = len(series)-int(len(series)*0.8)  # 测试集长度
    # print(n_test)
    # LSTM 中的超参数
    n_epochs = 10
    n_batch = 1
    n_neurons = 32
    # 准备数据
    scaler, train, test = prepare_data(series, n_test, n_lag, n_seq)
    # 准备预测模型
    model = fit_lstm(train, n_lag, n_seq, n_batch, n_epochs, n_neurons)
    # 开始预测
    forecasts = make_forecasts(model, n_batch, train, test, n_lag, n_seq)
    # 逆转换训练数据和预测数据
    forecasts = inverse_transform(series, forecasts, scaler, n_test + 2)
    # 逆转换测试数据
    actual = [row[n_lag:] for row in test]
    actual = inverse_transform(series, actual, scaler, n_test + 2)
    # 比较预测数据和测试数据,计算两者之间的损失值
    evaluate_forecasts(actual, forecasts, n_lag, n_seq)
    # 画图
    plot_forecasts(series, forecasts, n_test + 2)
    
    

    结果展示:

    t+1 RMSE: 49.609525
    t+1 MAE: 41.189362
    t+2 RMSE: 83.477126
    t+2 MAE: 68.233978
    

    在这里插入图片描述

    总结

    复杂版的,代码写成函数形式,作为一个整体,可复用性强,理解起来稍微麻烦一些。
    总体的思路,代码还是一样,处理数据的时候有点变化。

    展开全文
  • 回归预测 | MATLAB实现CNN-LSTM多变量多步预测 目录回归预测 | MATLAB实现CNN-LSTM多变量多步预测基本介绍模型特点程序设计学习总结参考资料 基本介绍 本次运行测试环境MATLAB2020b,MATLAB实现CNN-LSTM多变量多步...
  • support vectormachine,LS—SVM)的话务量预测方法,采用自相关分析法确定LS—SVM建模输入样本的嵌入维数和延迟时间,最 大限度地保留历史信息并降低样本的维数;在此基础上,以最少量预测值代替真实值构成多步预测...
  • 首先在本文中不考虑已知序列的预测,即不使用观测值去进行下一步的预测,这在实际中是没有应用意义的,除非是已知实验数据再去进行一个模型的验证。 第一步:加载数据,并进行数据预处理 load Forcedata_1.mat %...
  • 对网络流量时间序列进行相空间重构之后,利用一种改进的回声状态网络进行网络流量的多步预测。提出一种改进的和声搜索优化算法对回声状态网络的相关参数进行优化以提高预测精度。利用网络流量的公共数据集以及实际...
  • PyTorch中实现LSTM多步长时间序列预测的几种方法总结(负荷预测
  • 在对SCATS线圈数据进行预处理的基础上,设计了一种基于动态神经网络的短时多步预测双层模型,包括基于NARX(Nonlinearautoregressivemodelwithexogenousinputs)神经网络的多步预测方法以及基于FTD(Focusedtime-...
  • 目录时序预测 | MATLAB实现LSTM时间序列未来多步预测基本介绍程序设计直接多步预测递归多步预测多输出策略参考资料总结致谢 基本介绍 实际工程中,未来预测是值得研究的课题之一,大部分深度模型在短期预测上表现...
  • 针对混沌时间序列的多步预测, 提出了基于最大互信息(MMI) 的建模方法. 首先建立时间延迟、嵌入维 数和预测步长在相空间的最大信息量模型; 然后利用遗传算法求解并确定混沌时间序列的最佳预测结构; 最后对 ...
  • 为了进一步改善悉尼自适应交通控制系统(Sydney coordinated adaptive traffic system,SCATS)线圈数据短时多步预测的效果,在对SCATS线圈数据进行预处理的基础上,将当前与之前若干时间间隔的交通数据及对应的时间...
  • 根据跳频频率序列具有混沌特性,在相空间重构理论基础上提出一种用于跳频频率序列预测的贝叶斯网络模型。该模型将重构后的整个相空间作为先验...仿真结果表明该方法具有良好的多步预测能力,并能有效地克服过拟合现象。
  • 设计一种次序优化机制,提出一类饱和受限不确定系统的次序优化多步预测控制方法.将系统的输入分解成多个子集合,在各采样周期仅对其中一个集合的输入进行优化,待优化的输入保持上一优化值.针对每个输入集合,确定闭环...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,914
精华内容 1,165
关键字:

多步预测方法