灰色预测介绍及应用

灰色预测是一种基于灰色系统理论的预测方法,它可以用来预测没有充足数据的情况下的发展趋势。在灰色预测中,样本数据通常被称为“原始序列”,而通过对原始序列的运算得到的序列则被称为“生成序列”。灰色预测主要是通过对原始序列进行灰色处理,从而使得原始序列的信息更加准确和完整。灰色预测方法的基本思想是将数据序列分为两个部分,即发展趋势部分和随机波动部分。然后,根据发展趋势部分的规律性进行预测。常见的灰色预测模型包括GM(1,1)、GM(2,1)、DGM(1,1)等。其中,GM(1,1)是最基本的灰色预测模型,也是应用最为广泛的一种。该模型通过对原始数据进行一次累加,得到一次累加生成序列,然后通过对该生成序列进行一次指数平滑处理,得到预测值。

GM(1,1),GM(2,1),DGM(1,1)均属于灰色系统理论中的预测模型,适用于少量数据和信息不足的情况下进行预测。其中,GM(1,1)为一阶灰色预测模型,GM(2,1)为二阶灰色预测模型,DGM(1,1)为带噪声的一阶灰色预测模型。

下面分别介绍它们的使用前提、使用方式、算法介绍以及Matlab代码:

  1. GM(1,1)模型 使用前提:
  • 数据较少,无法应用传统的统计学方法进行建模。
  • 数据存在一定的规律性,有明显的趋势或规律。
  • 数据没有明显的周期性变化。

使用方式:

  • 将原始数据进行累加、求均值得到累加生成数列。
  • 建立一阶微分方程模型,通过累加生成数列得到模型参数。
  • 利用模型进行预测。

算法介绍:

  • 灰色预测模型基于灰色系统理论,通过对原始数据的加工和转换,建立数学模型,进行预测。
  • GM(1,1)模型是一阶灰色预测模型,建立的模型为一阶微分方程,具有较好的预测能力。
function [y,pre] = gm11(x)
% GM(1,1)模型
% 输入参数:
% x:原始数据
% 输出参数:
% y:累加生成数列
% pre:模型预测值

n = length(x);
y = cumsum(x);  % 累加生成数列
a = zeros(n-1,2);
b = zeros(n-1,1);
for i=1:n-1
    a(i,1) = -(y(i)+y(i+1))/2;
    a(i,2) = 1;
    b(i) = x(i+1);
end
u = a\b;  % 模型参数
haty = zeros(n,1);  % 模型拟合值
haty(1) = x(1);
for i=2:n
    haty(i) = (x(1)-u(1)/u(2))*(1-exp(u(2)*(i-1))) + u(1)/u(2);
end
pre = haty(n+1);  % 预测值

2.GM(2,1)模型是灰色预测理论中的一种,也是GM(1,1)模型的扩展。相比于GM(1,1)模型,GM(2,1)模型引入了二次变化来拟合原始数据,从而提高了预测精度。GM(2,1)模型适用于非常规数据,如季节性波动较大的数据。

GM(2,1)模型的使用前提是原始数据满足某种规律,可以通过二次变化拟合。使用方式包括数据预处理、建模、模型检验、模型应用等步骤。

function [x0,y0,a]=GM2_1(y)
% GM(2,1)模型预测
% 输入:y-原始数据向量
% 输出:x0-预测值向量,y0-累加生成数向量,a-系数向量
N=length(y);
% 累加生成数列
Y=cumsum(y);
% 紧邻均值生成
for i=2:N
    Y1(i-1)=(Y(i)+Y(i-1))/2;
end
% 矩阵B求解
for i=2:N-1
    B(i-1,:)=[-Y1(i),1];
end
% GM(2,1)模型求解
a=pinv(B)*y(2:N)';
y0(1)=y(1);
x0(1)=y(1);
for i=2:N
    y0(i)=(y(1)-a(1)/a(2))*exp(-a(2)*(i-1))+a(1)/a(2);
    x0(i)=y0(i)-y0(i-1);
end

在代码中,y为输入的原始数据向量,N为数据向量长度。首先通过cumsum函数生成累加生成数列Y,然后计算得到紧邻均值生成数列Y1。接着根据生成数列构造矩阵B,并使用pinv函数求解得到模型系数a。最后通过模型预测出y0,并计算得到预测值向量x0

需要注意的是,在使用GM(2,1)模型进行预测时,需要考虑数据的稳定性和可靠性,并进行必要的数据处理和模型检验。同时,模型预测结果也需要进行合理的解释和应用,避免盲目追求精度而忽略实际应用的可行性。

3.

下面是DGM(1,1)部分的介绍:

DGM(1,1)模型是GM(1,1)模型的改进模型,它引入了一阶累加生成数,将DGM(1,1)模型称为二次指数灰色预测模型。DGM(1,1)模型假设研究对象的发展趋势是由一个有限个变量相互作用的系统控制的,该系统是非线性时变的,但系统的结构和作用机理是未知的。DGM(1,1)模型是通过将非线性时变系统分解为一系列的一次线性时不变系统,来描述非线性时变系统的发展趋势的。

DGM(1,1)模型的使用前提与GM(1,1)模型类似,需要有一定的数据集,且研究对象的发展趋势必须是单调的。

DGM(1,1)模型的算法可以分为以下几个步骤:

  1. 原始数据序列预处理

  2. 累加生成数构建

  3. 模型参数求解

  4. 模型检验

  5. 模型预测

DGM(1,1)模型的matlab代码如下(以预测研究对象2021年和2022年的发展趋势为例):

% 原始数据
y = [100, 110, 120, 140, 155, 175, 200, 225, 260, 300];

% 预测年份
year = [2021, 2022];

% 累加生成数
B = cumsum(y);
n = length(y);
Z1 = zeros(n-1, 1);
Z2 = zeros(n-2, 1);
for i = 1:n-1
    Z1(i) = -0.5*(B(i)+B(i+1));
end
for i = 1:n-2
    Z2(i) = B(i)+2*B(i+1)+B(i+2);
end
Z = [Z1, Z2, ones(n-1, 1)];

% 模型参数求解
a = Z\y(2:end)';

% 模型检验
y_hat = zeros(1, length(y)+length(year));
y_hat(1) = y(1);
for i = 2:n+length(year)
    y_hat(i) = (y(1)-a(3)/a(1))+a(2)/a(1)*i+a(3)/a(1)*exp(-a(1)*(i-1))*sum(Z(1:i-1,:)*a);
end
figure();
plot(1:n+length(year), [y, y_hat(n+1:end)]);
legend('原始数据', '预测数据');

% 模型预测
y_pred = y_hat(end-length(year)+1:end);

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值