?? rbfforecastcpi.m
字號(hào):
tic
clear
clc
r=0.001;%設(shè)置容許值
s_err=0;%選擇中心是用的誤差縮減率的和
%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%數(shù)據(jù)預(yù)處理%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%
aa=[109.3000 106.0000 107.3000 118.8000 118.0000 103.1000 103.4000 106.4000 114.7000 124.1000 117.1000 108.3000 102.8000 99.2000 98.6000 100.4000 100.7000 99.2000 101.2000 103.9000 101.8000 101.5000 104.8000];
%m為輸入節(jié)點(diǎn)數(shù)
m=3;
for i=1:(length(aa)-m)
for j=1:m
X(i,j)=aa(i+j-1);
end
end
for i=1:(length(aa)-m)
Y(i)=aa(i+m);
end
Y=Y';%期望輸出
YJ(1)=aa(length(aa)-1);%校正值
YJ(2)=aa(length(aa));
X(20,:)=[];
X(19,:)=[];
Y(20,:)=[];
Y(19,:)=[];
[n,NN]=size(X);%樣本容量
C=X;%初始中心矩陣
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%計(jì)算神經(jīng)的初始網(wǎng)絡(luò)寬度%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
z=1;
for i=1:n
for j=1:n
if i~=j
d(z)=norm(X(i,:)-X(j,:));
z=z+1;
end
end
end
sigma=max(d)/sqrt(n);
%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%建立初始回歸矩陣%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%
for i=1:n %n為樣本向量個(gè)數(shù)
for j=1:n %n為中心向量個(gè)數(shù),開(kāi)始時(shí)將其設(shè)為與輸入樣本向量個(gè)數(shù)相同
P(i,j)=exp(-(norm(X(i,:)-C(j,:)))^2/(sigma^2));%建立回歸矩陣,選高斯函數(shù)作為基函數(shù),其中x(i,:)為樣本向量,c(j,:)為中心向量
end
end
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%RBF網(wǎng)絡(luò)中心的選擇%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
%初始化
for i=1:n
err(1,i)=((P(:,i)'*Y)^2)/(P(:,i)'*P(:,i)*Y'*Y);
end
s_err(1)=max(err(1,:));
for i=1:n
if s_err(1)==err(1,i)
q=i;
break;
end
end
B(:,1)=P(:,q);
Center_C(1,:)=C(q,:);
C(q,:)=[];%%同時(shí)去掉備選中心的第q行
P(:,q)=[];
t=1;%計(jì)數(shù)器,選取中心的個(gè)數(shù)
%
%第k步
%
for k=2:n
q=0;
D=zeros(n);
for i=1:n-k+1
S=0;
A=0;
for j=1:k-1
A(j,i)=(B(:,j)'*P(:,i))/(B(:,j)'*B(:,j));
S=S+A(j,i)*B(:,j);
end
D(:,i)=P(:,i)-S;
err(k,i)=(D(:,i)'*Y)^2/(D(:,i)'*D(:,i)*Y'*Y);
end
s_err(k)=max(err(k,:));
for i=1:n-k+1
if s_err(k)==err(k,i)
q=i;
break;
end
end
if 1-sum(s_err)<r %誤差判斷
break;
else
B(:,k)=D(:,q);
Center_C(k,:)=C(q,:);
C(q,:)=[];%%同時(shí)去掉備選中心的第q行
P(:,q)=[];
t=t+1
end
end
%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%權(quán)值與寬度調(diào)整%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%
Uu=-0.08;
for j=1:t
u(j,1)=sigma;
end
N=12000%循環(huán)次數(shù)
for i=1:N
s=0;
ss=0;
L=0;
Yd=0;
%%%權(quán)值調(diào)整%%%
for k=1:n
for j=1:t
L(k,j)=exp(-(norm(X(k,:)-Center_C(j,:)))^2/(u(j,i)^2));%%回歸矩陣
end
end
w(:,i)=pinv(L)*Y;%最小二乘法調(diào)整權(quán)值向量
Yd=L*w(:,i);%%實(shí)際輸出
e=Yd-Y;
for j=1:length(Yd)
ss=ss+e(j)^2;%求誤差平方和
end
Se(i)=ss;
%%%寬度調(diào)整%%%
tt=fix((i-1)/n)*n;
for j=1:t
s=s+w(j,i)*exp(-(norm(X(i-tt,:)-Center_C(j,:)))^2/(u(j,i)^2));%點(diǎn)調(diào)節(jié)網(wǎng)絡(luò)的寬度
end
YY(i)=s;%實(shí)際值
ee(i)=YY(i)-Y(i-tt);
for j=1:t
u(j,i+1)=u(j,i)+Uu*ee(i)*w(j,i)*exp(-(norm(X(i-tt,:)-Center_C(j,:)))^2/(u(j,i)^2))*(norm(X(i-tt,:)-Center_C(j,:)))^2/u(j,i)^3;
end
end
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%尋找最佳參數(shù)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%
Min_Se=min(Se);%求所有誤差平方和中的最小者
for i=1:N
if Se(i)==Min_Se
a=i;
break;
end
end
%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%計(jì)算訓(xùn)練過(guò)程中的預(yù)測(cè)誤差%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%
for i=1:n
for j=1:t
LL(i,j)=exp(-(norm(X(i,:)-Center_C(j,:)))^2/(u(j,a)^2));
end
end
y=LL*w(:,a);%實(shí)際輸出
jd_wucha=Y-y;%絕對(duì)誤差
for i=1:length(Y)
xd_wucha(i)=abs(jd_wucha(i))/y(i);%相對(duì)誤差絕對(duì)值
end
%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%繪制RBF網(wǎng)絡(luò)訓(xùn)練的誤差平和曲線%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%
x_wucha=1:1:N;
plot(x_wucha,Se,'r-')
grid on;
title('RBF神經(jīng)網(wǎng)絡(luò)誤差曲線');
xlabel('橫軸(序數(shù))');
ylabel('縱軸(平方誤差和)');
%legend('誤差點(diǎn)',2)
%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%校正預(yù)測(cè)與其誤差%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%
xx=[101.2 103.9 101.8;103.9 101.8 101.5];
for i=1:2
for j=1:t
LLL(i,j)=exp(-(norm(xx(i,:)-Center_C(j,:)))^2/(u(j,a)^2)); %建立回歸矩陣
end
end
yy=LLL*w(:,a)
JD_wucha=YJ'-yy;%校正預(yù)測(cè)的絕對(duì)誤差
for i=1:2
XD_wucha(i)=abs(JD_wucha(i))/yy(i)%校正預(yù)測(cè)的的相對(duì)誤差
End
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%開(kāi)始預(yù)測(cè)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
xxx=[101.8 101.5 104.8]%3維輸入數(shù)據(jù)
for j=1:t
LLL(1,j)=exp(-(norm(xxx(1,:)-Center_C(j,:)))^2/(u(j,a)^2)); %建立回歸矩陣
end
yc=LLL*w(:,a)%預(yù)測(cè)值
toc
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -