我写毕业论文要用matlab的RBF神经网络做预测,我的输入是边坡的几个指标(容重 粘聚力 摩擦角 边坡角 边坡高度 水压力比)输出为边坡安全系数,我想出一个误差图如下图所示,该怎么编代码啊,毕设24号就要交了,求大家帮帮忙,十分感谢!p=[20.41,24.91,13,22,10.67,0.35;19.63,11.97,20,22,12.190.405;21.82,8.62,32,28,12.8,0.49;20.41,33.52,11,16,45.72,0.2;18.84,15.32,30,25,10.67,0.38];t=[1.4;1.35;1.03;1.28;1.63];
p=p’ ;
t=t’;
spread=1.2;
goal=0.001;
net=newrb(p,t,goal,spread);我只会编到这,但是没有出图啊,还应该怎么继续编啊。我师姐说可以不用编代码直接用RBF神经网络工具箱就可以,可是我不会,她也不会。麻烦大家帮我看看,谢谢各位!
clc;
clearall;
closeall;
%%----BuildatrainingsetofasimilarversionofXOR
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
%UsingknnsearchtofindKnearestneighborpointsforeachcentervector
%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;
%%trainingfunctionandpredictfunction
[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);
扩展资料
matlab的特点
1、具有完备的图形处理功能,实现计算结果和编程的可视化;
2、友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
3、功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
参考资料来源:百度百科—MATLAB
%RBF预测模型
%标准化后的测试数据集t_data
t_data=[0.1 0.68668 0.67143 0.79999 0.79091 0.40004;
0.36667 0.58001 0.1 0.7 0.71818 0.20001;
0.26 0.47334 0.1 0.29997 0.2091 0.80009;
0.36667 0.9 0.9 0.29997 0.13637 0.37504;
0.26 0.84668 0.67143 0.1 0.42727 0.37504;
0.36667 0.58001 0.44286 0.49999 0.1 0.55006;
0.15333 0.47334 0.44286 0.7 0.42727 0.60006;
0.1 0.84668 0.67143 0.29997 0.5 0.1;
0.15333 0.42 0.21429 0.49999 0.5 0.55006;
0.20667 0.79335 0.21429 0.59999 0.5 0.32503;
0.1 0.42 0.21429 0.9 0.5 0.45005;
0.1 0.84668 0.32857 0.59999 0.5 0.27502;
0.20667 0.47334 0.32857 0.29997 0.13637 0.50005;
0.1 0.68668 0.67143 0.49999 0.24546 0.20001;
0.42 0.58001 0.21429 0.9 0.9 0.42504;
0.31334 0.58001 0.44286 0.49999 0.31818 0.25002;
0.15333 0.42 0.1 0.19999 0.35454 0.55006;
0.20667 0.47334 0.32857 0.29997 0.31818 0.27502;
0.15333 0.68668 0.44286 0.29997 0.31818 0.40004;
0.20667 0.20667 0.21429 0.39999 0.28183 0.52506;
0.26 0.79335 0.21429 0.49999 0.57273 0.9;
0.42 0.36667 0.1 0.59999 0.35454 0.30003;
0.47334 0.36667 0.1 0.59999 0.57273 0.35003;
0.1 0.47334 0.67143 0.7 0.42727 0.49894;
0.42 0.58001 0.67143 0.49999 0.24546 0.47505;
0.31334 0.1 0.32857 0.9 0.79091 0.8501;
0.1 0.52667 0.21429 0.9 0.5 0.50005;
0.52667 0.55867 0.21429 0.1 0.28183 0.42504;
0.9 0.58001 0.55715 0.1 0.17273 0.32503;
0.15333 0.68668 0.62572 0.29997 0.2091 0.57506];
%初始化数据
tt=t_data(:,6);x=t_data(:,1:5);tt=tt';
%随机选取中心
c=x;
%定义delta平方为样本各点的协方差之和
delta=cov(x');
delta=sum(delta);
%隐含层输出R
for i=1:1:30
for j=1:1:30
R(i,j)=((x(i,:)-c(j,:)))*((x(i,:)-c(j,:))');
R(i,j)=exp(-R(i,j)./delta(j));
end
end
p=R;
%建模
%r=radbas(p);
err_goal=0.001;
sc=3;
net=newrb(p,tt,err_goal,sc,200,1);
%测试
ty=sim(net,p);
tE=tt-ty;
tSSE=sse(tE);
tMSE=mse(tE);
%预测(测试)曲线
figure;
plot(tt,'-+');
hold on;
plot(ty,'r:*');
legend('化验值','预测值');
title('RBF网络模型输出预测曲线');
xlabel('输入样本点');
ylabel('淀粉利用率');
axis([1,30,0,1]);
追问
你好非常感谢你的回答,对我就是要这样的图,可是你的编码有点复杂我看不太懂,真是不好意思,我刚刚接触RBF 。你可不可以编个简单点的编码,能出第一个图就行,谢谢啦!
追答数据部分保留,剩下的都删掉,用下面三行替换 由于字数限制不能贴数据部分了,你懂得吧
tt=t_data(:,6);x=t_data(:,1:5);tt=tt';
speed=1;
net=newrb(x',tt,err_goal,speed);
这样就能出图了吗,你看我写的哪有错吗,图片上的。
为什么没有出图呢,就是在net=newrb(p,t,goal,spread);回车后就会出现NEWRB, neurons = 0, MSE = 0.111766是怎么回事啊,麻烦你了,实在是写毕设不会啊,谢谢指导了!
p=[20.41,24.91,13,22,10.67,0.35;19.63,11.97,20,22,12.190 405;21.82,8.62,32,28,12.8,0.49;20.41,33.52,11,16,45.72,0.2;18.84,15.32,30,25,10.67,0.38];
t=[1.4;1.35;1.03;1.28;1.63];
p=p' ;
t=t';
spread=1.2;
goal=0.001;
net=newrb(p,t,goal,spread);
为什么我打完net=newrb(p,t,goal,spread);后就出现NEWRB, neurons = 0, MSE = 0.037496啊?
还有你p‘是怎么打出来的,是打个p让后按“键吗?
我写的代码没有错误吗?
万分感谢!
我改动了一些小错误
追问那你可以吧正确的代码给我发过来吗,谢谢了,还有为什么这个图和你第一个图不一样啊,是输入输出数据太少的事吗?谢谢!
追答是的,你的数据量太少,后面的回答不是把改正了你的程序附上了么
追问你是说逗号的问题吗,可是我是按照你上面附的程序写的啊,可是还是出现NEWRB, neurons = 0, MSE = 0.037496是怎么回事啊?麻烦你了
你的逗号是在中文状态下输入的,区分中英文的 mse 百度下,一个衡量误差的参数
追问我发现我的逗号是在中文状态下打的了,可是我改过来后,依然是不出图啊,为什么啊?出不来图啊,我真实的数据是20组160个数,上面的数据只是为了方便的例子,我就是想我的代码那么写对不对,对的话为什么不出图呢,麻烦你了,我实在是不怎么懂,为了写毕设,我被抽到盲审了,写不出来,方便加你QQ吗,帮帮我吧!回头我再给你加30分,谢谢了!
追答不用 加分了,够多了,给我你qq我 加你吧
追问529741335,真的是太感谢你了!谢谢
追答加不上,需要验证 ,
本回答被提问者采纳利用RBF神经网络做预测
在命令栏敲nntool,按提示操作,将样本提交进去。还有比较简单的是用广义RBF网络,直接用grnn函数就能实现,基本形式是y=grnn(P,T,spread),你可以用help grnn看具体用法。GRNN的预测精度是不错的。广义RBF网络:从输入层到隐藏层相当于是把低维空间的数据映射到高维空间,输入层细胞个数为样本的维度,...
基于RBF神经网络的机械臂运动控制算法(Matlab代码实现)
运行结果 下面展示主函数部分代码:matlab clc; clear all;addpath(genpath('.'));simulation setup sim_period = 0.001;t = 0:sim_period:20;sample_size = size(t, 2);reference trajectory xd(1,:) = sin(t);xd(2,:) = cos(t);xd(3,:) = -sin(t);parameter of neural network...
广义回归神经网络GRNN回归预测-MATLAB代码实现
GRNN预测流程基于距离加权的神经网络原理。首先在模式层进行数据聚类,通过高斯函数计算输入与训练样本的距离权重。随后,将每个样本的输出值乘以其权重,相加以得到未知数据的预测值。在MATLAB中,GRNN的仿真结果通常包括预测结果对比、预测误差图、回归拟合图、误差直方图以及误差指标。GRNN的性能受到特征选择、...
MATLAB工具箱里的RBF神经网络newrb是什么算法
newrb设计了径向基网络,调用格式:net = newrb [net,tr] = newrb(P,T,goal,spread,MN,DF)P-Q组输入向量组成的R×Q维矩阵;T-Q组目标分类向量组成的S×Q维矩阵;goal-均方误差,默认值为0;spread-径向基函数的扩展速度,默认值为1;MN-神经元的最大数目,默认是Q DF-两次显示之间所添加的神...
请问matlab中RBF神经网络newrbe函数用的什么算法
net = newrbe(P,T);%生成神经网络 其算法是:生成的网络有2层,第一层是radbas神经元,用dist计算加权输入,用netprod计算网络输入,第二层是purelin神经元,用 dotprod计算加权输入,用netsum计算网络输入。两层都有偏差b。newrbe先设第一层权重为p',偏差为0.8326,第二层权重IW{2,1}从第一层...
MATLAB | 回归预测 | RBF 径向基神经网络 | 附数据和出图代码 | 直接...
RBF神经网络的基本结构包含输入层、隐藏层和输出层。隐藏层是RBF层,神经元使用径向基函数计算输入向量与每个神经元之间的距离,以此作为激活函数。常用的径向基函数包括高斯函数和多项式函数等。通过K均值聚类算法初始化RBF层的中心,然后利用误差反向传播算法调整网络权值。RBF神经网络的优点包括泛化能力强、...
...多二次核函数,逆多二次核函数)图像的MATLAB代码
径向基函数是单变量的函数,直接用plot命令即可。画出来的图像应该是个尖顶的对称函数曲线。plot(x,y):若y和x为同维向量,则以x为横坐标,y为纵坐标绘制连线图。若x是向量,y是行数或列数与x长度相等的矩阵,则绘制多条不同色彩的连线图,x被作为这些曲线的共同横坐标。若x和y为同型矩阵,则以...
怎么用matlab求神经网络模型的权值矩阵
这个很简单啊,比如说是rbf网络,查看网络权值矩阵方法是:应该是运行完后,在命令窗口输入 net.b{1} net.iw{1,1} net.b{2} net.lw{2,1} 你可以在命令窗口输入type newrbe,查看该函数里面的一些参数,把你需要的输出即可
有哪位RBF神经网络高手能帮我写一下在RBF用聚类方法求中心时的程序啊...
我参照《神经网络原理》的算法描述写的,不知道对不对,欢迎探讨。void CRBFNN::KMeansCluster(size_t K){ if( K >m_nPatternNum)return;int* vecLabel= new int[m_nPatternNum];\/\/step1 初始化 选择K个初始不同的中心点 RandomSelCenter(K);while(true){ memset(vecLabel,-1,sizeof(int...
MATLAB中利用RBF神经网络得到的输出结果中neurons = 0,2,3,4……是...
MATLAB中利用RBF神经网络得到的输出结果中neurons = 0,2,3,4……的意思是神经元的阶数neurons=0,表示神经元为0阶数,均方误差MSE=0.22...neurons=2,表示神经元为2阶数,均方误差MSE=0.10...neurons=3,表示神经元为3阶数,均方误差MSE=0.04...。。。当神经元的阶数越高,其均方误差MSE也...