『壹』 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代入了事。