MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   深度神经网络/深度学习 (https://www.labfans.com/bbs/forumdisplay.php?f=45)
-   -   [问题] 将我的程序具体的每一步标明是干什么的 (https://www.labfans.com/bbs/showthread.php?t=13449)

我为股狂 2011-05-21 10:03

将我的程序具体的每一步标明是干什么的
 
下面的是我的Rbf神经网络设计的程序:其中有几个我是摘抄过来的,有不懂的地方请高手把我的程序的每一步都注释出来。我的邮箱是[email protected].谢谢。
clear all
clc
aa=[-5.28 3.39 4.11 13.60 -8.46 3.02 3.46 13.20 -7.74 3.92 4.64 10.95 -17.32 3.92 4.64 28.13 43.03];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m=4; %%%%%%%%%%%%%%%%%%%%m为输入向量维数
for i=1:(length(aa)-m)
for j=1:m
x(i,j)=aa(i+j-1);%%%%%%%%%%%%%%%%%%%%%%%%%%%把aa转换成矩阵x
end
end
x=x';
for i=1:(length(aa)-m)
y(i)=aa(i+m);
end
y=y'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%y为期望输出
c=x; %%%%%%%%%%%%%%%%%%%%%%%%%%%c为初始中心矢量
[NN,n]=size(x);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%采用二进制编码,编制初始控制基因码 ,群体个数为50 %%%%%%%%%%%%%%%%%%%%
%%%用随机的方法生成50组控制基因
r=200;%%%%%%%r为群体个数,设为50
suiji=round(rand(n,r));%%%%%%%%%%%%%随机生成的n×50(元素为0、1)的控制基因矩阵,

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选取网络宽度 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
z=0;
for i=1:n
for j=1:n
if i~=j
d(z+1)=norm(x(:,i)-x(:,j));
z=z+1;
end
end
end
kuan=max(d)/sqrt(2*n);
kuandu=(0.8*(rand(1,n))+1)*kuan;%%%%%在宽度合理的估计区间内随机选取n个宽度,
%%%%%这些宽度由下面的控制基因控制。
%%%%%%%%%%%%%%%%%%%%%%%%%%% 对控制基因进行解码,并计算回归矩阵 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for k=1:400 %%%%%%规定最大进化次数为200次(是本程序的最外层循环)。

for t=1:r %%%%%%%%r为群体个数,此循环为第2层循环,在这层循环中会计算出,
%%%%%%%%第k代基因控制下的网络参数、网络权值和网络的相对误差。
cc=c(:,find(suiji(:,t))); %%%%%%对中心进行解码
kuandu1=kuandu(:,(find(suiji(:,t)))');%%%%%%%%%%%对宽度进行解码

%%%%%%%在中心和宽度已知的条件下,计算回归矩阵
for i=1:n %%%%%%%%%n为输入向量个数
for j=1:length(kuandu1) %%%%%%length(kuandu1)为中心向量个数,
p(i,j)=exp(-(norm(x(:,i)-cc(:,j),1))/(kuandu1(j)^2));%建立回归矩阵p,选高斯函数作为基函数,
end %%其中x(:,i)为样本向量,cc(:,j)为中心向量
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%确定网络的权值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%在中心和宽度已知的情况下,用最小二乘法计算权值
w=pinv(p)*y; %最小二乘法调整权值向量w

%%%%%%%%%%%%%%%%%%%%%%%计算网络的相对误差%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wucha(t)=norm(y'-(p*w)',1)/norm(y',1);%%%%%%%%%求出相对误差

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% 检查网络的相对误差是否满足条件,如果满足则跳出两层循环;
%%%%%% 如果不满足条件,则对50个控制基因进行选择、交叉、变异。
if wucha(t)<0.01 %%%%%%%如果相对误差小于0.01,跳出内层循环,如果条件不满足,继续执行下面的选择、交叉、变异
pp=p;
ww=w;
break
end
end
if min(wucha)<0.01 %%%%%%%%如果条件满足,跳出最外层循环,如果条件不满足,继续执行下面的选择、交叉、变异
pp1=pp;
ww1=ww;
break

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选择 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for t=1:r %%%%%r为群体个数50
shiyingdu(t)=(1/wucha(1,t))'; %%%%%%计算适应度
end
g=round(49*rand(m,r)+1);%%%%%生成m×50的随机矩阵(元素为1-50内的整数)
for i=1:r %%%%%r为群体个数50
for j=1:m
if shiyingdu(g(j,i))==max(shiyingdu((g(:,i))')) %%%%%% 对控制基因进行选择,使用的是联赛选择方法,
%%%%%%其思想是从群体中任意选择4个个体,
dd(1,i)=g(j,i); %%%dd为选择的50个个体 %%%%%%其中适应度最高的个体保存到下一代。
end %%%%% 这一过程反复执行,直到保存到下一代
end %%%%% 的个体达到预先设定的数目(50)为止。
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 交叉 %%%%%%%%%%%%%%%%%%%%%%%%
q=round((n-1)*rand(1,1)+1); %%%%在1-n间随机取1个整数
for i=1:q
aa=suiji(:,dd(i)); %%%%% 交叉:在这里实行单点交叉。具体操作是:
bb=suiji(:,dd(51-i)); %%%% 在个体基因串中随机设定一个交叉点,实
suiji(:,i)=[(aa(1:q));(bb(q+1:n))]; %%%% 行交叉时,该点前或后的两个个体的部分结构
suiji(:,51-i)=[(bb(1:q));(aa(q+1:n))]; %%%% 进行互换,并生成两个新个体。
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 变异 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:r
q=round((n-1)*rand(1,1)+1); %%%%在1-n间随机取1个整数 %%%% 变异:在这里采取基本变异算子。其具体操作是:
%%%% 对群体中基因链码随机挑选一个基因位置
if suiji(q,i)==0 %%%% 并对这个基因位置的基因值取反,即0变成1,1变成0。
suiji(q,i)=1;
else
suiji(q,i)=0;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 绘制期望输出与网络输出的拟合曲线 %%%%%%%%%%%%%%
h=1:n;
z=y'; %%%%%期望输出
o=(pp1*ww1)'; %%%%实际输出
subplot(111)
plot(h,z,'r-*',h,o,'b-*')
legend('期望输出','网络输出');
title('期望输出与网络输出的拟合曲线');
xlabel('横轴(2007年1季度-2011年2季度)');
ylabel('纵轴(期望输出与网络输出的对比曲线)');
grid on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%进行单步预测
x1=[3.92 4.64 28.13 43.03]';%(2010年9月-2010年12月)4维预测输入数据
for j=1:length(cc)
p1(j,1)=exp(-(norm(x1-cc(:,j)))^2/(kuandu1(j)^2));
end
yuecejieguo=(p1(:,1))'*ww1 %%%%%预测的结果


所有时间均为北京时间。现在的时间是 19:38

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.