目录
简介
在这里,灰色的意思是系统的信息只有一部分,不完整,与之类似概念还有白色和黑色。
灰色预测模型是通过少量的、不完全的信息,建立数学模型做出预测的一种预测方法。
其预测对象要求数据具有 准指数规律,并且 数据非负。
灰色预测模型可用GM(m,n)表示,m代表阶数,n代表预测对象的个数。
灰色预测模型适用于年份数据预测,且期数较少的情况。如果期数较多或者包含季度数据,采用时间序列分析进行预测。
数学模型
记原数据序列为
对原数据序列累加得到一次累计序列,1-AGO,记为
得到紧邻均值生成序列
称方程
为GM(1,1)模型的基本形式,其中b为灰作用量,-a为发展系数。发展系数越小越好则GM(1,1)的数学模型可用矩阵形式表示为
利用最小二乘法得到参数a,b的估计值为
进而可以得到预测公式
分析步骤
对数据进行准指数规律检验
定义级比
如果级比序列均在区间(1,1.5)之间,则称一次累加序列具有准指数规律
注意到级比
,定义原始序列的光滑比,显然光滑比逐渐趋于0,故只需要保证光滑比小于0.5,即通过准指数规律检验。但实际建模中,不必要求原始序列的光滑比小于0.5的占比,该占比越大越好。
对预测效果进行评价
拟合程度检验
定义相对误差
定义平均误差
如果平均误差小于0.2,则认为GM(1,1)对原始数据的拟合效果一般
级比偏差检验
定义级比偏差
定义平均级比偏差
如果平均级比偏差小于0.2,则认为GM(1,1)对原始数据的拟合效果一般
GM(1,1)模型拓展
全数据GM(1,1)模型,利用原始变量的所有数据
部分数据GM(1,1)模型,只利用原始变量的后部分数据
新信息GM(1,1)模型,预测出的数据作为原始变量数据,递推求得预测数据
新陈代谢GM(1,1)模型,预测出的数作为原始变量数据,同时去掉最老的数据,递推求得预测数据
在实际的建模中,通常在全数据,新信息和新陈代谢3个模型中择优应用。
MATLAB源码
全数据GM(1,1)
function [result,x0_hat,error,eta] = my_GM11(x0,num)
%%MY_GM11 使用传统GM11对数据进行预测分析
%%输入参数:
% x0:预测原始数据,必须为列向量
% num:往后预测的数据个数\
%%输出参数:
% result:预测值
% x0_hat:拟合值
% relative_error:相对误差
% eta:级比偏差
%% 求解发展系数以及灰作用量
n=length(x0);
x1=cumsum(x0);%1-AGO
z1=1/2*(x1(1:end-1)+x1(2:end));%紧邻均值序列
Y=x0(2:end);
B=[-1*z1 ones(length(z1),1)];
u=inv(B'*B)*B'*Y;
a=u(1);
b=u(2);
%disp('发展系数为',num2str(-a),+'灰作用量是',num2str(b))
%% 计算拟合值
x0_hat=zeros(n,1);x0_hat(1)=x0(1);
for i=1:n-1
x0_hat(i+1)=(1-exp(a))*(x0(1)-b/a)*exp(-a*i);
end
%% 计算预测值
result=zeros(num,1);%预测值向量
for i=1:num
result(i)=(1-exp(a))*(x0(1)-b/a)*exp(-a*(i+n-1));
end
%% 输出
error=abs(x0(2:end)-x0_hat(2:end))./x0(2:end);
%级比偏差检验
sigma=x1(2:end)./x1(1:end-1);%级比偏差
eta=abs(1-(1-0.5*a)/(1+0.5*a))*(1./sigma);
end
新信息GM(1,1)
function [result,x0_hat,bar_error,bar_eta] = my_New_GM11(x0,num)
%MY_NEW_GM11 此处显示有关此函数的摘要
% 此处显示详细说明
% 参数与my_GM11类似
result=zeros(num,1);
for i=1:num
result(i)=my_GM11(x0,1);
x0=[x0;result(i)];
end
end
新陈代谢GM(1,1)
function [result,x0_hat,bar_error,bar_eta] = my_Metabo_GM11(x0,num)
%MY_METABO_GM11 此处显示有关此函数的摘要
% 此处显示详细说明
result=zeros(num,1);
for i=1:num
result(i)=my_GM11(x0,1);
x0(1)=[];
x0=[x0;result(i)];
end
end
应用三种灰色预测模型对数据集进行训练测试
%%
clc,clear all, close all
%% 输入原始数据并作出时间序列图
data=readmatrix("课后作业:棉花产量预测.xlsx");
data(1,:)=[];
data(end-2:end,:)=[];
year=data(:,1);
x0=data(:,2);
n=length(x0);
figure(1)
plot(year,x0,'o-','LineWidth',1.5);grid on;
xlabel('年份')
ylabel('棉花产量')
%% 判断数据序列是否非负
Error=x0>zeros(length(x0),1);
if Error == ones(length(Error),1)
disp('原始数据是非负序列,可进行灰色预测')
else
disp('原始数据不是非负序列,不可以将进行灰色预测')
end
%% 进行准指数规律检验
x1=cumsum(x0);%一次累加序列1——AGO序列
rho=x0(2:end)./x1(1:end-1);
%画出原始序列光滑比
figure(2)
plot(year(2:end),rho,'o-','LineWidth',1.5);grid on;hold on
plot(year(2:end),0.5*ones(length(year)-1,1),'-','LineWidth',1.5);
set(gca,'xtick',year(2:1:end));
legend('光滑度','临界线')
disp(strcat('指标1:光滑比小于0.5的数据占比为',num2str(100*sum(rho
Original: https://blog.csdn.net/xht2403267701/article/details/126387526
Author: 今天美美吃饭啦
Title: 灰色预测GM(1,1)模型
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/650461/
转载文章受原作者版权保护。转载请注明原作者出处!