【数模】预测模型

2023-11-16


一、灰色系统

  • 白色系统:系统信息完全明确
  • 灰色系统:系统部分信息已知,部分信息未知
    • 对在一定范围内变化的、与时间有关的灰色过程进行预测。
    • 过程:原始数据找规律→生成强规律性的数据序列→建立微分方程来预测未来趋势
  • 黑色系统:系统的内部信息未知

二、GM(1,1)模型: Grey(Gray) Model

2.1 基本概念及原理

  • GM(1,1)是使用原始的离散非负数据列,通过一次累加生成削弱随机性的较有规律的新的离散数据列 → 通过建立微分方程模型,得到在离散点处的解经过累减生成的原始数据的近似估计值 → 从而预测原始数据的后续发展。

    • 本节只探究GM(1,1)模型,第一个‘1’表示微分方程是一阶的,后面的‘1’表示只有一个变量在这里插入图片描述
  • 原理介绍:(见第12节课件P4-15)

  • GM(1,1)模型的本质是有条件的指数拟合:f(x) = C1eC2(x-1) (此处的指数规律主要针对x(1)(k)序列而言,原始序列是作差的结果)

  • GM(1,1)模型的白化方程:在这里插入图片描述

  • GM(1,1)模型的基本形式(亦称灰色微分方程):在这里插入图片描述

2.2 准指数规律的检验

实际建模中,要计算出ρ(k)∈(0,0.5)的占比,占比越高越好(一般前两期:ρ(2)和ρ(3)可能不符合要求,重点关注后面的期数)

2.3 发展系数与预测情形

  • 发展系数越小,预测得越精确

2.4 GM(1,1)模型的评价

  • 使用GM(1,1)模型对未来的数据进行预测时,需要先检验GM(1,1)模型对原数据的拟合程度(对原始数据还原的效果)。一般有两种检验方法:
2.4.1 残差检验

在这里插入图片描述

  • 注:
    • ① 其他预测模型也可以用这个残差检验
    • ② 关于这个10%和20%的标准不是绝对的,要结合预测的场景(如物理中对精确要求高的,也可是5%)
2.4.2 级别偏差检验

在这里插入图片描述

2.5 GM(1,1)模型的拓展:新陈代谢模型

在这里插入图片描述

2.6 适用灰色预测的情况

  1. 数据是以年份度量的非负数据(如果是月份或者季度数据一定要用时间序列模型);
  2. 数据能经过准指数规律的检验(除了前两期外,后面至少90%的期数的光滑比要低于0.5);
  3. 数据的期数较短且和其他数据之间的关联性不强(≤10,也不能太短了,比如只有3期数据),要是数据期数较长,一般用传统的时间序列模型比较合适。

三、示例:对长江水质污染的预测

3.1 题目

  • 2005年国赛A题中给出长江在过去10年中废水排放总量,如果不采取保护措施,请对今后10年的长江水质污染的发展趋势做出预测。
    在这里插入图片描述

3.2 预测题目的一些tips

  1. 看到数据后先画时间序列图并简单的分析下趋势(例如:之前的时间序列分解);
  2. 将数据分为训练组和试验组,尝试使用不同的模型对训练组进行建模,并利用试验组的数据判断哪种模型的预测效果最好(例如:可用SSE指标来挑选模型,常见的模型有指数平滑、ARIMA、灰色预测、神经网络等)。
  3. 选择上一步骤中得到的预测误差最小的那个模型,并利用全部数据来重新建模,并对未来的数据进行预测。
  4. 画出预测后的数据和原来数据的时序图,看看预测的未来趋势是否合理。

3.3 GM(1,1)模型代码讲解

在这里插入图片描述

在这里插入图片描述

  1. 画出原始数据的时间序列图,并判断原始数据中是否有负数或期数是否低于4期,如果是的话则报错,否则执行下一步;
  2. 对一次累加后的数据进行准指数规律检验,返回两个指标:
    • 指标1:光滑比小于0.5的数据占比(一般要大于60%)
    • 指标2:除去前两个时期外,光滑比小于0.5的数据占比(一般大于90%)并让用户决定数据是否满足准指数规律,满足则输入1,不满足则输入0
  3. 如果上一步用户输入0,则程序停止;如果输入1,则继续下面的步骤。
  4. 让用户输入需要预测的后续期数,并判断原始数据的期数:
    • 数据期数为4:分别计算出传统的GM(1,1)模型、新信息GM(1,1)模型和新陈代谢GM(1,1)模型对于未来期数的预测结果,为了保证结果的稳健性,对三个结果求平均值作为预测值。
    • 数据期数为5,6或7:取最后两期为试验组,前面的n‐2期为训练组;用训练组的数据分别训练三种GM模型,并将训练出来的模型分别用于预测试验组的两期数据;利用试验组两期的真实数据和预测出来的两期数据,可分别计算出三个模型的SSE;选择SSE最小的模型作为我们建模的模型。
    • 数据期数大于7:取最后三期为试验组,其他的过程和4.2类似。
  5. 输出并绘制图形显示预测结果,并进行残差检验和级比偏差检验。

四、神经网络预测示例

4.1 题目:辛烷值的预测

  • 【改编】辛烷值是汽油最重要的品质指标,传统的实验室检测方法存在样品用量大,测试周期长和费用高等问题,不适用于生产控制,特别是在线测试。近年发展起来的近红外光谱分析方法(NIR),作为一种快速分析方法,已广泛应用于农业、制药、生物化工、石油产品等领域。其优越性是无损检测、低成本、无污染,能在线分析,更适合于生产和控制的需要。
  • 实验采集得到50组汽油样品(辛烷值已通过其他方法测量),并利用傅里叶近红外变换光谱仪对其进行扫描,扫描范围900~1700nm,扫描间隔为2nm,即每个样品的光谱曲线共含401个波长点,每个波长点对应一个吸光度。
  • (1)请利用这50组样品的数据,建立这401个吸光度和辛烷值之间的模型。
  • (2)现给你10组新的样本,这10组样本均已经过近红外变换光谱仪扫描,请预测这10组新样本的辛烷值。

4.2 数据的导入

  • 注意:在matlab下,当导入文件出错时,要注意如下两点
    在这里插入图片描述
  • 导入数据
    • Excel操作小技巧:选择某个单元格的数据,同时按住键盘上的Ctrl+Shift两个键不松手,然后按键盘上方向键“→”,就可以选择这个单元格所在的一行;然后再按键盘上的方向键“↓”,就可以再选取这一行所在的一整列。
      在这里插入图片描述
  • 保存数据(data_Octane.mat)
    • X:50个样本的吸光度数据
    • Y:50个样本的辛烷值数据
    • new_X:10个要预测样本的吸光度数据
      在这里插入图片描述

4.3 神经网络模型

  • 不同版本的神经网络模型位置可能不同,可自行上网查看
    在这里插入图片描述
  • 根据样本放在行上还是列上来选择。
    在这里插入图片描述
  • 训练集、验证集、测试集的比例一般选择默认的即可。(Matlab会后台自动帮我们安装这个比例来随机抽取样本,因此每次运行的结果可能都不相同)在这里插入图片描述
  • 隐层神经元的个数,这个参数可以根据拟合的结果再次进行调整。在这里插入图片描述
  • 训练算法的选取,一般是选择默认即可,选择完成后点击按钮后,Matlab就会帮我们训练出一个神经网络模型。
    • ①莱文贝格-马夸特方法(Levenberg–Marquardt algorithm)能提供数非线性最小化(局部最小)的数值解。此算法能借由执行时修改参数达到结合高斯‐牛顿算法以及梯度下降法的优点,并对两者之不足作改善(比如高斯‐牛顿算法之反矩阵不存在或是初始值离局部极小值太远)
      • 经过少数几次即可收敛
    • 贝叶斯正则化方法(Bayesian‐regularization)
      • 可以处理过拟合,但训练很慢
      • 推荐采用该方法,拟合效果一般是最好的,MSE一般是三个中最小的(越小拟合越好);但由于速度过慢,对机器要求高,故方法①和③用的也多
    • ③量化共轭梯度法(Scaled Conjugate Gradient ):《模式识别与智能计算–MATLAB技术实现》
      • 每次迭代速度很快,但需要很多次的收敛
        在这里插入图片描述

4.4 结果分析

  • epoch:1个epoch等于使用训练集中的全部样本训练一次,每训练一次,神经网络中的参数经过调整。
  • MSE: Mean Squared Error 均方误差
    • MSE = SSE/n。一般来说,经过更多的训练阶段后,误差会减小,但随着网络开始过度拟合训练数据,验证数据集的误差可能会开始增加。在默认设置中,在验证数据集的MSE连续增加六次后,训练停止,最佳模型对应于的最小MSE。
      在这里插入图片描述
  • 将拟合值对真实值回归,拟合优度越高,说明拟合的的效果越好。
    在这里插入图片描述

4.5 保存结果

  • 保存神经网络函数的代码,以及神经网络图。
    在这里插入图片描述
  • 保存好训练出来的神经网络模型和结果
    在这里插入图片描述

4.6 进行预测

  • 保存code_Octane.m
  • 残差 + 拟合值 = 真实值
    在这里插入图片描述
% 这里要注意,我们要将指标变为列向量,然后再用sim函数预测
sim(net, new_X(1,:)')

% 写一个循环,预测接下来的十个样本的辛烷值
predict_y = zeros(10,1); % 初始化predict_y
for i = 1: 10
	result = sim(net, new_X(i,:)');
	predict_y(i) = result;
end
disp('预测值为:')
disp(predict_y)

4.7 神经网络处理过拟合思路

  • 将已知数据留尾部一小部分,用作训练出结果后的测试,计算MSE等看看大小 (有分析过程,体现有处理过拟合现象的意识)
  • 或切换不同模型训练

4.8 其他:神经网络在多输出中的运用

  • 多输出:多个Y值
  • 过程如上,神经网络也能在多输出中使用

附言

  • 参考课程可见 B站清风数模,如上仅作个人学习后笔记整理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数模】预测模型 的相关文章

  • 在 Matlab、VB6 和 VB.NET 程序之间发送消息的最简单方法

    我们正在将一套数据采集和分析例程从 VB6 程序升级为 VB NET VB6 和 Matlab 程序的混合体 我们希望保持系统模块化 单独的 EXE 以便我们可以轻松创建专门的独立分析程序 而无需不断升级大型应用程序 当所有程序都是用 VB
  • 如何在matlab中绘制彩色一维直方图

    我有一个一维数组 X 其中包含相关系数的统计数据 我想绘制一个彩色直方图 我使用以下代码 histogram X 10 它可以创建具有单色的直方图 现在我想绘制一个直方图 其中每个条形都有不同的颜色 但 FaceColor 选项只能调整整个
  • 使用 lsqcurvefit 进行拟合

    我想将一些数据拟合到洛伦兹函数 但当我使用不同数量级的参数时 我发现拟合存在问题 这是我的洛伦兹函数 function value lorentz x x0 gamma amp value amp gamma 2 x x0 2 gamma
  • 如何在 MATLAB 中创建带有分级标记颜色的散点图?

    我想在 MATLAB 中绘制一个简单的散点图 标记颜色从光谱的一端到另一端各不相同 例如红色 橙色 黄色 蓝色 紫色 我的数据比较了一段时间内河流的水量和水质 3 个简单的列 时间 水量 质量 我想绘制数量与质量的 x y 散点图 但颜色随
  • MATLAB:生成给定三种颜色的颜色图

    我正在尝试在 MATLAB 中生成给定三种颜色 最高值 零值和最低值 的颜色图 我的思维过程是从最高端到中间循环 并将每个步骤存储到一个 3xN 第一列是 R 第二列是 G 第三列是 B 矩阵 所以我正在使用 fade from high
  • 将输出从符号数学 (sym) 转换为浮点型

    我的问题类似于这个问题 https stackoverflow com questions 11114101 how to convert mupad symbol i sqrt 1 to i in matlab 11114959 1111
  • 在 matlab/octave 中将数据集分成两个子集 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将数据集分为两个子集 例如 训练 和 测试 其中 训练集包含 80 的数据 测试集包含剩余的 20 分裂的意思是生成一个长度等于的逻辑索引
  • 如何在 R 或 MATLAB 中为散点图创建阴影误差条“框”

    我想在 R 或 MATLAB 中创建一个简单的散点图 涉及两个变量 x 和 y 它们有与之相关的错误 epsilon x 和 epsilon y 然而 我不是添加误差线 而是希望在每个 x y 对周围创建一个 阴影框 其中框的高度范围从 y
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 在 C/C++ 中调用 MATLAB API

    我刚刚从某处听说 对于数值计算 MATLAB 确实提供了一些用户友好的 API 如果你在 C C 代码中调用这些 API 你可以显着加快计算速度 但我在MATLAB文档中没有找到这样的信息 例如http www mathworks com
  • 白色像素簇提取

    我正在研究指纹毛孔提取项目 并陷入毛孔 白色像素簇 提取的最后阶段 我有两个输出图像 我们可以从中获取毛孔 但不知道该怎么做 这两个图像的尺寸不同 image1 的尺寸为 240 320 image2 的尺寸为 230 310 这是我的图像
  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 作为动画的八度情节点

    我有以下八度脚本 TOTAL POINTS 100 figure 1 for i 1 TOTAL POINTS randX rand 1 randY rand 1 scatter randX randY hold on endfor 当我运
  • 单元格的 Fieldnames 函数的等效项

    正如标题所说 只是想知道是否有一个函数可以用作字段名 http www mathworks co uk help matlab ref fieldnames html 但适用于单元格 所以如果我有类似的东西 a imread redsqua
  • 定义自定义 Mupad 程序的一般相对搜索路径

    假设我有一个 mupad 笔记本myMupadNotebook mn在路径上 C projectFolder ABC abc 它调用程序MyMupadProcedure mu它位于 C DEF GHI 现在我有一个 Matlab 脚本mai

随机推荐

  • 体验亚马逊云科技的 AI 编程助手,一起拥抱 AI 编程的新范式!

    Amazon CodeWhisperer 是一款 AI 编码配套应用程序 可在 IDE 中生成整行代码和完整的函数代码建议 以帮助您更快地完成更多工作 在本系列文章中 我们将收录广大开发者的实战心得 为您详细介绍 Amazon CodeWh
  • C语言经典100例题(30)--一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    目录 题目 问题分析 代码 测试结果 题目 一个5位数 判断它是不是回文数 即12321是回文数 个位与万位相同 十位与千位相同 问题分析 可以建立在第29题的基础上解决 只需要对比个位与万位是否相同 十位与千位是否相同 代码 includ
  • 基于python的协同过滤推荐算法的移动新闻推荐系统的设计与实现

    基于python的协同过滤推荐算法的移动新闻推荐系统的设计与实现 源码获取 https www bilibili com video BV1Ne4y1g7dC 1 前台系统 用户功能模块 栏目分类模块 图文上传模块 2 后台管理系统 用户管
  • 安装Rocky Linux

    纪要 之前使用服务器的同学 可能都是使用CentOS作为服务器主机 但是在2018年RedHat就提出停止CentOS 8的继续维护了 而 CentOS 7 因为使用广泛 仍然按照原计划支持到 2024 年 这一决定震惊了整个社区 用户意见
  • ElementUI内的el-select多选菜单不换行显示

    ElementUI内的el select多选菜单不换行显示 发现问题 解决 写在最后 发现问题 ElementUI是一款很强大的组件 但是其中或许也有一些功能不满足我们的需求或者审美 比如本人今天遇到一个问题 当我使用select多选框多选
  • keil开启代码提示功能

    如下图 设置步骤
  • 嵌入式学习之RTOS编程

    嵌入式学习之RTOS编程 一 题目要求 二 UCOSIII介绍 三 实验过程 1 STM32CubeMX设置 2 移植前准备 3 移植过程 4 构建任务 5 实验结果演示 一 题目要求 学习嵌入式实时操作系统 RTOS 以uc OS III
  • 【Unity】Destroy和DestroyImmediate的区别

    情景 有一个父物体A A有子物体B1 B2 B3 B10等10个子物体 那么现在若想移除B1 B10 该如何 我能想到的最简单是这样做 using UnityEngine using System Collections
  • C++11各编译器支持情况对比

    原文地址 http sd csdn net a 20120813 2808540 html C 11标准在去年8月份获得一致通过 这是自1998年后C 语言第一次大修订 对C 语言进行了改进和扩充 迄今为止已整整一年啦 想知道C 11在这一
  • feign和ribbon同时设置connectTimeout readTimeout,谁会先起作用

    feign client config default connectTimeout 1000000 readTimeout 1200000 hystrix enabled true ribbon eager load enable tru
  • C语言:计算两个数之和

    输入两个整数 计算它们的和 include
  • 3 5的二维数组C语言程序,C语言及程序设计提高例程-33 二维数组元素的引用

    贺老师教学链接 C语言及程序设计提高 本课讲解 输入输出二维数组元素 include int main int s 3 5 i j printf Input 3 5 numbers n for i 0 i lt 3 i for j 0 j
  • Redis 源码分析-数据结构及实现(字典dict)

    Redis字典介绍 Redis是K V型数据库 整个数据库是用字典来存储的 对Redis数据库进行任何增 删 改 查操作 实际就是对字典中的数据进行增 删 改 查操作 字典需要的特征 1 O 1 的时间复杂度取出或插入关联值 2 key 唯
  • wchar_t和char,WCHAR和CHAR的区别和互相转化

    win32应用程序的低层winnt h头文件 ifndef VOID define VOID void typedef char CHAR typedef short SHORT typedef long LONG if defined M
  • 微信公众号 H5 通联支付

    参考 https blog csdn net caimingxian401 article details 96993205 注意 必须使用 setTimeout 箭头函数延迟加载 1 使用 from 表单 提交数据至通联 2 绑定数据 3
  • 512色色谱图

    代码如下
  • 介绍uni-app框架,以及运行原理

    介绍uni app框架 uni app 是一个使用 Vue js 开发所有前端应用的框架 开发者编写一套代码 可发布到iOS Android Web 响应式 以及各种小程序 微信 支付宝 百度 头条 QQ 钉钉 淘宝 某些平台不能提交简单d
  • 干货丨RPA内网验证码识别技巧

    通常在一些网络安全等级比较高的大型客户里面 如银行 政府等 RPA的实现流程基本都是内网环境 没办法使用外网 那么这个时候针对一些客户端或者网银登录的字符型验证码识别 没办法通过UiBot调用公网环境中的OCR组件进行识别 或者使用需要外网
  • 卷积神经网络(CNN)

    卷积神经网络 一 摘要 卷积网络 Convolutional network 也叫神经网络 是一种专门用来处理具有类似网格结构的数据的神经网络 例如时间序列数据和图像数据 可以看做二维的像素网络 卷积网络在诸多应用领域表现得都比较出色 卷积
  • 【数模】预测模型

    一 灰色系统 白色系统 系统信息完全明确 灰色系统 系统部分信息已知 部分信息未知 对在一定范围内变化的 与时间有关的灰色过程进行预测 过程 原始数据找规律 生成强规律性的数据序列 建立微分方程来预测未来趋势 黑色系统 系统的内部信息未知