BP神经网络的数据分类_MATLAB源代码

  • 格式:docx
  • 大小:16.85 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

for j = 1:1:midnum

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

%隐含层输出

for j = 1:1:midnum

l (j) = input_te st ( : , i )’ * w1( j , : )’ + b1(j) ;

lout ( j ) = 1/ ( 1 + exp( -l(j) ) ) ;

end

fore( :,i ) = w2’ * lout’ + b2 ;

end

end

%%%结果分析

%%%%根据网络输出找出数据属于哪类

for i = 1:500

output_fore (i) = find ( fore (:,i) = =max (fore(:,i) ) ) ; end

%%%%%BP网络预测输出

error = output_fore - output1 ( n( 1501:2000) )’ ;

%%画出分类图

figure (1)

plot ( output_fore , ‘r’ )

hold on

plot (output1( n (1501:2000))’ , ‘b’ ) ;

legend ( ‘预测语音类别’, ‘实际语音类别’) %%%画出误差图

figure (2)

plot (error)

title ( ‘BP网络分类误差’, ‘fontsize’, 12 ) xlabel ( ‘语音信号’, ‘fontsize’, ‘12’) ylabel ( ‘分类误差’, ‘fontsize’, 12 ) %%%%%找出属于哪种类型

for i = 1:500

if error (i) ~= 0

[ b,c ] = max (output_test( :,i ) );

switch c