⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classify5.m

📁 根据神经网络原理实现数据的自动分类
💻 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 + -