灰色预测and BP神经网络 (详细上手使用)

灰色预测模型

基础知识:

白色系统:系统的信息是完全明确的。

灰色系统:系统的部分信息已知,部分信息未知。

黑色系统:系统的内部信息是未知的。

灰色预测是对既含有已知信息又含有不确定信息的系统进行预则,就是对在一定范围内变化的、与时间有关的灰色过程进行预测

灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。

灰色系统理论认为,任何随机过程都是在一定幅值范围、一定时区内变化的灰色量,可通过对原始数据的整理来寻找其变化规律,这一过程称为数据的 “生成”。通过生成数据,使杂乱无章的原始数据呈现出一定的规律性。

GM(1,1)模型:

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

GM(1,1)模型,第一个'1'表示微分方程是一阶的,后面的'1'表示只有一个变量

基本的原理:

1,数据准备

收集时间序列数据

确保具有一致性的趋势

2,累计生成

在这我们让z表示的紧邻均值生成数列 比如z1=(x0+x1)/2

GM(1,1)的基本形式

这个被称为灰色微分方程

叫做白化方程

3,参数估计

将微分方程离散化,通过最小二乘法估计参数a和b

,则

这里的B和Y

4,模型的建立和求解

得到参数ab后,求解微分方程得到预测GM(1,1)模型。模型的时间响应函数为

在进行灰色预测之前还需要进行准指数规律检验

发展系数一般小于2,而且一般是越小越精准(不确定)

5,模型检验

(1)残差检验

残差检验:

绝对残差:

平均相对残差:

这里的10%和20%不绝对,要根据其对应的场景

其他的预测模型也可以使用残差检验

(2)级比偏差检验

级比是

这里的级比偏差和平均级比偏差:

灰色数据的特点:

所需数据量少:一般只需要 4 个以上的数据点即可进行建模预测,适用于数据匮乏的情况。

计算简便:相比于一些复杂的统计模型和机器学习模型,灰色预测模型的计算过程相对简单,不需要大量的样本数据进行训练。

短期预测精度较高:在数据变化趋势较为稳定的情况下,对短期的预测能够取得较好的效果,在经济、环境、农业等领域的短期预测中有广泛应用。

数据的度量:以年为度量的非负数据,并且可以经过准指数规律的检验

GM(1,1)代码

1.画出原始数据的时间序列图,并判断原始数据中是否有负数或期数是否低于4期,如果是的话则报错,否则执行下一步;

2.对一次累加后的数据进行准指数规律检验,返回两个指标:指标1:光滑比小于0.5的数据占比(一般要大于60%)指标2:除去前两个时期外,光滑比小于0.5的数据占比(一般大于90%并让用户决定数据是否满足准指数规律,满足则输入1,不满足则输入0

3.如果上一步用户输入0,则程序停止;如果输入1,则继续下面的步骤。

4.让用户输入需要预测的后续期数,并判断原始数据的期数:

4.1 数据期数为4:

分别计算出传统的GM(1,1)模型、新信息GM(1,1)模型和新陈代谢GM(1,1)模型对于未来期数的预测结果,为了保证结果的稳健性,对三个结果求平均值作为预测值。

4.2 数据期数为5,6或7:

取最后两期为试验组,前面的n-2期为训练组;用训练组的数据分布训练三种GM模型,并将训练出来的模型分别用于预测试验组的两期数据;利用试验组两期的真实数据和预测出来的两期数据,可分别计算出三个模型的SSE:选择SSE最小的模型作为我们建模的模型。

4.3 数据期数大于7:

取最后三期为试验组,其他的过程和4.2类似。

5.输出并绘制图形显示预测结果,并进行残差检验和级比偏差检验

一些tips:

(1)看到数据后先画时间序列图并简单的分析下趋势(例我们上一讲学过的时间序列分解);如:

(2)将数据分为训练组和试验组,尝试使用不同的模型对训练组进行建模,并利用试验组的数据判断哪种模型的预测效果最好(比如我们可以使用SSE这个指标来挑选模型,常见的模型有指数平滑、ARIMA、灰色预测、神经网络等)。

(3)选择上一步骤中得到的预测误差最小的那个模型,并利用全部数据来重新建模,并对未来的数据进行预测。

(4)画出预测后的数据和原来数据的时序图,看看预测的未来趋势是否合理。

BP神经网络

反向传播神经网络(Back - Propagation Neural Network) ,是一种按照误差逆向传播算法训练的多层前馈神经网络,在机器学习和人工智能领域应用广泛。

1. 结构

输入层:负责接收外部数据,数据以向量形式传入网络。输入层神经元的数量取决于输入数据的特征数量。例如,在手写数字识别任务中,如果将每个数字图像表示为一个 28*28 的像素矩阵,那么输入层神经元数量就是 784 个,每个神经元对应一个像素值。

隐藏层:可以有一层或多层,是神经网络进行复杂非线性变换的核心部分。隐藏层神经元通过权重与输入层和其他层相连,对输入信号进行加权求和并通过激活函数处理,从而提取数据中的复杂特征。不同的隐藏层神经元数量和层数设置会影响网络的学习能力和泛化能力。例如,在一些简单的回归任务中,可能使用一层隐藏层,包含几十个神经元;而在处理像图像、语音等复杂数据时,可能会有多层隐藏层,每层包含数百甚至上千个神经元。

输出层:给出最终的预测结果。输出层神经元数量取决于具体的任务类型。对于二分类任务,通常只有一个神经元,输出值可通过阈值判断类别;对于多分类任务,输出层神经元数量等于类别数,输出值可表示为每个类别的概率。例如,在上述手写数字识别任务中,输出层有 10 个神经元,分别对应数字 0 - 9 的预测概率。

2,工作原理

前向传播:输入数据从输入层进入网络,依次经过各隐藏层的计算,最终到达输出层。在每一层中,神经元接收来自上一层神经元的输出作为输入,进行加权求和运算

其中Xi是第i个神经元的输出,wji是连接上一层第i个神经元与当前层第j个神经元的权重,bj是当前层第j个神经元的偏置,n是上一层神经元的数量。然后,将加权求和的结果Sj通过激活函数f进行非线性变换得到第j个神经元的输出

反向传播:计算输出层的预测值与真实值之间的误差,然后将误差沿着网络反向传播,通过调整各层的权重和偏置来减小误差。误差通常使用损失函数衡量,如均方误差(MSE)用于回归任务,交叉熵损失函数用于分类任务。以均方误差为例,损失函数

,其中表示第k个输出神经元的预测值,表示的是真实值;m表示的是输出层的神经元数量。通过链式法则计算损失函数对每个权重和偏置的梯度。然后,根据梯度下降法更新权重和偏置,其中的是学习率。

3,训练过程

数据准备:收集和整理用于训练、验证和测试的数据。数据要具有代表性,且需进行预处理,如归一化、标准化等操作,以提高训练效果和收敛速度。例如,将图像数据的像素值归一化到[0,1]区间。

初始化参数:随机初始化网络中各层的权重和偏置。权重通常初始化为较小的随机数,以避免神经元在训练初期饱和。

迭代训练:重复进行前向传播和反向传播过程。在每次迭代中,将一批训练数据输入网络,计算误差并更新权重和偏置。通过不断调整权重和偏置,使网络的预测误差逐渐减小。这个过程会持续多个 epoch(遍历整个训练数据集的次数)。

模型评估:在训练过程中,使用验证集数据评估模型的性能,监控模型是否出现过拟合或欠拟合现象。训练完成后,使用测试集数据对模型进行最终评估,计算准确率、召回率、均方误差等指标,以衡量模型的泛化能力和预测准确性。

一些基础知识:

训练集: 用于模型拟合的数据样本。

验证集: 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。在神经网络中,我们用验证数据集去寻找最优的网络深度,或者决定反向传播算法的停止点或者在神经网络中选择隐藏层神经元的数量;

测试集: 用来评估模最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。

下面是matlab的使用:

1.在命令行输入nftool

2.在左上角导入数据

3.注意这里的行和列的选择

4.选择数据的成分和层大小然后进行训练

5.这里的训练有3个方法,根据特点选择即可

epoch:1个epoch等于使用训练集中的全部样本训练一次,每训练一次,神经网络中的参数经过调整。MSE:均方误差 MSE=SSE/n一般来说,经过更多的训练阶段后,误差会减小,但随着网络开始过度拟合训练据,验证数据集的误差可能会开始增加。在默认设置中,在验证数据集的MSE连续增加六次后,训练停止,最佳模型对应于的最小的MSE。

训练结束后导出模型即可

然后可以使用sim函数和训练的模型对之后的值进行预测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/68321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac 安装 node

brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…

【Unity】unity3D 调用LoadSceneAsync 场景切换后比较暗 部门材质丢失

解决方法:两个场景使用同样灯光 现象 直接进入第二个场景是可以正常显示 调用LoadSceneAsync来切换后,第二个场景出现比较暗的情况 解决方法:两个场景使用同样灯光,在loading 的场景中加入灯光。 Light—Directional Light 如果…

红日-VulnStack靶场一

http://vulnstack.qiyuanxuetang.net/vuln/ 一、环境部署 win7(被攻击机/关火墙) web服务器 1张外网网卡(桥接192.168.1.105),一张内网网卡192.168.52.143/255.255.255.0/192.168.52.2 DNS 192.168.52.138 winser2008 域控服务器 1张…

实现linux硬盘smart检测

一、下载交叉编译libatasmart库 下载链接:https://www.linuxfromscratch.org/blfs/view/svn/general/libatasmart.html libatasmart库编译依赖libudev库,交叉编译器前先准备依赖的libudev: 设置libudev的环境变量,并通过configure编译文件生…

蓝桥杯算法|基础笔记(1)

**时间复杂度** 一、概念理解 时间复杂度是用来衡量算法运行时间随输入规模增长而增长的量级。它主要关注的是当输入规模趋向于无穷大时,算法执行基本操作的次数的增长趋势,而不是精确的运行时间。 二、分析代码中的基本操作 确定关键操作 在一段代码…

Uniapp判断设备是安卓还是 iOS,并调用不同的方法

在 UniApp 中,可以通过 uni.getSystemInfoSync() 方法来获取设备信息,然后根据系统类型判断当前设备是安卓还是 iOS,并调用不同的方法。 示例代码 export default {onLoad() {this.checkPlatform();},methods: {checkPlatform() {// 获取系…

K8S 节点选择器

今天我们来实验 pod 调度的 nodeName 与 nodeSelector。官网描述如下: 假设有如下三个节点的 K8S 集群: k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8…

Multi-Agent如何设计

文章小结 研究背景和目的 在单一大语言模型长期主导人工智能领域的背景下,多智能体系统在对话任务解决中逐渐崭露头角。 虽然先前的研究已经展示了多智能体系统在推理任务和创造性工作中的潜力,但对于其在对话范式方面的局限性以及单个智能体的影响&am…

Web端实时播放RTSP视频流(监控)

一、安装ffmpeg: 1、官网下载FFmpeg: Download FFmpeg 2、点击Windows图标,选第一个:Windows builds from gyan.dev 3、跳转到下载页面: 4、下载后放到合适的位置,不用安装,解压即可: 5、配置path 复制解压后的\bin路径,配置环境变量如图: <

keepalived双机热备(LVS+keepalived)实验笔记

目录 前提准备&#xff1a; keepalived1&#xff1a; keepalived2&#xff1a; web1&#xff1a; web2&#xff1a; keepalived介绍 功能特点 工作原理 应用场景 前提准备&#xff1a; 准备4台centos&#xff0c;其中两台为keepalived&#xff0c;两台为webkeepalive…

CentOS 7 下 Nginx 的详细安装与配置

1、安装方式 1.1、通过编译方式安装 下载Nginx1.16.1的安装包 https://nginx.org/download/nginx-1.16.1.tar.gz 下载后上传至/home目录下。 1.2、通过yum方式安装 这种方式安装更简单。 2、通过编译源码包安装Nginx 2.1、安装必要依赖 sudo yum -y install gcc gcc-c sudo…

八股学习 Redis

八股学习 Redis 常见场景常见问题问题1、2示例场景缓存穿透解决方案一解决方案二 问题3示例场景缓存击穿解决方案 问题4示例场景缓存雪崩解决方案 问题5示例场景双写一致性强一致方案允许延时一致方案 问题6RDB方式AOF方式两种方式对比 问题7数据过期策略惰性删除定期删除 问题…

【全套】基于机器学习的印度森林火灾发生概率的分析与预测

【私信送源码文档】基于机器学习的印度森林火灾发生概率的分析与预测 对应的ppt 摘 要 随着全球气候变化的不断加剧&#xff0c;火灾的频发和规模逐渐增大&#xff0c;成为备受关注的问题。本文旨在提高对火灾发生概率的准确性&#xff0c;为火灾的预防和管理提供科学支持。在…

RabbitMQ中有哪几种交换机类型?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ中有哪几种交换机类型&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ中有哪几种交换机类型&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;交换机&#xf…

HTML拖拽功能(纯html5+JS实现)

1、HTML拖拽--单元行拖动 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…

SpringMVC复习笔记

文章目录 SpringMVC 概念和基本使用SpringMVC 简介SpringMVC 核心组件和调用流程SpringMVC 基本使用第一步&#xff1a;导入依赖第二步&#xff1a;Controller 层开发第三步&#xff1a;SpringMVC 配置类配置核心组件第四步&#xff1a;SpringMVC 环境搭建第五步&#xff1a;部…

记录一次Android Studio的下载、安装、配置

目录 一、下载和安装 Android Studio 1、搜索下载Android studio ​2、下载成功后点击安装包进行安装&#xff1a; 3、这里不用打勾&#xff0c;直接点击安装 &#xff1a; 4、完成安装&#xff1a; 5、这里点击Cancel就可以了 6、接下来 7、点击自定义安装&#xff1a…

字节序 大端和小端

目录 什么是 大端存储和小端存储&#xff1f;为什么会有大小端转换问题如何检查自己电脑 是大端还是小端&#xff1f;大端小端处理函数使用位运算操作来手动转换大端和小端。使用标准库中的htonl和ntohl函数代码示例&#xff1a; 什么是 大端存储和小端存储&#xff1f; 大端模…

金融项目实战 03|JMeter脚本实现手工接口测试

目录 一、环境说明 1、项目环境搭建 2、Mock说明 二、构造测试数据 1、通过系统页面构造 2、通过接口构造 3、通过数据库构造【推荐】 4、案例&#xff1a;构造借款业务数据 三、JMeter执行接口测试用例 1、获取图片验证码、获取短信验证码 2、注册脚本 3、登录脚本…

【优先算法】滑动窗口--(结合例题讲解解题思路)(C++)

目录 1. 例题1&#xff1a;最大连续1的个数 1.1 解题思路 1.2代码实现 1.3 错误示范如下&#xff1a;我最开始写了一种&#xff0c;但是解答错误&#xff0c;请看&#xff0c;给大家做个参考 2. 将 x 减到 0 的最小操作数 2.1解题思路 2.2代码实现 1. 例题1&#xff…