BP神经网络的数据分类MATLAB源代码.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%%%清除空间
clc
clear all ;
close all ;
%%%训练数据预测数据提取以及归一化
%%%下载四类数据
load data1 c1
load data2 c2
load data3 c3
load data4 c4
%%%%四个特征信号矩阵合成一个矩阵data ( 1:500 , : ) = data1 ( 1:500 , :) ;
data ( 501:1000 , : ) = data2 ( 1:500 , : ) ; data ( 1001:1500 , : ) = data3 ( 1:500 , : ) ; data ( 1501:2000 , : ) = data4 ( 1:500 , : ) ;
%%%%%%从1到2000间的随机排序
k = rand ( 1 , 2000 ) ;
[ m , n ] = sort ( k ) ; %%m为数值,n为标号
%%%%%%%%%%%输入输出数据
input = data ( : , 2:25 ) ;
output1 = data ( : , 1) ;
%%%%%%把输出从1维变到4维
for i = 1 : 1 :2000
switch output1( i )
case 1
output( i , :) = [ 1 0 0 0 ] ;
case 2
output( i , :) = [ 0 1 0 0 ] ;
case 3
output( i , :) = [ 0 0 1 0 ] ;
case 4
output( i , :) = [ 0 0 0 1 ] ;
end
end
%%%%随机抽取1500个样本作为训练样本,500个样本作为预测样本
input_train = input ( n( 1:1500 , : ) )’ ;
output_train = output ( n( 1:1500 , : ) )’ ;
input_test = input ( n( 1501:2000 , : ) )’ ;
output_test = output ( n( 1501:2000 , : ) )’ ; %%%%输入输出数据归一化
[ inputn , inputps ] = mapminmax ( input_train ) ;
%%%网络结构初始化
innum = 24 ; %输入层
midnum = 25 ; %隐含层
outnum = 4 ; %输出层
%权值初始化
w1 = rands ( midnum , innum ) ;
b1 = rands ( midnum , 1 ) ;
w2 = rands ( midnum , outnum ) ;
b2 = rands ( outnum , 1) ;
w2_1 = w2 ; w2_2 = w2_1 ;
w1_1 = w1 ; w1_2 = w1_1 ;
b1_1 = b1 ; b1_2 = b1_1 ;
b2_1 = b2 ; b2_2 = b2_1 ;
%%%学习速率
xite = 0.1 ;
alfa = 0.01 ;
%%%%%网络训练
for ii = 1:10
E( ii ) = 0 ;
for i = 1:1:1500 ;
%%网络预测输出
x = inputn ( : , j ) ;
%%%隐含层输出
for j = 1:1:midnum
l (j) = inputn ( : , i )’*w1( j , : )’ + b1 (j) ;
lout (j) = 1/( 1 +exp( -1(j) ) ) ;
end
%%%%输出层输出
yn = w2’ * lout’ + b2 ;
%%%权值阈值修正
%计算权值变化率
dw2 = e * lout ;
db2 = e’ ;
for j = 1:1:midnum
S= 1/(1 + exp ( -l(j) ) ) ;
Fl (j) = S * ( 1- S) ;
end
for k = 1:1:innum
dw1( k, j ) = Fl (j) * x (k) *( e(1)*w2( j,1) + e(2)*w2( j,2) + e(3)*w2( j,3) + e(4)*w2( j,4) ) ;
db1( j ) = Fl (j) * *( e(1)*w2( j,1) + e(2)*w2( j,2) + e(3)*w2( j,3) + e(4)*w2( j,4) ) ;
end
end
w1=w1_1+xite*dw1';
b1=b1_1+xite*db1';
w2=w2_1+xite*dw2';
b2=b2_1+xite*db2';
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
b1_2=b1_1;b1_1=b1;
b2_2=b2_1;b2_1=b2;
end
end
%%%%语音特征信号分类
input_test = mapminmax ( ‘apply’ , input_test , inputps ); for ii = 1:1
for i = 1:500
%隐含层输出