下面將主要從三方面進行大致講解,灰色預測概念及原理、灰色預測的分類及求解步驟、灰色預測的實例講解。
一、灰色預測概念及原理:
1.概述:
關於所謂的“顏色”預測或者檢測等,大致分為三色:黑、白、灰,在此以預測為例闡述。
其中,白色預測是指系統的內部特征完全已知,系統信息完全充分;黑色預測指系統的內部特征一無所知,只能通過觀測其與外界的聯系來進行研究;灰色預測則是介於黑、白兩者之間的一種預測,一部分已知,一部分未知,系統因素間有不確定的關系。細致度比較:白>黑>灰。
2.原理:
灰色預測是通過計算各因素之間的關聯度,鑒別系統各因素之間發展趨勢的相異程度。其核心體系是灰色模型(Grey Model,GM),即對原始數據做累加生成(或者累減、均值等方法)生成近似的指數規律在進行建模的方法。
二、灰色預測的分類及求解步驟:
1.GM(1,1)與GM(2,1)、DGM、Verhulst模型的分類比較:
預測模型 |
適用場景 |
涉及的序列 |
GM(1,1)模型 |
一階微分方程,只含有1個變量的灰色模型。適用於有較強指數規律的序列。 |
累加序列 均值序列 |
GM(2,1)模型 |
適用於預測預測具有飽和的S形序列或者單調的擺動發展序列缺陷。 |
累加序列 累減序列 均值序列 |
DGM模型 |
累加序列 累減序列
|
|
Verhulst模型 |
累加序列 均值序列 |
2.求解步驟思維導圖:
其中預測過程可能會涉及以下三種序列、白化微分方程、以及一系列檢驗,由於大致都相同,僅僅是某些使用累加和累減,而另外一些則使用累加、累減和均值三個序列的差別而已。於是下面筆者將對其進行歸納總結再進行繪制思維導圖,幫助讀者理解。
(1)原始序列(參考數據列):
(2)1次累加序列(1-AGO):
(3)1次累減序列(1-IAGO):(也就是原始序列中,后一項依次減去前一項的值,例如,[x(2)-x(1),x(3-x(2),...,x(n)-x(n-1))]。)
(4)均值生成序列:(這是對累加序列"(前一項+后一項)/2"得出的結果。)
求解步驟:
三、灰色預測的實例講解:
1.使用GM(1,1)的預測檢驗“北方某城市1986年-1992年道路噪聲交通 平均聲級數據:”
見下圖:
1 x0 = [71.1 72.4 72.4 72.1 71.4 72 71.6]'; %這里是列向量,相當於原始數據中因變量 2 n = length(x0); 3 lamda = x0(1:n-1)./x0(2:n) %計算級比 4 range = minmax(lamda') %計算級比的范圍 5 x1 = cumsum(x0) 6 B = [-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)]; %這是構造的數據矩陣B 7 Y = x0(2:n); %數據向量Y 8 u = B\Y %擬合參數u(1)=a,u(2)=b 9 syms x(t) 10 x = dsolve(diff(x)+u(1)*x==u(2),x(0)==x0(1)); %建立模型求解 11 xt = vpa(x,6) %以小數格式顯示微分方程的解 12 prediction1 = subs(x,t,[0:n-1]); %求已知數據的預測值 13 prediction1 = double(prediction1); %符號數轉換成數值類型,以便做差分運算 14 prediction = [x0(1),diff(prediction1)] %差分運算,還原數據 15 epsilon = x0'-prediction %計算殘差 16 delta = abs(epsilon./x0') %計算相對殘差 17 rho = 1-(1-0.5*u(1))/(1+0.5*u(1))*lamda'%計算級比偏差值,u(1)=a
2.使用GM(2,1)的MATLAB實例:
題目:已知=(41,90,61,78,96,104),試建立GM(2,1)模型。
1 %% -------------2.GM(2,1)預測模型-------------------%% 2 x0 = [41 49 61 78 96 104]; 3 n = length(x0); 4 add_x0 = cumsum(x0);%1次累加序列 5 minus_x0 = diff(x0)'; %1次累減序列 6 z = 0.5*(add_x0(2:end)+add_x0(1:end-1))';%計算均值生成序列 7 B = [-x0(2:end)',-z,ones(n-1,1)]; 8 u = B\minus_x0 %最小二乘法擬合參數 9 syms x(t) 10 x = dsolve(diff(x,2)+u(1)*diff(x)+u(2)*x == u(3),x(0) == add_x0(1),x(5) == add_x0(6)); %求符號解 11 xt = vpa(x,6) %顯示小數形式的符號解 12 prediction = subs(x,t,0:n-1); 13 prediction = double(prediction); 14 x0_prediction = [prediction(1),diff(prediction)];%求已知數據點的預測值 15 x0_prediction = round(x0_prediction) %四舍五入取整數 16 epsilon = x0-x0_prediction %求殘差 17 delta = abs(epsilon./x0) %求相對誤差
3.使用DGM的
略
4.使用Verhulst模型的
略