matlab之BP神經網絡分類與製圖

clc
clear
%%數據導入
%data=importdata('A');  %A爲數據格式,如cd.xlsx、cd.txt,其中cd爲文件名,假設樣本個數200,特徵個數爲30,200*31,第31列表示分類標籤,這裏分爲0-3共4類
k=rand(1,200);         %生成樣本個數的隨機數,以200爲例
[m,n]=sort(k);         %若k爲二維矩陣,則sort(k)表示對每列進行升序排序,m爲移動後矩陣,n爲移動順序。網絡

%上兩步的操做是爲了生成隨機數,以後按比例隨機挑選樣本;
%輸入輸出數據
input=data(:,1:30);
output=data(:,31);           %第21列爲標籤列
%隨機抽取160個樣本爲訓練樣本,40個樣本爲預測樣本
input_train=input(n(1:160),:)';  %行爲樣本列爲特徵點
label_train=output(n(1:160),:)';%相似於標籤
input_test=input(n(161:200),:)';
label_test=output(n(161:200),:)';
%輸入數據歸一化處理
[inputn,inputps]=mapminmax(input_train);
%%BP網絡訓練
% %初始化網絡結構
net=newff(inputn,label_train,13,{'tansig','purelin'});%隱含層節點數設置爲13
net.trainParam.epochs=300;
net.trainParam.lr=0.1;
net.trainParam.goal=0.001;
%網絡訓練
net=train(net,inputn,label_train);
%%BP網絡預測
%預測數據歸一化
inputn_test=mapminmax('apply',input_test,inputps);
%net預測標籤輸出
y=sim(net,inputn_test);%y=sim(net,x);net表示已訓練好的網絡,x表示輸入數據,y表示網絡預測數據。表示用訓練好的網絡預測輸出函數

%根據網絡輸出得到預測類別的種類
y(find(y<0.5))=0;
y(find(y>0.5&y<1.5))=1;
y(find(yt>1.5&y<2.5))=2;
y(find(y>2.5&y<3.5))=3

%製圖_預測分類標籤和實際分類標籤對比圖
figure(1)
plot(y,'og')
hold on
plot(label_test,'r*');
legend('預測標籤','實際標籤')
title('BP神經網絡預測分類與實際類別比對','fontsize',12)
ylabel('類別標籤','fontsize',12)
xlabel('樣本數目','fontsize',12)
ylim([-0.5 3.5])
%精度評價
rightnumber=0;
for i=1:size(label_test,2)
    if BPoutput(i)==label_test(i)
        rightnumber=rightnumber+1;
    end
end
rightratio=rightnumber/size(label_test,2)*100;

sprintf('測試準確率=%0.2f',rightratio)



app

相關文章
相關標籤/搜索