导航:首页 > 编程大全 > rbf神经网络程序

rbf神经网络程序

发布时间:2023-07-12 17:22:58

1. 用matlab编程实现用RBF神经网络预测客流

%% 清空环境变量
clc
clear
close all
%%
a=load('walk1.txt');%读取数据 % xlsread(‘ ‘);读取execl文件
data=a(1:500,5);%样本数据和测试数据
order=5;%输入数据个数
snum=200;%训练样本数
step=3;%预测步数
input=data(1:snum);
output=data(1+order+step:snum+order+step);
delay=200;%训练样本与测试样本间时延
input1=data(1+delay:snum+delay);
output1=date(1+order+delay+step:snum+order+delay+step);
input_train=zeros(snum,order);input_test=zeros(snum,order);
for i=1:snum
input_train(i,:)=data(i:i+order-1);
input_test(i,:)=data(i+delay:i+delay+order-1);
end
%% RBF神经网络预测
%% 网络建立和训练
net=newrb(input_train',output',0.001,100,300,25);
% net=newrbe(input_train',output',100);
% net=newgrnn(input_train',output',10);
%% 网络验证
ty=sim(net,input_train');
errR=abs(output-ty');
ty1=sim(net,input_test');
errR1=abs(output1-ty1');

figure
plot(1:snum,output1,'r*-');
hold on;
plot(1:snum,ty1','kx-');
title('三步RBF');
xlabel('数据序号');
ylabel('数据值');
legend('实际值','预测值');

figure
subplot(2,1,1);
stem(1:snum,errR1,'r*');
title('三步RBF');
xlabel('数据序号');
ylabel('绝对误差值');
rbfmean = mean(errR1)
subplot(2,1,2);
stem(1:snum,
abs(errR1./output1),'r*');
title('三步RBF');
xlabel('数据序号');
ylabel('绝对误差率');
rbfpmean = mean(abs(errR1./output1))*100%%
自己对着改一下。

2. 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)rbf神经网络程序扩展阅读

matlab的特点

1、具有完备的图形处理功能,实现计算结果和编程的可视化;

2、友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

3、功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

3. 利用RBF神经网络做预测

在命令栏敲nntool,按提示操作,将样本提交进去。
还有比较简单的是用广义RBF网络,直接用grnn函数就能实现,基本形式是y=grnn(P,T,spread),你可以用help grnn看具体用法。GRNN的预测精度是不错的。

广义RBF网络:从输入层到隐藏层相当于是把低维空间的数据映射到高维空间,输入层细胞个数为样本的维度,所以隐藏层细胞个数一定要比输入层细胞个数多。从隐藏层到输出层是对高维空间的数据进行线性分类的过程,可以采用单层感知器常用的那些学习规则,参见神经网络基础和感知器。
注意广义RBF网络只要求隐藏层神经元个数大于输入层神经元个数,并没有要求等于输入样本个数,实际上它比样本数目要少得多。因为在标准RBF网络中,当样本数目很大时,就需要很多基函数,权值矩阵就会很大,计算复杂且容易产生病态问题。另外广RBF网与传统RBF网相比,还有以下不同:
1.径向基函数的中心不再限制在输入数据点上,而由训练算法确定。
2.各径向基函数的扩展常数不再统一,而由训练算法确定。
3.输出函数的线性变换中包含阈值参数,用于补偿基函数在样本集上的平均值与目标值之间的差别。
因此广义RBF网络的设计包括:
1.结构设计--隐藏层含有几个节点合适
2.参数设计--各基函数的数据中心及扩展常数、输出节点的权值。

4. 用c语言编写RBF神经网络程序

RBF网络能抄够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。

简单说明一下为什么RBF网络学习收敛得比较快。当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢。BP网络就是一个典型的例子。

如果对于输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络。常见的局部逼近网络有RBF网络、小脑模型(CMAC)网络、B样条网络等。


附件是RBF神经网络的C++源码。

5. 用matlab神经网络工具箱构建RBF神经网络,跪求源程序!

希望对您有用
clc
clear
close all

%---------------------------------------------------
% 产生训练样本与测试样本,每一列为一个样本

P1 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
T1 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];

P2 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
T2 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];

%---------------------------------------------------
% 归一化

[PN1,minp,maxp] = premnmx(P1);
PN2 = tramnmx(P2,minp,maxp);

%---------------------------------------------------
% 训练

switch 2
case 1

% 神经元数是训练样本个数
spread = 1; % 此值越大,覆盖的函数值就大(默认为1)
net = newrbe(PN1,T1,spread);

case 2

% 神经元数逐步增加,最多就是训练样本个数
goal = 1e-4; % 训练误差的平方和(默认为0)
spread = 1; % 此值越大,需要的神经元就越少(默认为1)
MN = size(PN1,2); % 最大神经元数(默认为训练样本个数)
DF = 1; % 显示间隔(默认为25)
net = newrb(PN1,T1,goal,spread,MN,DF);

case 3

spread = 1; % 此值越大,需要的神经元就越少(默认为1)
net = newgrnn(PN1,T1,spread);

end

%---------------------------------------------------
% 测试

Y1 = sim(net,PN1); % 训练样本实际输出
Y2 = sim(net,PN2); % 测试样本实际输出

Y1 = full(compet(Y1)); % 竞争输出
Y2 = full(compet(Y2));

%---------------------------------------------------
% 结果统计

Result = ~sum(abs(T1-Y1)) % 正确分类显示为1
Percent1 = sum(Result)/length(Result) % 训练样本正确分类率

Result = ~sum(abs(T2-Y2)) % 正确分类显示为1
Percent2 = sum(Result)/length(Result) % 测试样本正确分类率

6. 有哪位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)*m_nPatternNum);
size_t rnd = rand()%m_nPatternNum;//抽取样本 以某种概率抽取样本向量
float fMin = (float)INT_MAX;
float fNum = 0;
//step2 相似匹配 _input[rnd]离_center[j]最近,则标记为j
for(int j=0; j<(int)K; j++)
{
fNum = 0;
for(size_t k = 0; k<m_nInputNum; k++)
fNum += (_input[rnd][k]-_center[j][k])*(_input[rnd][k]-_center[j][k]);
if(fNum < fMin)
{
fMin = fNum;
vecLabel[rnd] = j;
}
}
//step3 更新中心 重新计算_center
CMatrix lastCenter = _center;//一个对象需要通过另外一个对象进行初始化,调用拷贝初始化
for(int i=0; i<(int)K; i++)
{
if(vecLabel[rnd] == i)
{
for(size_t j=0; j<m_nInputNum; j++)
_center[i][j] = _center[i][j] + (_input[rnd][j]-_center[i][j])*0.1f;//学习率0.1
}
}
//step4 _center无明显变化退出
fNum = 0;
for(int i=0; i<(int)K; i++)
{
for(size_t k = 0; k<m_nInputNum; k++)
fNum += (_center[i][k]-lastCenter[i][k])*(_center[i][k]-lastCenter[i][k]);
}
if(fNum < 1e-3)
break;
}
delete[] vecLabel;
}

阅读全文

与rbf神经网络程序相关的资料

热点内容
工程概算文件内容包括 浏览:635
什么样的硬盘数据不丢失 浏览:655
java闹钟案例 浏览:49
win7取消隐藏的文件夹 浏览:270
新昌网站主界面设计是什么 浏览:999
u盘坏了文件找不到怎么办 浏览:106
ps能查到源文件吗 浏览:702
文件路径在哪找 浏览:962
word里怎么加向下箭头 浏览:162
骗钱app有哪些 浏览:202
微信sdk初始化失败 浏览:180
有哪些免费的录制视频app 浏览:330
java反射获取返回值 浏览:91
java随机生成几位数字 浏览:420
电脑中毒无法连接网络 浏览:371
android通知栏文件下载 浏览:81
爱普生p50清零程序 浏览:599
音乐盒下载的文件在哪里 浏览:125
extjs4精简版 浏览:521
1inux删除文件 浏览:576

友情链接