點選上方藍字關注“公衆号”
MATLAB 神經網絡變量篩選—基于BP的神經網絡變量篩選
灰色系統理論是一種研究少資料、貧資訊、不确定性問題的新方法,它以部分資訊已知,部分資訊未知的“小樣本”,“貧資訊”不确定系統為研究對象,通過對“部分”已知資訊的生成、開發,提取有價值的資訊,實作對系統運作行為、演化規律的正确描述和有效監控。
灰色理論強調通過對無規律的系統已知資訊的研究,提煉和挖掘有價值的資訊,進而用已知資訊取揭示未知資訊,使系統不斷“白化”。
灰色系統中建立的模型稱為灰色模型(Grey Model),簡稱GM模型,該模型是以原始資料序列為基礎建立的微分方程。
灰色模組化中最有代表性的模型是針對時間序列的GM模組化,它直接将時間序列資料轉化為微分方程,利用系統資訊,使抽象的模型量化,進而在缺乏系統特性知識的情況下預測系統輸出。
灰色神經網絡預測流程包含灰色神經網絡建構,灰色神經網絡訓練和灰色神經網絡預測三個部分。
其中,灰色神經網絡建構根據輸入輸出資料維數确定灰色神經網絡結構。
由于本案例輸入資料為5維,輸出有1維,是以灰色神經網絡結構為1-1-6-1,即LA層有1個節點,輸入為時間序列t,LB層有1個節點,LC層有6個節點,從第2個到第6個分别輸入市場佔有率、需求趨勢、價格波動、訂單滿足率、分銷商聯合預測等5個因素的歸一化資料,輸出為預測訂單量。
灰色神經網絡訓練用訓練資料訓練灰色神經網絡,使網絡具有訂單預測能力。
灰色神經網絡預測用網絡預測訂單數量,并根據預測誤差判斷網絡性能。
共有過去3年36個月的資料,首先取前30個月的資料作為訓練資料訓練網絡,網絡共學習進化100次,然後用剩餘6組資料評價網絡的預測性能。
壹
01
灰色神經網絡算法程式
%% 清空環境變量
clc
clear
load data
%% 資料累加作為網絡輸入
[n,m]=size(X);
for i=1:n
y(i,1)=sum(X(1:i,1));
y(i,2)=sum(X(1:i,2));
y(i,3)=sum(X(1:i,3));
y(i,4)=sum(X(1:i,4));
y(i,5)=sum(X(1:i,5));
y(i,6)=sum(X(1:i,6));
end
貳
01
訓練
%% 網絡參數初始化
a=0.3+rand(1)/4;
b1=0.3+rand(1)/4;
b2=0.3+rand(1)/4;
b3=0.3+rand(1)/4;
b4=0.3+rand(1)/4;
b5=0.3+rand(1)/4;
%% 學習速率初始化
u1=0.0015;
u2=0.0015;
u3=0.0015;
u4=0.0015;
u5=0.0015;
%% 權值閥值初始化
t=1;
w11=a;
w21=-y(1,1);
w22=2*b1/a;
w23=2*b2/a;
w24=2*b3/a;
w25=2*b4/a;
w26=2*b5/a;
w31=1+exp(-a*t);
w32=1+exp(-a*t);
w33=1+exp(-a*t);
w34=1+exp(-a*t);
w35=1+exp(-a*t);
w36=1+exp(-a*t);
theta=(1+exp(-a*t))*(b1*y(1,2)/a+b2*y(1,3)/a+b3*y(1,4)/a+b4*y(1,5)/a+b5*y(1,6)/a-y(1,1));
kk=1;
02
%% 循環疊代
for j=1:10
%循環疊代
E(j)=0;
for i=1:30
%% 網絡輸出計算
t=i;
LB_b=1/(1+exp(-w11*t)); %LB層輸出
LC_c1=LB_b*w21; %LC層輸出
LC_c2=y(i,2)*LB_b*w22; %LC層輸出
LC_c3=y(i,3)*LB_b*w23; %LC層輸出
LC_c4=y(i,4)*LB_b*w24; %LC層輸出
LC_c5=y(i,5)*LB_b*w25; %LC層輸出
LC_c6=y(i,6)*LB_b*w26; %LC層輸出
LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6; %LD層輸出
theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1)); %閥值
ym=LD_d-theta; %網絡輸出值
yc(i)=ym;
%% 權值修正
error=ym-y(i,1); %計算誤差
E(j)=E(j)+abs(error); %誤差求和
error1=error*(1+exp(-w11*t)); %計算誤差
error2=error*(1+exp(-w11*t)); %計算誤差
error3=error*(1+exp(-w11*t));
error4=error*(1+exp(-w11*t));
error5=error*(1+exp(-w11*t));
error6=error*(1+exp(-w11*t));
error7=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*(w21*error1+w22*error2+w23*error3+w24*error4+w25*error5+w26*error6);
%修改權值
w22=w22-u1*error2*LB_b;
w23=w23-u2*error3*LB_b;
w24=w24-u3*error4*LB_b;
w25=w25-u4*error5*LB_b;
w26=w26-u5*error6*LB_b;
w11=w11+a*t*error7;
end
end
%畫誤差随進化次數變化趨勢
figure(1)
plot(E)
title('訓練誤差','fontsize',12);
xlabel('進化次數','fontsize',12);
ylabel('誤差','fontsize',12);
%print -dtiff -r600 28-3
%根據訓出的灰色神經網絡進行預測
for i=31:36
t=i;
LB_b=1/(1+exp(-w11*t)); %LB層輸出
LC_c1=LB_b*w21; %LC層輸出
LC_c2=y(i,2)*LB_b*w22; %LC層輸出
LC_c3=y(i,3)*LB_b*w23; %LC層輸出
LC_c4=y(i,4)*LB_b*w24; %LC層輸出
LC_c5=y(i,5)*LB_b*w25;
LC_c6=y(i,6)*LB_b*w26;
LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6; %LD層輸出
theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1)); %閥值
ym=LD_d-theta; %網絡輸出值
yc(i)=ym;
end
yc=yc*100000;
y(:,1)=y(:,1)*10000;
03
%計算預測的每月需求量
for j=36:-1:2
ys(j)=(yc(j)-yc(j-1))/10;
end
figure(2)
plot(ys(31:36),'-*');
hold on
plot(X(31:36,1)*10000,'r:o');
legend('灰色神經網絡','實際訂單數')
title('灰色系統預測','fontsize',12)
xlabel('月份','fontsize',12)
ylabel('銷量','fontsize',12)
04
仿真結果圖
具體仿真程式連結,微信公衆号回複【神經網絡】即可獲得連結。
未完待續
掃碼關注
不迷路