灰色预测模型
基础知识:
白色系统:系统的信息是完全明确的。
灰色系统:系统的部分信息已知,部分信息未知。
黑色系统:系统的内部信息是未知的。
灰色预测是对既含有已知信息又含有不确定信息的系统进行预则,就是对在一定范围内变化的、与时间有关的灰色过程进行预测
灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。
灰色系统理论认为,任何随机过程都是在一定幅值范围、一定时区内变化的灰色量,可通过对原始数据的整理来寻找其变化规律,这一过程称为数据的 “生成”。通过生成数据,使杂乱无章的原始数据呈现出一定的规律性。
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,模型的建立和求解
得到参数a和b后,求解微分方程得到预测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函数和训练的模型对之后的值进行预测