日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

matlab神经网络多分类(模式识别神经网络nprtool)

發(fā)布時間:2023/12/24 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 matlab神经网络多分类(模式识别神经网络nprtool) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、模式識別神經網絡

在matlab命令窗口輸入:nnstart 或 nprtool 就可以進入matlab神經網絡GUI

二、鳶尾花數據集iris示例

1.輸入數據集,劃分訓練集、測試集

load fisheriris;
[m,n]=size(meas);
data=zeros(m,n+1);
data(:,1:n)=meas;
for i=1:m                             %將字符串類別標簽用數值形式表示
    if strcmp(species{i},'setosa')      %strcmp('A','B')用于比較字符串,找出特定的字符串;類比find(a==b)用來找出特定數值
        data(i,n+1)=1;
    elseif strcmp(species{i},'versicolor')
        data(i,n+1)=2;
    elseif strcmp(species{i},'virginica')
        data(i,n+1)=3;
    end
end
%選擇訓練樣本個數 num_train = 60;                 %共150個樣本,60個訓練集,90個測試集 %構造隨機選擇序列 choose = randperm(length(data)); %隨機種子打亂數據樣本的順序 train_data = data(choose(1:num_train),:); %隨機選取60個樣本 label_temp = train_data(:,end); %提取訓練數據的標簽 train(:,end)提取最后一列; label_train = zeros(length(train_data),3); %創(chuàng)建矩陣以儲存向量形式的標簽;
%把輸出分類標簽1,2,3 改為工具箱要求的格式 1=[1 0 0],2=[0 1 0],3=[0 0 1] for i = 1:length(train_data) label_train(i,label_temp(i)) = 1; end train_data = train_data(:,1:end-1)'; %提取數據集特征(剔除標簽),并進行轉置(轉置也可以不必,后續(xù)GUI中轉化為行形式即可) label_train = label_train'; %將向量形式表示的標簽進行轉置(也而不必,理由同上)
test_data = data(choose(num_train+1:end),:); %提取測試集數據 label_temp = test_data(:,end); %提取測試集數據的標簽 label_test = zeros(length(test_data),3); %創(chuàng)建矩陣,準備存放向量形式的測試數據的標簽 %把輸出分類標簽改為工具箱要求的格式 for i = 1:length(test_data) label_test(i,label_temp(i)) = 1; end test_data = test_data(:,1:end-1)'; %提取測試數據的特征,并進行轉置 label_test = label_test'; %提取測試數據的標簽,并進行轉置

2. 三種方法進行模式識別神經網絡搭建

2.1 手動編寫m函數法

法1操作方法:手動編寫m函數如下(借鑒參考資料)

%有三種方式
%法1.命令窗口輸入nnstart,選擇pattern recognition app,用matlab自帶GUI進行網絡設置(最簡單)
%法2.完成法1后,自動生成代碼,將創(chuàng)建網絡的代碼用m文件保存,下次要調用該網絡可直接調用該m文件
%法3.編寫如下代碼
% Create a Pattern Recognition Network
hiddenLayerSize = 10;                         %隱藏層神經元個數設置為10
net = patternnet(hiddenLayerSize);            %創(chuàng)建模式識別神經網絡patternnet
% 將訓練集再按比例70:15:15分為訓練集、驗證集、測試集
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
% Train the Network
[net,tr] = train(net,train_data,label_train); %tr為訓練過程參數?
% Test the Network
predict = net(test_data);       %得到每個樣本屬于第一類、第二類、第三類的概率
[~,predict] = max(predict);     %選擇概率最大的類別作為某一個測試樣本的類別
%% show the result --testings
fig=figure;
gscatter(test_data(1,:),test_data(2,:),predict);
[~,label_test] = max(label_test);
accuracy = length(find(predict==label_test))/length(test_data);
title(['predict the testing data and the accuracy is :',num2str(accuracy)]);

法1結果:

準確率:93.3%,分類效果不錯。

2.2 GUI法

法2操作方法:

輸入nnstart:四種形式的神經網絡:擬合/分類/聚類/時間序列。分類選擇nprtool

輸入nprtool:

注意這里的samples是按行還是按列,如果選擇錯誤則無法點擊next

法2結果:訓練集的混淆矩陣

可以重點看訓練集(分為0.7:0.15:0.15)中的測試集 (是否有必要將訓練集也這么分?);

得到準確率為88.9%,較高,分類效果不錯。

法2操作:加入測試集

法2結果:測試集的混淆矩陣

準確率為96.7%,分類效果很好。

2.3 自動生成代碼法

法3操作方法:由法1GUI得到的網絡自動生成m代碼如下,之后可直接調用該m文件,不需要用GUI。

操作如下:

點擊Simple Scrip即可自動生成代碼

代碼如下:

% Solve a Pattern Recognition Problem with a Neural Network
% Script generated by Neural Pattern Recognition app
% Created 21-May-2020 20:32:42
%
% This script assumes these variables are defined:
%
%   train_data - input data.
%   label_train - target data.

x = train_data;
t = label_train;

% Choose a Training Function
% For a list of all training functions type: help nntrain
% 'trainlm' is usually fastest.
% 'trainbr' takes longer but may be better for challenging problems.
% 'trainscg' uses less memory. Suitable in low memory situations.
trainFcn = 'trainscg';  % Scaled conjugate gradient backpropagation.

% Create a Pattern Recognition Network
hiddenLayerSize = 10;
net = patternnet(hiddenLayerSize);

% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

% Train the Network
[net,tr] = train(net,x,t);

% Test the Network
y = net(x);
e = gsubtract(t,y);
performance = perform(net,t,y)
tind = vec2ind(t);
yind = vec2ind(y);
percentErrors = sum(tind ~= yind)/numel(tind);

% View the Network
view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, ploterrhist(e)
%figure, plotconfusion(t,y)
%figure, plotroc(t,y)

參考資料:

1.監(jiān)督算法之BP,SVM,adaboost的非線性多分類實驗,https://blog.csdn.net/on2way/article/details/48006539,作者:on2way

2.matlab神經網絡工具箱:https://blog.csdn.net/on2way/article/details/47428201

3.adaboost分類:https://www.cnblogs.com/litthorse/p/9332370.html

總結

以上是生活随笔為你收集整理的matlab神经网络多分类(模式识别神经网络nprtool)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。