Matlab实现BP神经网络和RBF神经网络(一)

本文介绍如何使用Matlab实现BP和RBF神经网络进行数据分类,对比了不同网络结构的准确率,并通过10-折交叉验证评估。实验涉及数据集划分、参数初始化、激活函数选择、训练策略等,平均准确率约91%,但比SVM较低。
摘要由CSDN通过智能技术生成

本实验依托于教材《模式分类》第二版第六章(公式符号与书中一致)

实验内容:

设计编写BP神经网络和RBF神经网络,对给定数据集进行分类测试,并将分类准确率与SVM进行对比。

实验环境:

matlab2016a

数据集:

数据集大小3*3000,表示3000个样本,每个样本包含2个特征,第三行表示样本所属的分类。对于此次实验编写的BP神经网络和RBF神经网络,均将原始数据集分为训练集和测试集两部分,训练集含2700个样本,测试集300样本,并且采用10-折交叉验证,将数据集分为10份,每次将其中一份作为测试,剩余作为训练,总共进行10次验证,得到10个准确率,将10个准确率求平均作为最终的衡量指标,与SVM分类效果进行对比。

本实验数据集下载:sample_ex6.mat

BP网络和RBF网络相似但有所不同,因此分开阐述,先来设计BP网络。

BP神经网络:

BP网络有三层,输入层,隐含层,输出层,输入层与隐含层之间有权值Wji,隐含层与输出层之间有权值Wkj(i,j,k分别代表各层的神经元数目)。根据给定数据规模,可设计输入层3个神经元(本来是2个神经元,加偏置后变为3),输出层1个神经元,隐含层的神经元个数待会讨论。
BP网络训练算法需要初始化以下参数:

(1)隐含层神经元个数

尽管输入和输出单元数分别由输入向量的维数和类别数目决定,但隐单元个数并不简单与此分类问题的外在特性相关。隐单元的个数决定了网络的表达能力,从而决定判决边界的复杂度。对于较多的隐单元数,训练误差可变得很小,这是因为网络具有较高的表达能力,但这种场合下对测试样本的误差率会很高,是一个“过拟合”的例子;相反隐单元数过少,网络没有足够的自由度来拟合训练集,同样导致测试误差高。一个简单的规则经验是选取隐单元的个数,使得网络的权值总数大致为n/10,n为总的样本数。当然,隐单元的个数需要根据实际效果来调节,这只是一个经验规则。对于本实验,选取初始隐单元数为62左右可使总的权值为n/10。

(2)激活函数

一般输入层到隐含层的激活函数需要非线性,饱和性和连续性,而隐含层到输出层的激活函数为线性即可。使用最多的激活函数是sigmoid函数,具有下列形式的激活函数可以很好的工作:

这里写图片描述

本次实验中,取a=1.716,b=2/3,从而保证线性范围为-1< net <+1。

(3)初始化权值

我们不能简单将权值初始化为0,否则学习过程将不可能开始。我们要设置初始权值以获得快速和均衡地学习,使所有权值同时达到最终的平衡值。为了使-1< net <+1,输入权值应该选取这里写图片描述范围内,d为输入向量的维数。隐含层到输出层的权值应该在这里写图片描述,其中nh为隐含层的神经元个数。

(4)学习率eta和阈值theta

学习率决定网络收敛的速度,可以先设为0.1,如果学习速度过慢,则将学习率调大,如果准则函数在学习过程中发散,则将学习率调小。阈值决定训练是否可以停止,设为0.01即可,根据实验效果再调节。

相关参数初始化后,可以开始训练,有三种训练方式:随机训练、成批训练和在线训练。本实验采用成批训练,更新权值前所有样本都提供一次,记为1个回合。
开始训练前,记得增广输入向量,给输入向量增加一维恒为1,作为偏置。数据训练前可以先规范化,都映射到-1和1之间,经过实际测试,对于本数据,是否规范化对最后的准确率影响不大,但没有规范化的数据收敛慢,运行时间长。

实验代码:

(1)函数 Batch_BP_neutral_network.m(建议使用matlab查看

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值