matlab 神经网络ann用于分类方法
matlab關于ann的分類方法講解了一個例子,Fishr集上鳶尾花(Iris)的分類,學習了這個方法可以套用在個人項目上使用,萬變不離其宗,
1、Fishr集上鳶尾花Iris數據集的分類
①iris數據集簡介
iris數據集的中文名是安德森鳶尾花卉數據集,英文全稱是Anderson’s Iris data set。iris包含150個樣本,對應數據集的每行數據。每行數據包含每個樣本的四個特征和樣本的類別信息,所以iris數據集是一個150行5列的二維表。
通俗地說,iris數據集是用來給花做分類的數據集,每個樣本包含了花萼長度、花萼寬度、花瓣長度、花瓣寬度四個特征(前4列),我們需要建立一個分類器,分類器可以通過樣本的四個特征來判斷樣本屬于山鳶尾、變色鳶尾還是維吉尼亞鳶尾(這三個名詞都是花的品種)。
iris的每個樣本都包含了品種信息,即目標屬性(第5列,也叫target或label)。
樣本局部截圖:
load iris.dat?將數據集載入到工作區,部分數據集如圖所示。數據集的前四列分別為與鳶尾花種類相關的4個特征值,對應上圖中的花萼長度、花萼寬度、花瓣長度及花瓣寬度;第五列為鳶尾花所屬種類,分為1-Setosa、2-Versicolour、3-Virginica三類。
②數據預處理
這里的神經網絡屬于監督學習的模式,因此需要從上述數據集中分離出訓練集和測試集,我們分別記為trainData和testData。我們從iris數據集中選取2/3數據作為訓練集trainData,選取1/3數據作為測試集testData,并分別將其保存至trainData.txt和testData.txt文件,用于程序的數據導入源,方法見另外一個博客(https://blog.csdn.net/qingfengxd1/article/details/105931988)
③分類源程序
%讀取訓練數據 clear clc %------本代碼采用ANN對鳶尾花進行分類,程序運行前,請準備好#鳶尾花樣本#的訓練集和測試集(可在MATLAB中載入iris.dat查看數據)----- %f1 f2 f3 f4是四個特征值 [f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150); %特征值歸一化 [input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]') ; %構造輸出矩陣 s = length( class) ; output = zeros( s , 3 ) ; for i = 1 : s output( i , class( i ) ) = 1 ; end %創建神經網絡 net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ; %{minmax(input):獲取4個輸入信號(存儲在f1 f2 f3 f4中)的最大值和最小值;[10,3]:表示使用2層網絡,第一層網絡節點數為10,第二層網絡節點數為3;{ 'logsig' 'purelin' }:表示每一層相應神經元的激活函數;即:第一層神經元的激活函數為logsig(線性函數),第二層為purelin(對數S形轉移函數)'traingdx':表示學習規則采用的學習方法為traingdx(梯度下降自適應學習率訓練函數) %} %設置訓練參數 net.trainparam.show = 50 ;% 顯示中間結果的周期 net.trainparam.epochs = 500 ;%最大迭代次數(學習次數) net.trainparam.goal = 0.01 ;%神經網絡訓練的目標誤差 net.trainParam.lr = 0.01 ;%學習速率(Learning rate) %開始訓練 %其中input為訓練集的輸入信號,對應output為訓練集的輸出結果 net = train( net, input , output' ) ; %================================訓練完成====================================% %=============================接下來進行測試=================================%%讀取測試數據 [t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);%測試數據歸一化 testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ; %[testInput,minI,maxI] = premnmx( [t1 , t2 , t3 , t4 ]') ; %仿真 %其中net為訓練后得到的網絡,返回的Y為 Y = sim( net , testInput ) %統計識別正確率 [s1 , s2] = size( Y ) ; hitNum = 0 ; for i = 1 : s2[m , Index] = max( Y( : , i ) ) ;if( Index == c(i) ) hitNum = hitNum + 1 ; end end sprintf('識別率是 %3.3f%%',100 * hitNum / s2 )④代碼的相關說明
A.?語句net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ;用于創建神經網絡,其參數含義和用法如下:
????(1)minmax(input):獲取4個輸入信號(存儲在f1 f2 f3 f4中)的最大值和最小值;
????(2) [10,3]:表示使用2層網絡,第一層網絡節點數為10,第二層網絡節點數為3。其中最后一層的網絡包含的節點數一定要與網絡的理論輸出個數保持一致,例如本例中鳶尾花的種類數為3,因此最后一層的網絡節點數為3;
????(3){ 'logsig' 'purelin' }:表示每一層相應神經元的激活函數,即:第一層神經元的激活函數為logsig(線性函數),第二層為purelin(對數S形轉移函數),其他激活函數和用法請參見神經網絡與深度學習之激活函數;
????(4) 'traingdx':表示學習規則采用的學習方法為traingdx(梯度下降自適應學習率訓練函數)。常見的訓練函數(學習方法)有:
??traingd :梯度下降BP訓練函數(Gradient descent backpropagation)
??traingdx :梯度下降自適應學習率訓練函數
????(5)創建的神經網絡用MATLAB神經網絡工具箱顯示如圖,圖中更形象的展示了構造的神經網絡模型。
B.?關于正確率的統計算法的說明
第一次看到這里的正確率統計算法時,我自己是不大明白的,之后又從網上搜了一些資料并查閱了MATLAB的幫助文檔,才明白代碼的含義。
語句net = train( net, input , output' ) ;是對網絡進行訓練,該語句明確了網絡的輸出為output,通過對output矩陣的構造方式分析,我們可知網絡的輸出可以看成3個,我們不妨即為C1、C2、C3,分別代表鳶尾花的三個種類,例如:
(1)當output的某一行為1 0 0,則說明該花屬于C1類
(2)當output的某一行為0 1 0,則說明該花屬于C2類
(3)當output的某一行為0 1 0,則說明該花屬于C3類
語句Y = sim( net , testInput ) 是對訓練后的網絡net進行仿真測試,測試用的數據為testInput;這里,Y返回的是網絡訓練后對測試輸入的預測值,例如:
(1)當Y的某一行為1.0220 ?-0.0020 ?-0.0091,代表輸出結果C1=1.0220, 輸出結果C2=-0.0020,C3=-0.0091
(2)當Y的某一行為-0.0108??0.9884 ?-0.0216,代表輸出結果C1=-0.0108,輸出結果C2=0.9884,C3=-0.0216
輸出結果中只包含一個1和兩個0是理想情況下的結果,在進行仿真時,分類輸出往往達不到這樣的結果,但我們可以根據哪個結果對應的值與1的接近程度來進行判斷,例如仿真結果(1)說明該花極有可能屬于C1類,仿真結果(2)說明該花極有可能屬于C2類。
*從以上描述中我們可以明白神經網絡算法也可以應用于具體數值的預測,且應用廣泛。
?
總結
以上是生活随笔為你收集整理的matlab 神经网络ann用于分类方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中的转义字符使用和说明
- 下一篇: MATLAB 使用CNN拟合回归模型预测