📄 classify5.m
字号:
clear all;
%---输出是1~8的实数形式,传输函数采用tansig,训练集与测试集的比例为561:160,最后还要进行正确率的比较
%-----数据准备-----
load G:\classify\data\test700.txt
A=test700
testtest=zeros(160,24)% 这里主要是为了最后进行误差检测的时候方便
testtest(1:20,:)=A(65:84,1:24)
testtest(21:40,:)=A(156:175,1:24)
testtest(41:60,:)=A(244:263,1:24)
testtest(61:80,:)=A(342:361,1:24)
testtest(81:100,:)=A(437:456,1:24)
testtest(101:120,:)=A(535:554,1:24)
testtest(121:140,:)=A(622:641,1:24)
testtest(141:160,:)=A(702:721,1:24)
test=testtest(:,2:24)
test=test'
A(65:84,:)=[];
A(136:155,:)=[];
A(204:223,:)=[];
A(282:301,:)=[];
A(357:376,:)=[];
A(435:454,:)=[];
A(502:521,:)=[];
A(562:581,:)=[];
trainP=zeros(561,23)
trainP=A(:,2:24)
trainP=trainP'
trainT=zeros(561,1)
trainT=A(:,1)
trainT=trainT'
%归一化
%[P,minp,maxp,T,mint,maxt]= premnmx(trainP,trainT)
%归一化
F=[trainP test];
for f=1:23
F(f,:)=(F(f,:)-min(F(f,:)))/(max(F(f,:))-min(F(f,:)))
end;
P=F(:,1:561)
test=F(:,562:721)
T=zeros(3,561);
for k=1:561
switch trainT(1,k)
case 1
T(:,k)=[0;0;0];
case 2
T(:,k)=[0;0;1];
case 3
T(:,k)=[0;1;0];
case 4
T(:,k)=[0;1;1];
case 5
T(:,k)=[1;0;0];
case 6
T(:,k)=[1;0;1];
case 7
T(:,k)=[1;1;0];
case 8
T(:,k)=[1;1;1];
end
end
T
qq=testtest(:,1)
qq=qq'
compare=zeros(160,3)
for kkk=1:160
switch qq(1,kkk)
case 1
compare(kkk,1:3)=[0;0;0];
case 2
compare(kkk,1:3)=[0;0;1];
case 3
compare(kkk,1:3)=[0;1;0];
case 4
compare(kkk,1:3)=[0;1;1];
case 5
compare(kkk,1:3)=[1;0;0];
case 6
compare(kkk,1:3)=[1;0;1];
case 7
compare(kkk,1:3)=[1;1;0];
case 8
compare(kkk,1:3)=[1;1;1];
end
end
compare
pause
%训练BP网络
net=newff(minmax(P),[7,9,3],{'tansig','tansig','purelin'},'traincgb');
net=init(net);
net.trainParam.epochs=3000;
net.trainParam.goal=0.000001;
LP.lr=0.45;
net=train(net,P,T);
save net
%测试网络
%P_test= tramnmx(test,minp,maxp)
T_test=sim(net,test);
%反归一化
%T_test=postmnmx(T_test1,mint,maxt)
T_test=T_test'
T_test=round(T_test)%四舍五入
result=[T_test compare]
%对结果进行统计
number=zeros(1,8)
global totalnumber
totalnumber=0
for index=1:20
if result(index,1:3)~=result(index,4:6)
number(1,1)=number(1,1)+1;
end
end
for index=21:40
if result(index,1:3)~=result(index,4:6)
number(1,2)=number(1,2)+1;
end
end
for index=41:60
if result(index,1:3)~=result(index,4:6)
number(1,3)=number(1,3)+1;
end
end
for index=61:80
if result(index,1:3)~=result(index,4:6)
number(1,4)=number(1,4)+1;
end
end
for index=81:100
if result(index,1:3)~=result(index,4:6)
number(1,5)=number(1,5)+1;
end
end
for index=101:120
if result(index,1:3)~=result(index,4:6)
number(1,6)=number(1,6)+1;
end
end
for index=121:140
if result(index,1:3)~=result(index,4:6)
number(1,7)=number(1,7)+1;
end
end
for index=141:160
if result(index,1:3)~=result(index,4:6)
number(1,8)=number(1,8)+1;
end
end
number
totalnumber=sum(number(1,:))
%统计相对误差
error=zeros(1,8)
for ggg=1:8
error(1,ggg)=number(1,ggg)/20
end;
totalerror=totalnumber/160
%记录统计结果
fid=fopen('G:\classify\data\error6_result.txt','at');
fprintf(fid,' %s ','每组随机抽取20个测试数据,共160个,训练数据561个,采用BP网络进行分类: ')
fprintf(fid,'\n');
timetime=datestr(now);
fprintf(fid,timetime);
fprintf(fid,' %s ','每类数据的相对误差为: ') ;
fprintf(fid,'%d ',error);
fprintf(fid,' %s ','总测试数据的相对误差为: ') ;
fprintf(fid,'%d ',totalerror);
fprintf(fid,'\n');
fprintf(fid,'\n');
fclose(fid);
%xlswrite('G:\classify\data\classify4.xls',result)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -