前言
灰色預(yù)測對原始數(shù)據(jù)進行生成處理來尋找系統(tǒng)變動的規(guī)律,并生成有較強規(guī)律性的數(shù)據(jù)序列,然后建立相應(yīng)的微分方程模型,從而預(yù)測事物未來發(fā)展趨勢的狀況。
一、灰色預(yù)測是什么?
灰色預(yù)測是一種對含有不確定因素的系統(tǒng)進行預(yù)測的方法。 灰色預(yù)測通過鑒別系統(tǒng)因素之間發(fā)展趨勢的相異程度,即進行關(guān)聯(lián)分析,并對原始數(shù)據(jù)進行生成處理來尋找系統(tǒng)變動的規(guī)律,生成有較強規(guī)律性的數(shù)據(jù)序列,然后建立相應(yīng)的微分方程模型,從而預(yù)測事物未來發(fā)展趨勢的狀況。 其用等時距觀測到的反映預(yù)測對象特征的一系列數(shù)量值構(gòu)造灰色預(yù)測模型,預(yù)測未來某一時刻的特征量,或達到某一特征量的時間
二、使用步驟
1.使用條件
這個應(yīng)該是很清晰的,數(shù)據(jù)量少,四五個,然后類指數(shù)形式增長的,什么是類指數(shù)增長:就是一組數(shù)據(jù)累加后排列是否呈類指數(shù)增長,與且預(yù)測的時間不是很長,就可以用。 分為GM (1,1),GM (1,m),GM (n,m)分別用于一個自變量一個因變量,多個自變量一個因變量,多個自變量多個因變量。 灰色預(yù)測就是盡可能使用數(shù)據(jù)中含有的信息。 假設(shè)你有十組數(shù)據(jù),需要預(yù)測接下來的三組數(shù)據(jù),程序跑完,一般是有求殘差的過程,看一看是不是小于0.1,如果每個數(shù)據(jù)點都是小于0.1,那這次灰色預(yù)測就是很好的。
注:
- 數(shù)據(jù)量較少的情況下使用;
- 數(shù)據(jù)呈類指數(shù)增長;
- 預(yù)測時間較短
- 要先進行級比值檢驗
- 后驗差比檢驗
- 模型擬合檢驗
- 模型殘差檢驗
2.以GM(1,1)為例
(1)級比值檢驗
(注:級比值介于區(qū)間[0.982,1.0098]時說明數(shù)據(jù)適合模型構(gòu)建。)
從上表可知,針對某數(shù)據(jù)進行GM(1,1)模型構(gòu)建,結(jié)果顯示:級比值的最大值為1.010,在適用范圍區(qū)間[0.982,1.0098]之外,意味著本數(shù)據(jù)進行GM(1,1)可能得不到滿意的模型。但從數(shù)據(jù)來看,1.01非常接近于1.0098,因此有理由接著進行建模。
如下代碼所示為數(shù)據(jù)級比檢驗:
m = length(A);
JiBi = ones(1,m-1);
for i =2:m
JiBi(i-1) = A(i-1)/A(i);
end
max1 = max(JiBi);
min1 = min(JiBi);
FanWei = exp(2/(n+2))-exp(-2/(n+1))
if max1 - min1<FanWei
disp(['數(shù)據(jù)通過級別檢驗']);
else
disp(['數(shù)據(jù)不通過級比檢驗']);
end
(2)后驗差比檢驗
后驗差比C值用于模型精度等級檢驗,該值越小越好,一般C值小于0.35則模型精度等級好,C值小于0.5說明模型精度合格,C值小于0.65說明模型精度基本合格,如果C值大于0.65,則說明模型精度等級不合格。
從上表可知,后驗差比C值0.231 <=0.35,意味著模型精度等級非常好。
以下為發(fā)展系數(shù)、灰色作用量和C值代碼:
%構(gòu)造數(shù)據(jù)矩陣
B = [-C;ones(1,n-1)];
Y = A; Y(1) = []; Y = Y'; %Y進行了轉(zhuǎn)置,C的公式求法與百度文庫 發(fā)生了一些變化
% 使用最小二乘法計算參數(shù) a(發(fā)展系數(shù))和b(灰作用量)
c = inv(B*B')*B*Y; %核心公式
c = c';
a = c(1); b = c(2);
disp(['發(fā)展系數(shù):',num2str(a)]);
disp(['灰色作用量:',num2str(b)]);
%預(yù)測后續(xù)數(shù)據(jù)
F = []; F(1) = A(1);
%法二:方差比C檢驗
C = std(epsilon, 1)/std(A, 1); %方差函數(shù)std 按照列分
disp(['方差比C檢驗:',num2str(C)]);
(3)模型擬合檢驗
上表格展示出模型的擬合值,以及向后12期的擬合數(shù)據(jù)情況,當然也可通過圖形直觀查看如下圖,下圖明顯可以看出,往后時會一直下降,這是GM(1,1)模型的特征,其僅適用于中短期預(yù)測,因此向后1期和向后2期的數(shù)據(jù)具有價值,更多的預(yù)測數(shù)據(jù)需要特別謹慎對待。
以下為模型擬合檢驗代碼:
%模型檢驗
H = G(1:T1);
epsilon = A - H; %計算殘差序列
disp(['殘差檢驗:',num2str(epsilon)]);
畫圖展示:
%繪制曲線圖
plot(t1, A,'ro'); hold on;
plot(t2, G, 'g-');
grid on;
(4)模型殘差檢驗
模型殘差檢驗,主要是查看相對誤差值和級比偏差值,驗證模型效果情況。
從上表可知,模型構(gòu)建后可對相對誤差和級比偏差值進行分析,驗證模型效果情況;模型相對誤差值最大值0.007<0.1,意味著模型擬合效果達到較高要求。
針對級比偏差值,該值小于0.2說明達到要求,若小于0.1則說明達到較高要求;模型相對誤差值最大值0.020<0.1,意味著模型擬合效果達到較高要求。
以下為殘差值檢驗代碼:
%法一:計算相對誤差Q
delta = abs(epsilon./A);
Q = mean(delta);
disp(['相對殘差Q檢驗:',num2str(Q)]);
%法二:方差比C檢驗
C = std(epsilon, 1)/std(A, 1); %方差函數(shù)std 按照列分
disp(['方差比C檢驗:',num2str(C)]);
%法三:小誤差概率P檢驗
S1 = std(A, 1);
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
P = length(tmp)/n;
disp(['小誤差概率P檢驗:',num2str(P)])
(5)級比偏差檢驗
這是在(check.m)函數(shù)里的,需要調(diào)用文章來源:http://www.zghlxwxcb.cn/news/detail-414234.html
% 預(yù)測
p_d = zeros(n, 1);
for i = 1 : n - 1
p_d(i + 1) = (1-exp(a))*(d(1)-b/a)*exp(-a*i);
end
% 級比偏差
u = abs(d(2:end)-p_d(2:end))./d(2:end);
disp('均級比偏差為(通常小于0.1則說明適合灰色預(yù)測):');
disp(mean(u));
% 相對殘差
disp('均級相對殘差為(通常小于0.1則說明適合灰色預(yù)測):');
e = abs(1-(1-0.5*a)/(1+0.5*a)*(d(1:end-1)./d(2:end)));
disp(mean(e));
end
三 、總結(jié)
1.代碼總結(jié)
clc;clear; %建立符號變量a(發(fā)展系數(shù))和b(灰作用量)
syms a b;
c = [a b]';
A = [1 4 6 9 10 12 21 34
]; %輸入需要預(yù)測的數(shù)據(jù)
T1=length(A);
T2=100; %輸入需要預(yù)測數(shù)據(jù)個數(shù)
t1=1:T1;
t2=1:T1+T2;
n = T1;
m = length(A);
JiBi = ones(1,m-1);
for i =2:m
JiBi(i-1) = A(i-1)/A(i);
end
max1 = max(JiBi);
min1 = min(JiBi);
FanWei = exp(2/(n+2))-exp(-2/(n+1))
if max1 - min1<FanWei
disp(['數(shù)據(jù)通過級別檢驗']);
else
disp(['數(shù)據(jù)不通過級比檢驗']);
end
%對原始數(shù)列 A 做累加得到數(shù)列 B
B = cumsum(A);
%對數(shù)列 B 做緊鄰均值生成
for i = 2:n
C(i) = (B(i) + B(i - 1))/2;
end
C(1) = [];
%構(gòu)造數(shù)據(jù)矩陣
B = [-C;ones(1,n-1)];
Y = A; Y(1) = []; Y = Y'; %Y進行了轉(zhuǎn)置,C的公式求法與百度文庫 發(fā)生了一些變化
% 使用最小二乘法計算參數(shù) a(發(fā)展系數(shù))和b(灰作用量)
c = inv(B*B')*B*Y; %核心公式
c = c';
a = c(1); b = c(2);
disp(['發(fā)展系數(shù):',num2str(a)]);
disp(['灰色作用量:',num2str(b)]);
%預(yù)測后續(xù)數(shù)據(jù)
F = []; F(1) = A(1);
for i = 2:T1+T2
F(i) = (A(1)-b/a)*exp(-a*(i-1))+ b/a;
end
%對數(shù)列 F 累減還原,得到預(yù)測出的數(shù)據(jù)
G = []; G(1) = A(1);
for i = 2:T1+T2
G(i) = F(i) - F(i-1); %得到預(yù)測出來的數(shù)據(jù)
end
disp(['預(yù)測數(shù)據(jù)為:',num2str(G)]);
%模型檢驗
H = G(1:T1);
epsilon = A - H; %計算殘差序列
disp(['殘差檢驗:',num2str(epsilon)]);
%法一:計算相對誤差Q
delta = abs(epsilon./A);
Q = mean(delta);
disp(['相對殘差Q檢驗:',num2str(Q)]);
%法二:方差比C檢驗
C = std(epsilon, 1)/std(A, 1); %方差函數(shù)std 按照列分
disp(['方差比C檢驗:',num2str(C)]);
%法三:小誤差概率P檢驗
S1 = std(A, 1);
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
P = length(tmp)/n;
disp(['小誤差概率P檢驗:',num2str(P)])
%級比偏差和相對殘差
check(A)
%繪制曲線圖
plot(t1, A,'ro'); hold on;
plot(t2, G, 'g-');
grid on;
2.公式總結(jié)
以上內(nèi)容主要是針對如何使用灰色預(yù)測(GM(1,1))進行了一個概述,具體的公式講解并沒有列舉出來,如若需要,再進行公式的細分和講解。文章來源地址http://www.zghlxwxcb.cn/news/detail-414234.html
到了這里,關(guān)于【數(shù)學建模】灰色預(yù)測法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!