『壹』 RBF神经网络和BP神经网络,matlab代码有什么区别
clear all
clc %清除命令窗口
load Data-Ass2;
d=data'; %求转置
dat=d(1:2500,1:2);
labels=d(1:2500,3);
inputNums=2; %输入层节点
outputNums=1; %输出层节点 许多情况下直接用1表示
hideNums=10; %隐层节点数
maxcount=1000; %最大迭代次数
samplenum=2500; %一个计数器,无意义
precision=0.001; %预设精度
alpha=0.01; %学习率设定值
a=0.5; %BP优化算法的一个设定值,对上组训练的调整值按比例修改
error=zeros(1,maxcount+1); %error数组初始化;目的是预分配内存空间
errorp=zeros(1,samplenum); %同上
w=rand(hideNums,outputNums); %10*3;w表隐层到输出层的权值
%求聚类中心
[Idx,C]=kmeans(dat,hideNums);
%X 2500*2的数据矩阵
%K 表示将X划分为几类
%Idx 2500*1的向量,存储的是每个点的聚类标号
%C 10*2的矩阵,存储的是K个聚类质心位置
%求扩展常数
dd=zeros(1,10);
for i=1:10
dmin=10000;
for j=1:10
ddd=(C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2;
if(ddd<dmin&&i~=j)
dmin=ddd;
end
end
dd(i)=dmin;
end
%b为进行计算后隐含层的输入矩阵
b=zeros(2500,10);
for i=1:2500
for j=1:10
b(i,j)=exp( -( (dat(i,1)-C(j,1))^2+(dat(i,2)-C(j,2))^2 )/(2*dd(j)) );%dd为扩展常数
end
end
count=1;
while (count<=maxcount) %结束条件1迭代1000次
c=1;
while (c<=samplenum)%对于每个样本输入,计算输出,进行一次BP训练,samplenum为2500
%o输出的值
double o;
o=0.0;
for i=1:hideNums
o=o+b(c,i)*w(i,1);
end
%反馈/修改;
errortmp=0.0;
errortmp=errortmp+(labels(c,1)-o)^2; % 第一组训练后的误差计算
errorp(c)=0.5*errortmp;
yitao=labels(c,1)-o; %输出层误差
for i=1:hideNums %调节到每个隐藏点到输出点的权重
w(i,1)=w(i,1)+alpha*yitao*b(c,i);%权值调整
end
c=c+1; %输入下一个样本数据
end %第二个while结束;表示一次训练结束
%求最后一次迭代的误差
double tmp;
tmp=0.0; %字串8
for i=1:samplenum
tmp=tmp+errorp(i)*errorp(i);%误差求和
end
tmp=tmp/c;
error(count)=sqrt(tmp);%求迭代第count轮的误差求均方根,即精度
if (error(count)<precision)%另一个结束条件
break;
end
count=count+1;%训练次数加1
end
%测试
test=zeros(500,10);
for i=2501:3000
for j=1:10
test(i-2500,j)=exp( -( (d(i,1)-C(j,1))^2+(d(i,2)-C(j,2))^2 )/(2*dd(j)) );%dd为扩展常数
end
end
count=0;
for i=2501:3000
net=0.0;
for j=1:hideNums
net=net+test(i-2500,j)*w(j,1);
end
if( (net>0&&d(i,3)==1) || (net<=0&&d(i,3)==-1) )
count=count+1;
end
end
『贰』 matlab中用RBF神经网络做预测的代码怎么写
clc;
clearall;
closeall;
%%----
c_1=[00];
c_2=[11];
c_3=[01];
c_4=[10];
n_L1=20;%numberoflabel1
n_L2=20;%numberoflabel2
A=zeros(n_L1*2,3);
A(:,3)=1;
B=zeros(n_L2*2,3);
B(:,3)=0;
%createrandompoints
fori=1:n_L1
A(i,1:2)=c_1+rand(1,2)/2;
A(i+n_L1,1:2)=c_2+rand(1,2)/2;
end
fori=1:n_L2
B(i,1:2)=c_3+rand(1,2)/2;
B(i+n_L2,1:2)=c_4+rand(1,2)/2;
end
%showpoints
scatter(A(:,1),A(:,2),[],'r');
holdon
scatter(B(:,1),B(:,2),[],'g');
X=[A;B];
data=X(:,1:2);
label=X(:,3);
%%Usingkmeanstofindcintervector
n_center_vec=10;
rng(1);
[idx,C]=kmeans(data,n_center_vec);
holdon
scatter(C(:,1),C(:,2),'b','LineWidth',2);
%%Calulatesigma
n_data=size(X,1);
%calculateK
K=zeros(n_center_vec,1);
fori=1:n_center_vec
K(i)=numel(find(idx==i));
end
%
%thencalucatesigma
sigma=zeros(n_center_vec,1);
fori=1:n_center_vec
[n,d]=knnsearch(data,C(i,:),'k',K(i));
L2=(bsxfun(@minus,data(n,:),C(i,:)).^2);
L2=sum(L2(:));
sigma(i)=sqrt(1/K(i)*L2);
end
%%Calutateweights
%kernelmatrix
k_mat=zeros(n_data,n_center_vec);
fori=1:n_center_vec
r=bsxfun(@minus,data,C(i,:)).^2;
r=sum(r,2);
k_mat(:,i)=exp((-r.^2)/(2*sigma(i)^2));
end
W=pinv(k_mat'*k_mat)*k_mat'*label;
y=k_mat*W;
%y(y>=0.5)=1;
%y(y<0.5)=0;
%%
[W1,sigma1,C1]=RBF_training(data,label,10);
y1=RBF_predict(data,W,sigma,C1);
[W2,sigma2,C2]=lazyRBF_training(data,label,2);
y2=RBF_predict(data,W2,sigma2,C2);
(2)股票代码KRBF扩展阅读
matlab的特点
1、具有完备的图形处理功能,实现计算结果和编程的可视化;
2、友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
3、功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
『叁』 rbf神经网络在java中如何实现原代码
rbf神经网络有多种学习策略,首先选取中心,可以随机选,也可采用K均值聚类,然后学习权值,可采用伪逆法(涉及矩阵的奇异值分解),也可以采用最小均方误差法,或者进化算法,上述方法中心是固定的,也可采用梯度下降法同时学习中心、宽度、权值,这个比较复杂。具体参考《神经网络原理》。
你用Java写可以参考Weka,其完全开源,不过我没有看过源码,不知其用何种学习策略。最近用C++写了一个简单的rbf,即固定中心、最小均方误差法学习权值,但我发现采用K均值聚类选中心跟随机选没有什么区别,不知二者有何区别?自己写伪逆法对于我来说基本不可能,及其复杂,我看到过某人写了个天书般的程序,一个函数500行。
希望对你有帮助,如果你有新发现,欢迎与我探讨,国内估计没多少人真正自己写过RBF,都用MATLAB代入了事。