目錄
1?灰色預測模型
1.1 灰色系統(tǒng)的定義與特點
1.2 灰色預測模型優(yōu)缺點
1.3 灰色生成數(shù)列
1.4 灰色模型GM(1,1)實操步驟
1 數(shù)據(jù)檢驗
2 構建灰色模型
3 檢驗預測值
4 灰色預測模型實例代碼
目前我們學習預測模型的第一類:灰色預測模型。
1?灰色預測模型
????????Gray Forecast Model 是通過少量的、不完全的信息,建立數(shù)學模型并給出預測的一種預測方法。
? ? ? ? 目前常用的一些預測方法(如回歸分析等),需要較大的樣本。若樣本較小,則會造成較大誤差,使預測目標失效。
????????灰色預測模型所需建模信息少,運算方便,建模精度高,在各種預測領域都有著廣泛的應用,是處理小樣本預測問題的有效工具.
1.1 灰色系統(tǒng)的定義與特點
? ? ? ? 灰色系統(tǒng)是黑箱概念的一種推廣。我們把既含有已知信息又含有未知信息的系統(tǒng)稱為灰色系統(tǒng)。
? ? ? ? (1)用灰色數(shù)學處理處理不確定量,使之量化
? ? ? ? (2)充分利用已知信息尋求系統(tǒng)的運動規(guī)律
? ? ? ? (3)灰色系統(tǒng)理論能處理貧信息系統(tǒng)
1.2 灰色預測模型優(yōu)缺點
? ? ? ? 適用范圍:該模型使用的不是原始數(shù)據(jù)的序列, 而是生成的數(shù)據(jù)序列。 核心體系是 Grey Model, 即對原始數(shù)據(jù)作累加生成(或其他處理生成) 得到近似的指數(shù)規(guī)律再進行建模的方法。
? ? ? ?
????????優(yōu)點:在處理較少的特征值數(shù)據(jù), 不需要數(shù)據(jù)的樣本空間足夠大, 就能解決歷史數(shù)據(jù)少、 序列的完整性以及可靠性低的問題, 能將無規(guī)律的原始數(shù)據(jù)進行生成得到規(guī)律較強的生成序列。
? ? ? ? 缺點:只適用于中短期的預測, 只適合近似于指數(shù)增長的預測。需要構建一階常微分方程來求解擬合函數(shù)的函數(shù)表達式。
1.3 灰色生成數(shù)列
????????關鍵在于如何選擇合適的方式去挖掘和利用事物的內(nèi)在規(guī)律。一切灰色序列都能通過某種生成弱化其隨機性,顯現(xiàn)其規(guī)律。數(shù)據(jù)生成的常用方式有累加生成、累減生成和加權累加生成。
(1)累加生成(AGO)
? ? ? ? 設原始數(shù)列為x_0=[x_0(1),x_0(2).....x_0(n)],則x_1(k)=x_0(1)+x_0(2)+......+x_0(n)為原始數(shù)列的1次累加生成數(shù)列。
?????????稱為x_0的r次累加生成數(shù)列。
(2)累減生成(IAGO)
????????設原始數(shù)列為x_1=[x_1(1),x_1(2).....x_1(n)],則x_0(k)=x_1(1)+x_1(2)+......+x_1(n)是原始數(shù)列的1次累減生成數(shù)列。通過累加數(shù)列得到的數(shù)列可以通過累減生成還原成原始數(shù)列。
(3)加權鄰值生成
? ? ? ? 設原始數(shù)列為x_1=[x_1(1),x_1(2).....x_1(n)],稱任意一對相鄰元素x_0(k-1),x_0(k)互為鄰值。對于常數(shù)0<a<1,則
?????????由此得到的數(shù)列稱為鄰值生成數(shù),權a稱為生成系數(shù)。當a=0.5時,則稱數(shù)列為均值生成數(shù)。
1.4 灰色模型GM(1,1)實操步驟
1 數(shù)據(jù)檢驗
????????建模前需要對數(shù)據(jù)進行檢驗,首先計算數(shù)列的級比
????????如果所有的級比都落在可容覆蓋區(qū)間內(nèi)
????????則數(shù)列可以進行灰色預測,否則需要對數(shù)據(jù)進行適當?shù)淖儞Q處理,如平移等。
以下為數(shù)據(jù)檢驗的matlab代碼:?
%數(shù)據(jù)檢驗
function [G, params] = GM(A)
% G為預測數(shù)據(jù),Q為相對殘差Q檢驗,C為方差比C檢驗
% p為小誤差概率p檢驗
%建立符號變量a(發(fā)展系數(shù))和b(灰作用量)
% syms a b;
% c = [a u]';
n = length(A);
%% 級比檢驗
% 對原始數(shù)列 A 做累加得到數(shù)列 B
B = cumsum(A);
% 計算級比和光滑比
sig = zeros(1,n);
rho = zeros(1,n);
for i = 2:n
sig(i) = B(i)/B(i-1);
rho(i) = A(i)/B(i-1);
end
if sum(sig(4:end) >=2 ) == 0 && sum(rho(5:end) >= 0.5) == 0
disp('數(shù)據(jù)滿足光滑條件和指數(shù)規(guī)律')
else
disp('數(shù)據(jù)不滿足光滑條件和指數(shù)規(guī)律')
end
2 構建灰色模型
????????定義x_1的灰導數(shù)為
? ? ? ? ?令z_1(k)為數(shù)列x_1的鄰值生成數(shù)列,即
? ? ? ? ?于是定義GM(1,1)的微分方程模型為
? ? ? ? ?用回歸分析求得a、b的估計值,于是相應的白化模型為
?????????解為
? ? ? ? ?于是得到預測值
?實操:
????????將k=1,2,3,,,n代入式子中得:
? ? ? ? ?引入矩陣向量記號
? ? ? ? ?于是GM(1,1)模型可表示為Y=Bu。
? ? ? ? 那么現(xiàn)在的問題是求a和b的問題,我們可以用一元線性回歸,也就是最小二乘法求他們的估計值為:
?以下是matlab代碼:
%% 數(shù)據(jù)預測
% 對數(shù)列 B 做緊鄰均值生成
C = zeros(n,1);
for i = 2:n
C(i) = (B(i) + B(i - 1))/2;
end
C(1) = [];
% 構造數(shù)據(jù)矩陣
B = [-C,ones(n-1,1)];
Y = A; Y(1) = [];
% 使用最小二乘法計算參數(shù) a(發(fā)展灰數(shù))和b(內(nèi)控制灰數(shù))
c = inv(B'*B)*B'*Y;
a = c(1);
u = c(2);
% 預測后續(xù)數(shù)據(jù)
F(1) = A(1);
for i = 2:n+2 % 預測兩年的數(shù)據(jù)
F(i) = (A(1)-u/a)/exp(a*(i-1))+ u/a;
end
% 對數(shù)列 F 累減還原,得到預測出的數(shù)據(jù)
G(1) = A(1);
for i = 2:n+2
G(i) = F(i) - F(i-1); %得到預測出來的數(shù)據(jù)
end
G = G';
3 檢驗預測值
? ? ? ? (一)殘差檢驗:計算相對誤差
? ? ? ? 如果所有得相對誤差都小于0.1,則認為達到較高的要求。小于0.2,則達到一般要求。
? ? ? ? (二)關聯(lián)度檢驗
? ? ? ? (三)方差比C檢驗
? ? ? ? (四)小誤差概率p檢驗
以下為matlab代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-433032.html
%% 精度檢驗
H = G(1:n);
% 計算殘差序列
epsilon = A - H;
% 法一:相對殘差Q檢驗(MAPE)
% 計算相對殘差
delta = abs(epsilon./A);
% 計算相對誤差平均值Q
Q = mean(delta);
% 計算所對應的的絕對誤差百分比
MAPE = abs(sum(epsilon./A)/(n-1))*100;
% 法二:關聯(lián)度檢驗
r = sum((min(min(abs(epsilon)))+0.5*max(max(abs(epsilon))))./(abs(epsilon)+0.5*max(max(abs(epsilon)))))/n;
% 法三:方差比C檢驗
C = std(epsilon, 1)/std(A, 1);
% 法四:小誤差概率P檢驗
S1 = std(A, 1);
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
P = length(tmp)/n;
params = [a,u,r,C,P,MAPE];
end
4 灰色預測模型實例代碼
原始數(shù)據(jù):A=[71.1 72.4 72.4 72.1 71.4 72.0 71.6]'文章來源地址http://www.zghlxwxcb.cn/news/detail-433032.html
function [G, params] = GM(A)
% G為預測數(shù)據(jù),Q為相對殘差Q檢驗,C為方差比C檢驗
% p為小誤差概率p檢驗
%建立符號變量a(發(fā)展系數(shù))和b(灰作用量)
% syms a b;
% c = [a u]';
n = length(A);
%% 級比檢驗
% 對原始數(shù)列 A 做累加得到數(shù)列 B
B = cumsum(A);
% 計算級比和光滑比
sig = zeros(1,n);
rho = zeros(1,n);
for i = 2:n
sig(i) = B(i)/B(i-1);
rho(i) = A(i)/B(i-1);
end
if sum(sig(4:end) >=2 ) == 0 && sum(rho(5:end) >= 0.5) == 0
disp('數(shù)據(jù)滿足光滑條件和指數(shù)規(guī)律')
else
disp('數(shù)據(jù)不滿足光滑條件和指數(shù)規(guī)律')
end
%% 數(shù)據(jù)預測
% 對數(shù)列 B 做緊鄰均值生成
C = zeros(n,1);
for i = 2:n
C(i) = (B(i) + B(i - 1))/2;
end
C(1) = [];
% 構造數(shù)據(jù)矩陣
B = [-C,ones(n-1,1)];
Y = A; Y(1) = [];
% 使用最小二乘法計算參數(shù) a(發(fā)展灰數(shù))和b(內(nèi)控制灰數(shù))
c = inv(B'*B)*B'*Y;
a = c(1);
u = c(2);
% 預測后續(xù)數(shù)據(jù)
F(1) = A(1);
for i = 2:n+2 % 預測兩年的數(shù)據(jù)
F(i) = (A(1)-u/a)/exp(a*(i-1))+ u/a;
end
% 對數(shù)列 F 累減還原,得到預測出的數(shù)據(jù)
G(1) = A(1);
for i = 2:n+2
G(i) = F(i) - F(i-1); %得到預測出來的數(shù)據(jù)
end
G = G';
%% 精度檢驗
H = G(1:n);
% 計算殘差序列
epsilon = A - H;
% 法一:相對殘差Q檢驗(MAPE)
% 計算相對殘差
delta = abs(epsilon./A);
% 計算相對誤差平均值Q
Q = mean(delta);
% 計算所對應的的絕對誤差百分比
MAPE = abs(sum(epsilon./A)/(n-1))*100;
% 法二:關聯(lián)度檢驗
r = sum((min(min(abs(epsilon)))+0.5*max(max(abs(epsilon))))./(abs(epsilon)+0.5*max(max(abs(epsilon)))))/n;
% 法三:方差比C檢驗
C = std(epsilon, 1)/std(A, 1);
% 法四:小誤差概率P檢驗
S1 = std(A, 1);
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
P = length(tmp)/n;
params = [a,u,r,C,P,MAPE];
end
到了這里,關于數(shù)學建模系列-預測模型(一)灰色預測模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!