径向基神经网络续1
一、径向基神经网络的函数
1.创建函数(1)newrb函数
该函数用于设计一个径向基神经网络:
[net,tr]=newrb(P,T,goal,spread,MN,DF)
其中,P为Q组输入向量;T为Q组目标分类向量;goal为均方误差,默认为;spread为径向基函数的分布,默认值为1;MN为神经元的最大数目,默认值为Q;DF为两次显示之间所添加的神经元数目,默认为25;net为生成的径向基网络;tr为生成的训练记录。
在上述代码中,可自行修改spread参数的值,观察结果有何不同,加入用代码net=newrb(p,t,0,0.6);替换为net=newrb(p,t);可以讲spread参数从默认值1改为0.6,使拟合的曲线更加精细,拟合效果如上图所示。
(2)newrbe函数
该函数用于设计一个准确的径向基网络。函数的调用格式为:
net=newrbe(P,T,spread)
其中,P为Q组输入向量;T为Q组目标分类向量;spread为径向基函数的分布,默认值为1.
(3)newpnn函数
该函数可用于创建概率神经网络,概率神经网络是一种适用于分类问题的径向基函数。函数的调用格式为:
net=newpnn(P,T,spread)
其中,输入参数P为输入向量;T为目标向量;spread为径向基函数的分布密度,参数spread的大小对网络逼近精度有很大影响,需要不断调整spread的值。spread越小,函数的比较越精确,但是逼近的过程就越粗糙;spread越大,逼近过程就比较平滑,但是逼近的误差会比较大。
newpnn创建的是一个两层的神经网络:第一层的神经元是径向基神经元,用dist函数计算加权输入,用netprod计算网络输入;第二层的神经元是竞争神经元,用dotprod函数计算加权输入,用netsum函数计算网络输入。其中只有第一层包含阈值。网络将第一层的权值设置为P,第一层的阈值设置为0.8326/spread,且加权输入为±spread时,径向基函数取值恰好为0.5,第二层的权值被设置为T。(4)newgrnn函数
该函数可用于设计一个广义回归神经网络。广义回归神经网络是径向基神经网络的一种,通常用于函数逼近。函数的调用格式为:
net=newgrnn(P,T,spread)
其中,输入参数P为输入向量;T为输出向量;spread为径向基函数的分布函数,参数spread的大小对网络的逼近精度有很大的影响,需要不断地调整spread的值。
2.传递函数
在matlab神经网络工具箱中,提供了radbas函数用于实现径向基函数网络的传递。函数的调用格式为:
A = radbas(N,FP)
其中,输入参数N为SxQ维的网络输入(列)向量矩阵;FP为性能参数(可忽略),返回网络输入向量N的输出矩阵A。
3.转换函数
ind2vec(ind):将数据索引转换为向量组,其中ind2vec函数输入为包含n个下标的行向量ind,调用后可以得到m行n列的向量组矩阵,结果是矩阵中的每个向量I,除了ind中的第I个元素指定位置为1外,其余元素为,结果矩阵的行数等于ind中最大的下标值。
vec2ind(vec):该函数的功能是将单值向量变换成下标值。
4.权函数
1.dist函数
计算欧几里得距离
2.normprod函数
用于实现规范点积权函数
5.竞争性传递函数
A=compet(N,FP)
二、径向基审计网络的应用1.概率分类问题
clearall;
p=[1,2;2,2;1,1]';
t=[1,2,3];
%绘制输入向量及其相应的类别
plot(p(1,:),p(2,:),'r.','markersize',30);
fori=1:3
text(p(1,i)+0.1,p(2,i),sprintf('class %g',t(i)));
end
axis([0 3 0 3]);
%将期望类别指针t转换为向量tc
tc=ind2vec(t);
spread=1;
net=newpnn(p,tc,spread);
a=sim(net,p);
ac=vec2ind(a);
plot(p(1,:),p(2,:),'r.','markersize',30);
axis([0 3 0 3]);
fori=1:3
text(p(1,i)+0.1,p(2,i),sprintf('class %g',ac(i)));
end
%在对新输入向量p进行测试
p=[2;1.5];
a=sim(net,p);
ac=vec2ind(a);
holdon
plot(p(1),p(2),'*','markersize',10,'color',[1 0 0]);
text(p(1)+0.1,p(2),sprintf('class %g',ac));
% hold off
xlabel('p(1,:)与p(1)')
ylabel('p(2,:)与p(2)')
%通过立体图显示三个类别所在面的情况及新的输入向量对应的类别
p1=0:0.05:3;
p2=p1;
[p1,p2]=meshgrid(p1,p2);
pp=[p1(:),p2(:)]';
aa=sim(net,pp);
aa=full(aa);
m=mesh(p1,p2,reshape(aa(1,:),length(p1),length(p2)));
set(m,'facecolor',[0 0.5 1],'linestyle','none');
holdon
m=mesh(p1,p2,reshape(aa(2,:),length(p1),length(p2)));
set(m,'facecolor',[0 0.1 0.5],'linestyle','none');
m=mesh(p1,p2,reshape(aa(3,:),length(p1),length(p2)));
set(m,'facecolor',[0.5 0 1],'linestyle','none');
plot3(p(1,:),p(2,:),[1 1 1]+0.1,'.','markersize',30);
plot3(p(1),p(2),1.1,'*','markersize',10,'color',[1 0 0]);
2.GRNN网络实现曲线拟合
广义回归神经网络以径向基网络为基础发展而来,相比径向基网络,更适合解决曲线你和问题,而且速度更快。
clearall;
x=-9:8;
y=[129,-32,-118,-138,-125,-97,-55,-23,-4,2,1,-31,-72,-121,-142,-174,-155,-77];
plot(x,y,'ro');
p=x;
t=y;
tic;
net=newrb(p,t,0,2);
toc
xx=-9:0.2:8;
yy=sim(net,xx);
holdon;
plot(xx,yy);
tic;
net2=newgrnn(p,t,0.5);
toc
yy2=sim(net2,xx);
plot(xx,yy2,'.-k');
legend('原始数据','径向基拟合','广义回归拟合');
- 厚土Go学习笔记 | 02. 打印当前时间time.Now()时不我待
- 厚土Go学习笔记 | 01. Hello World开篇
- Golang精编100题
- IntelliJ idea配置Go开发环境
- 仰望PHPSHE1.5漏洞
- Golang负载均衡
- 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式
- Golang单例模式
- 2018,我要Axublog。
- 厚土Go学习笔记 | 16. go语言有指针 没有指针运算
- 嗤!给你来点fiyocms漏洞喷雾
- 厚土Go学习笔记 | 15. defer语句延迟函数的执行
- Nodejs学习笔记(九)--- 与Redis的交互(mranney/node_redis)入门
- Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?
- Python计算大文件行数方法及性能比较
- docker容器部署Prometheus服务——云平台监控利器
- ASP.NET Core 奇技淫巧之接口代理转发
- 基于CDH(Cloudera Distribution Hadoop)的大数据平台搭建
- troubleshoot之:用control+break解决线程死锁问题
- Docker 三剑客之docker-compose
- 腾讯云 Severless-Express 项目开发和灰度发布最佳实践
- 在Docker中使用Redis
- 基于实际业务场景下的Flume部署
- troubleshoot之:使用JFR解决内存泄露
- 一个ABAP和JavaScript这两种编程语言的横向比较
- WebRTC & Android 开发学习环境搭建~
- word模板和XML数据源是如何合并生成最后的word文档的详细过程
- Angular路由跳转时,如何传递信息