基于MATLAB的GM(1,1)灰色预测与模型精度检验系统
项目简介
本项目实现了一个完整的GM(1,1)灰色预测模型及其全方位的精度评估系统。该算法主要用于处理“少数据、贫信息”的不确定性系统预测问题。通过对原始数据进行累加生成以挖掘数据内在规律,建立白化微分方程,从而实现对数据的拟合与未来趋势的预测。
系统不仅完成了基础的建模与预测功能,还集成了严格的统计学检验模块,包括残差分析、后验差检验(C值与P值)以及灰色关联度分析,并能够根据检验结果自动评定模型的精度等级(好、合格、勉强、不合格),最终通过可视化图表直观展示预测效果。
功能特性
- 数据适应性检验:内置级比检验(Level Ratio Test)模块,自动计算数据的级比并判断其是否落在可容覆盖范围内,从而评估数据是否适合进行GM(1,1)建模。
- 标准GM(1,1)建模:实现了从1-AGO(一次累加生成)、紧邻均值生成、矩阵构建到最小二乘法参数估计的完整建模流程。
- 多维度精度评估:
*
相对误差检验:计算逐点残差及平均相对误差。
*
后验差检验:计算后验差比值C和小误差概率P,作为模型等级评定的核心依据。
*
灰色关联度分析:计算预测曲线与原始曲线的几何形状相似程度。
- 自动等级评定:依据灰色系统理论标准,结合C值和P值自动判定模型精度等级(一级~四级)。
- 未来预测能力:支持向后预测任意期数(代码默认向后预测2期),并自动进行累减还原。
- 可视化展示:生成包含原始数据、拟合数据及未来预测数据的对比图,并在图中直接标注核心参数(a, b)及精度指标(C, P)。
系统要求
- MATLAB R2016a 及以上版本(代码主要使用基础矩阵运算与绘图函数,兼容性较好)。
使用与配置方法
- 数据录入:在脚本的“数据输入与预处理”部分,修改变量
X0,将其替换为您实际的非负时间序列数据。 - 预测设置:可以通过修改变量
m 的值来设定需要向后预测的期数(默认为2期)。 - 运行脚本:直接运行主脚本,程序将在命令窗口输出详细的模型参数、检验指标及预测数据表,并弹出一个图形窗口展示结果。
---
算法实现细节与逻辑分析
本项目的主程序严格按照灰色系统理论编写,其内部逻辑流程如下:
1. 数据预处理与级比检验
程序首先接收原始非负序列,并计算相邻数据的级比
lambda。同时,根据数据长度
n 计算级比的可容覆盖范围
(exp(-2/(n+1)), exp(2/(n+1)))。程序会遍历所有级比值,判断是否全部落在范围内。虽然程序会给出检验通过与否的提示,但为了保证演示效果,即使检验未完全通过,程序仍会继续执行后续建模步骤。
2. 模型构建与参数求解
- 累加生成 (1-AGO):对原始序列进行一次累加,得到生成序列
X1,以弱化随机性。 - 构造数据矩阵:利用紧邻均值生成公式
0.5 * (X1(k) + X1(k+1)) 计算背景值 Z1,进而构造数据矩阵 B 和数据向量 Y。 - 最小二乘法估计:通过公式
(B'B)^(-1) * B'Y 求解参数向量 u,从而提取出发展系数 a 和灰作用量 b。
3. 时间响应函数与预测
利用求得的参数
a 和
b,构建GM(1,1)模型的白化微分方程时间响应函数。程序计算的范围包括原数据长度加上设定的未来预测期数
m。
- 预测计算:根据响应函数计算预测的累加值
X1_hat。 - 累减还原 (IAGO):通过后一项减前一项的方式,将累加预测值还原为原始层面的预测值
X0_hat。
4. 模型精度检验体系
程序实现了三层检验机制来确保模型的可靠性:
- 残差检验:计算原始值与拟合值的绝对误差和相对误差,并求取平均相对误差。
- 后验差检验 (Posterior Variance Test):
* 计算原始序列的标准差
S1 和残差序列的标准差
S2。
* 计算
后验差比值 C = S2 / S1,C值越小说明模型离散程度越小。
* 计算
小误差概率 P,统计残差与残差均值之差小于
0.6745 * S1 的点数占比。
- 灰色关联度分析:引入分辨系数
rho = 0.5,计算预测序列与原始序列的关联系数及平均关联度 r,用于量化曲线趋势的相似性。
5. 精度等级自动评定
程序内置了标准的灰色模型精度等级表,通过一系列
if-elseif 逻辑判断:
- 一级 (好):P >= 0.95 且 C <= 0.35
- 二级 (合格):P >= 0.80 且 C <= 0.50
- 三级 (勉强):P >= 0.70 且 C <= 0.65
- 四级 (不合格):其他情况
系统会将评定结果打印在控制台并在绘图标题中显示。
6. 结果输出与绘图
- 文本输出:在MATLAB命令窗口格式化输出参数估计值、各类精度指标、以及包含“实测值”、“预测值”、“残差”、“相对误差”的详细对比表。同时单独列出未来的预测值。
- 图形绘制:创建一个图形窗口,使用黑色圆圈表示原始数据,红色星号表示拟合数据,蓝色虚线加三角形表示未来预测趋势。图形中包含图例、网格,并使用
text 函数在图表中嵌入文本框,显示 a、b、C、P 等关键指标,便于直接截图使用。