灰色系统多变量预测GM(1,n)模型及精度检验工具
项目介绍
本项目基于MATLAB环境开发,实现了一套完整的灰色系统多变量预测 GM(1,n) 模型。该工具专为解决少数据、贫信息条件下的多因素系统分析与预测问题而设计。算法不仅能够处理单一时间序列的趋势预测,还能捕捉系统特征变量(因变量)与相关因素变量(自变量)之间的动态关联。
本工具的代码实现了从数据输入、模型参数估算、预测值还原到全方位精度检验的自动化流程,特别内置了符合灰色系统理论标准的统计检验模块(后验差比值C和小误差概率P),并提供直观的可视化图表。
核心功能特性
- 多变量协同建模:支持输入包含一个特征变量和多个相关因素变量的数据矩阵,构建多维灰色微分方程。
- 一阶累加生成 (1-AGO):自动对原始数据进行累加变换,消除数据随机波动,增强序列规律性。
- 参数自动估计:利用最小二乘法(OLS)求解微分方程的发展系数和驱动项系数。
- 拟合与还原:基于时间响应函数计算拟合值,并通过累减生成(Inverse AGO)还原为原始量纲。
- 全自动精度评定:自动计算残差、相对误差、后验差比值(C)和小误差概率(P),并根据判定标准自动输出模型等级(一级至四级)。
- 结果可视化:生成包含拟合曲线对比和相对误差分布的组合图表。
算法实现与逻辑详解
本项目的脚本严格遵循以下逻辑流程实现 GM(1,n) 模型:
1. 数据预处理与生成
脚本接收一个 $N times M$ 的数据矩阵,其中第一列作为系统特征序列(预测对象),后续列作为相关因素序列。
- 累加生成计算:对输入矩阵的所有列进行
cumsum 操作,得到 1-AGO 序列 $X1$。 - 紧邻均值生成:仅对特征序列(第一列)计算紧邻均值序列 $Z1$。计算公式为 $Z1(k) = 0.5 times (X1(k) + X1(k-1))$,用于平滑数据以构建背景值。
2. GM(1,n) 模型构建 (参数估计)
算法构建如下形式的白化微分方程:
$$ frac{dx_1}{dt} + a x_1 = sum_{i=2}^{n} b_i x_i $$
* $B$ 矩阵的第一列为负的紧邻均值 $-Z1$,后续列为对应时刻相关因素的累加值 $X1$。
* $Y$ 向量为原始特征序列 $X0$(从第2个时间点开始)。
- 最小二乘求解:通过矩阵运算 $theta = (B^T B)^{-1} B^T Y$ 计算参数向量。
* $theta(1)$ 提取为发展系数 $a$,反映系统自身的发展趋势。
* $theta(2:end)$ 提取为驱动系数向量 $b$,量化各相关因素对特征变量的影响。
3. 预测求解 (时间响应函数)
代码在原始数据的时间范围内进行拟合计算。
- 驱动项动态计算:对于每一个时刻 $k$,算法利用该时刻实际的相关因素累加值 $X1(k, 2:end)$ 与驱动系数 $b$ 进行点积,计算总驱动力。
- 离散响应公式:利用以下公式计算 $k$ 时刻的累加预测值:
$$ hat{X1}(k) = (X0(1) - frac{text{drive}}{a}) e^{-a(k-1)} + frac{text{drive}}{a} $$
- 累减还原:通过 $hat{X0}(k) = hat{X1}(k) - hat{X1}(k-1)$ 将预测结果还原为原始数据层面的值。
4. 精度检验体系
代码实现了完整的统计检验逻辑,用于评估模型的可信度:
- 基础误差:计算每个样本点的残差(实际值 - 预测值)和相对误差(|残差| / 实际值)。
- 后验差比值 C:计算残差序列的标准差 $S_2$ 与原始序列的标准差 $S_1$ 之比 ($C = S_2 / S_1$)。代码中使用总体标准差公式(除以 $N$)。
- 小误差概率 P:统计残差与平均残差之差的绝对值小于 $0.6745 times S_1$ 的样本点占比。
- 等级判定:根据 $C$ 和 $P$ 的值,按照灰色系统理论标准表自动判定模型等级:
*
一级 (好):$P ge 0.95$ 且 $C le 0.35$
*
二级 (合格):$P ge 0.80$ 且 $C le 0.50$
*
三级 (勉强):$P ge 0.70$ 且 $C le 0.65$
*
四级 (不合格):其他情况
使用方法
- 准备数据:打开脚本文件,找到
input_data 变量。将其替换为您自己的数据矩阵。
* 矩阵格式要求:每一行为一个时间样本,第一列必须是您想要预测的特征变量,第二列及之后是影响该变量的相关因素。
- 运行脚本:在 MATLAB 命令行窗口或编辑器中运行该主函数。
- 查看控制台输出:
* 程序将打印计算出的发展系数 $a$ 和驱动系数 $b$。
* 程序将输出详细的精度检验指标(C值、P值、平均相对误差)以及模型精度等级评价。
* 程序将以表格形式列出每个时间点的实际值、预测值、残差和相对误差。
- 查看图表:程序会自动弹出一个图形窗口,包含两个子图:
* 上方子图展示实际数据与预测数据的拟合曲线对比。
* 下方子图以柱状图形式展示每个样本点的相对误差百分比。
系统要求
- MATLAB R2016a 或更高版本(代码使用基础矩阵运算和绘图函数,兼容性较好)。
- 无需额外的工具箱(Toolbox),主要依赖 MATLAB 核心库。