Matlab实现时间序列预测分类实例代码

目录
  • 一、数据准备
  • 二、时间序列预测分类
    • 1、输入为xt,输出是yt
    • 2、有x值,有y值:NARX
      • (1)选择模型类型
      • (2)选择输出,只有y_t
      • (3)选择70%用来作为训练数据,15%用来作为验证使用,15%用来测试
      • (4)选择delay
      • (5)开始训练
      • (6)得到参数
      • (7)将神经网络导出代码
    • 3、无x,有y值:NAR
  • 三、总结

Matlab从2010b版本以后,神经网络工具箱已经升级为7.0,功能大大加强。在之前的版本做时间预测是比较麻烦操作的,MathWorks公司对时间序列预测做了详细的解决,跑模型非常简便。

下面通过一个例子演示在Matlab实现时间序列预测。

一、数据准备

极客范儿在夏天吹电扇的体温变化

时间 风速 温度
0 1 37.21405
0.12457 1.01 37.26016
0.24915 1.02 37.26324
0.37373 1.03 37.31242
0.4983 1.04 37.3155
0.62258 1.05 37.36468
0.74745 1.06 37.36776
0.87203 1.07 37.41694
0.99661 1.08 37.42002
% 原始数据读入到Matlab中
rawData=xlsread('time_series_data.xlsx','sheet1','A2:C52);
% 第一列时间,第二列风速,第三列温度
% yt第三列
y_t=rawData(:,3);
% xt第二列
x_t=rawData(:,2);

二、时间序列预测分类

时间序列预测分为三类:

1、输入为xt,输出是yt

即有过去的输入xt,也有过去的输出yt,同时当前的输出不仅依赖于过去的输入,也同时依赖于过去的输出

过去时间段温度的变化,预测将来某个时间温度的变化,这种情况就是只有过去的输出

%   x_t - 时间序列输入
%   y_t - 反馈时间序列

X = tonndata(x_t,false,false);
T = tonndata(y_t,false,false);

% 选择训练功能
% 'trainlm'通常是最快
% 'trainbr'耗时较长,但可能更适合解决挑战性的问题
% 'trainscg'使用更少的内存。适用于低内存情况
trainFcn = 'trainlm';  % Levenberg-Marquardt反向传播

% 创建一个非线性自回归网络
feedbackDelays = 1:6;
hiddenLayerSize = 20;
net = narnet(feedbackDelays,hiddenLayerSize,'open',trainFcn);

% 为训练和模拟准备数据
% PREPARETS函数为特定网络准备时间序列数据
% 移动时间的最小量,以声明填充输入状态和层
% 使用PREPARETS允许保留原始的时间序列数据不变,同时轻松定制它的网络与不同
% 具有开环或闭环反馈模式的延迟数
[x,xi,ai,t] = preparets(net,{},{},T);

% 建立训练,验证,测试的数据
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

% 训练静态神经网络
[net,tr] = train(net,x,t,xi,ai);

% 测试神经网络
y = net(x,xi,ai);
e = gsubtract(t,y);
performance = perform(net,t,y)

% 查看神经网络
view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, ploterrhist(e)
%figure, plotregression(t,y)
%figure, plotresponse(t,y)
%figure, ploterrcorr(e)
%figure, plotinerrcorr(x,e)

% 提前预测网络
% 利用该网络进行多步预测
% CLOSELOOP函数将反馈输入替换为直接输入
% 从外部层连接
nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(netc)
[xs,xis,ais,ts] = preparets(nets,X,{},T);
ys = nets(xs,xis,ais);
stepAheadPerformance = perform(nets,ts,ys)

2、有x值,有y值:NARX

只有过去的输出

如果给环境加一个风扇,这时候有了风速,过去时间风速在改变,同时也在影响温度的改变

Matlab现在提供时间序列预测工具箱,可以在图形界面上进行调参选择,使用命令ntstool打开时间序列预测工具箱

类似股票的模型,只知道早上9:30开市到11:30的股票行情,预测11:30之后的股票行情,不考虑任何的输入

(1)选择模型类型

(2)选择输出,只有y_t

(3)选择70%用来作为训练数据,15%用来作为验证使用,15%用来测试

(4)选择delay

(5)开始训练

(6)得到参数


(7)将神经网络导出代码

3、无x,有y值:NAR

没有线性的输入输出,很少遇到这种情况

三、总结

Matlab从2010b版本以后,使用图形界面训练网络调参,生成的代码与手敲的功能无异,Matlab时间序列预测工具箱实用而且好用。

到此这篇关于Matlab实现时间序列预测分类的文章就介绍到这了,更多相关Matlab时间序列预测内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Matlab实现时间序列预测分类实例代码

    目录 一.数据准备 二.时间序列预测分类 1.输入为xt,输出是yt 2.有x值,有y值:NARX (1)选择模型类型 (2)选择输出,只有y_t (3)选择70%用来作为训练数据,15%用来作为验证使用,15%用来测试 (4)选择delay (5)开始训练 (6)得到参数 (7)将神经网络导出代码 3.无x,有y值:NAR 三.总结 Matlab从2010b版本以后,神经网络工具箱已经升级为7.0,功能大大加强.在之前的版本做时间预测是比较麻烦操作的,MathWorks公司对时间序列预测做了详

  • Matlab实现灰色预测的示例代码

    目录 模型介绍 基础代码 基础代码+修饰 模型介绍 略微带过一下原理: 灰色预测对于趋势不强的数据,将其原始数据进行累加后得到具有明显趋势的新数据进行拟合,假设原数据为: 则新数据集X(1)中数据为: 通常认为累加数据服从指数分布,欸那我们直接假设: 直接进行一个非线性拟合不就完事了,但是,从小学二年级开始,老师就教导我们,像这用指数函数拟合啊,各个参数的变化对于整体曲线的影响效果差别很大啊,直接拟合误差会很大啊,怎么能给他整成一个线性拟合啊?(直接拟合我有试过,能够大体描述趋势并做出预测,但是

  • 2款PHP无限级分类实例代码

    本文章总结了两款PHP无限级分类实现程序代码,有需要学习的朋友可参考一下. 主要思路:首先看第三行和第四行,父类ID(PARENTID)的值是1,表示属于id=1这个类的子类,而,一,二两行因为是一级分类,没有上级分类,所以父类ID(PARENTID)的值是0,表示初级分类,依次类推便实现了无限级分类.最终的效果是: ├一级分类A ├─┴二级分类A ├─┴二级分类B ├一级分类B 然后就是程序,这里以PHP作为描述语言,可以很方便的改成其他语言,因为原理相似,就是一个递归而已. <?php $d

  • 基于Pytorch实现的声音分类实例代码

    目录 前言 环境准备 安装libsora 安装PyAudio 安装pydub 训练分类模型 生成数据列表 训练 预测 其他 总结 前言 本章我们来介绍如何使用Pytorch训练一个区分不同音频的分类模型,例如你有这样一个需求,需要根据不同的鸟叫声识别是什么种类的鸟,这时你就可以使用这个方法来实现你的需求了. 源码地址:https://github.com/yeyupiaoling/AudioClassification-Pytorch 环境准备 主要介绍libsora,PyAudio,pydub

  • Asp.net 无限级分类实例代码

    在网上找了很久也没有找到例子,没办法了,想偷懒也偷不成了,还是自己老老实实的写一个吧.不多废话,下面请看我做的详细方法. 1.无限级分类肯定要数据库支持啦,用户可以动态添加他们的分类嘛,下面是数据库的结构: 数据库主要有三个字段,这是最基本的了.第一个是主键,第二个是分类的名称了,第三个是父级目录id号. 2.成品的效果图:(大家最关心的是不是这个啊?看看是什么样子再看程序怎么吧) 看!!就长这个模样啦,这个层次关系就是上面那个数据所显示的结果.怎么样?还行吧... 3.最后就是提供程序咯,程序

  • php上传文件分类实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <?php /** * 文件上传类 * @author lijiamin * @time 2017-02-17 * @email 1195989301@qq.com */ class Upload{ private $allowExt = array('gif','jpg','jpeg','bmp','png','swf');//限制文件上传的后缀名 private $maxSize = 1;//限制最大文件上传1M /** * 获取文件的信

  • php递归方法实现无限分类实例代码

    数组: 复制代码 代码如下: $items = array( array('id' => 1, 'pid' => 0, 'name' => '一级11' ), array('id' => 11, 'pid' => 0, 'name' => 'www.jb51.net 一级12' ), array('id' => 2, 'pid' => 1, 'name' => '二级21' ), array('id' => 10, 'pid' => 11,

  • 时间序列预测中的数据滑窗操作实例(python实现)

    目录 撰写背景 什么是数据滑窗 代码实现 单特征时间序列 多特征时间序列 注意事项 总结 撰写背景 面向数据分析的小白,水平有限,错误难免,欢迎指正. 什么是数据滑窗 进行机器学习时,一般都要涉及到划分训练集和测试集的步骤.特别地,在做数据预测时,一般把预测的依据(也就是历史数据)称作X,把需要预测的数据称为y.即首先把原始数据划分为train_X, train_y这两个训练数据集和test_X, test_y这两个测试数据集. 对于时间序列数据的预测,往往是建立由好几个历史数据预测下一时刻的未

  • 运用JSP+ajax实现分类查询功能的实例代码

    本文主要是介绍了运用JSP+ajax实现分类查询功能的实例代码,分享给大家供大家参考,具体如下: 这次是对小学期关于大学毕业生信息管理系统课程设计中遇到的一些问题和解决方法进行记录和分享. 题目要求:提供企业招聘信息(本年度或历年)查询功能: 首先建立一个jsp文件用来显示数据库信息,并在上面加输入条件的文本框和查询按钮,在这个jsp文件中需要完成一个js函数在用于完成查询功能. <%@ page language="java" pageEncoding="UTF-8&

  • Python中的支持向量机SVM的使用(附实例代码)

    除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导入sklearn算法包 Scikit-Learn库已经实现了所有基本机器学习的算法,具体使用详见官方文档说明:http://scikit-learn.org/stable/auto_examples/index.html. skleran中集成了许多算法,其导入包的方式如下所示, 逻辑回归:from

随机推荐