拓端tecdat|SAS使用鳶尾花(iris)數(shù)據(jù)集訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)(ANN)模型
原文鏈接:http://tecdat.cn/?p=20781?
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
什么是神經(jīng)網(wǎng)絡(luò)?
人工神經(jīng)網(wǎng)絡(luò)最初是由研究人員開發(fā)的,他們?cè)噲D模仿人腦的神經(jīng)生理學(xué)。通過將許多簡(jiǎn)單的計(jì)算元素(神經(jīng)元或單元)組合成高度互連的系統(tǒng),這些研究人員希望產(chǎn)生諸如智能之類的復(fù)雜現(xiàn)象。神經(jīng)網(wǎng)絡(luò)是一類靈活的非線性回歸,判別模型。通過檢測(cè)數(shù)據(jù)中復(fù)雜的非線性關(guān)系,神經(jīng)網(wǎng)絡(luò)可以幫助做出有關(guān)實(shí)際問題的預(yù)測(cè)。
神經(jīng)網(wǎng)絡(luò)對(duì)于存在以下條件的預(yù)測(cè)問題特別有用:
尚無將輸入與輸出相關(guān)的數(shù)學(xué)公式。
預(yù)測(cè)模型比解釋模型更重要。
有很多訓(xùn)練數(shù)據(jù)。
神經(jīng)網(wǎng)絡(luò)的常見應(yīng)用包括信用風(fēng)險(xiǎn)評(píng)估,營銷和銷售預(yù)測(cè)。
neuralNet
?基于多層感知器(MLP),具有以下特征:
有任意數(shù)量的輸入
在隱藏層和輸出層中使用線性組合函數(shù)
在隱藏層中使用S型激活函數(shù)
具有一個(gè)或多個(gè)包含任意數(shù)量單位的隱藏層
使用神經(jīng)網(wǎng)絡(luò)函數(shù)
該??neuralNet
?通過最小化的目標(biāo)函數(shù)訓(xùn)練網(wǎng)絡(luò)。
開發(fā)神經(jīng)網(wǎng)絡(luò)時(shí),需要做出許多參數(shù)選擇:要使用的輸入數(shù)量,要使用的基本網(wǎng)絡(luò)體系結(jié)構(gòu),要使用的隱藏層數(shù)量,每個(gè)隱藏層的單位數(shù)量,要使用的激活函數(shù)使用等等。
您可能根本不需要任何隱藏層。線性模型和廣義線性模型可用于多種應(yīng)用。而且,即使要學(xué)習(xí)的函數(shù)是輕微的非線性,如果數(shù)據(jù)太少或噪聲太大而無法準(zhǔn)確估計(jì)非線性,使用簡(jiǎn)單的線性模型也可能會(huì)比使用復(fù)雜的非線性模型獲得更好的效果。最簡(jiǎn)單的方法是從沒有隱藏單元的網(wǎng)絡(luò)開始,然后一次添加一個(gè)隱藏單元。然后估計(jì)每個(gè)網(wǎng)絡(luò)的誤差。當(dāng)誤差增加時(shí),停止添加隱藏的單位。
如果有足夠的數(shù)據(jù),足夠多的隱藏單元和足夠的訓(xùn)練時(shí)間,則只有一個(gè)隱藏層的MLP可以學(xué)習(xí)到幾乎任何函數(shù)的準(zhǔn)確性。
生成神經(jīng)網(wǎng)絡(luò)模型的獨(dú)立SAS評(píng)分代碼
訓(xùn)練和驗(yàn)證神經(jīng)網(wǎng)絡(luò)模型后,可以使用該模型對(duì)新數(shù)據(jù)進(jìn)行評(píng)分??梢酝ㄟ^多種方式對(duì)新數(shù)據(jù)進(jìn)行評(píng)分。一種方法是提交新數(shù)據(jù),然后運(yùn)行模型,通過SAS Enterprise Miner或SAS Visual Data Mining and Machine Learning使用數(shù)據(jù)挖掘來對(duì)數(shù)據(jù)進(jìn)行評(píng)分,以生成評(píng)分輸出。
本示例說明如何使用??neuralNet
操作為ANN模型生成獨(dú)立的SAS評(píng)分代碼。SAS評(píng)分代碼可以在沒有SAS Enterprise Miner許可證的SAS環(huán)境中運(yùn)行。
創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)
annTrain
?將創(chuàng)建并訓(xùn)練一個(gè)人工神經(jīng)網(wǎng)絡(luò)(ANN),用于分類,回歸的函數(shù)。
本示例使用Iris
?數(shù)據(jù)集創(chuàng)建多層感知器(MLP)神經(jīng)網(wǎng)絡(luò)。Fisher(1936)發(fā)表的Iris
數(shù)據(jù)包含150個(gè)觀測(cè)值。萼片長(zhǎng)度,萼片寬度,花瓣長(zhǎng)度和花瓣寬度以毫米為單位測(cè)量從各三個(gè)物種50個(gè)標(biāo)本。四種測(cè)量類型成為輸入變量。種類名稱成為名義目標(biāo)變量。目的是通過測(cè)量其花瓣和萼片尺寸來預(yù)測(cè)鳶尾花的種類。
您可以通過以下DATA步驟來將數(shù)據(jù)集加載到會(huì)話中。
data mycas.iris;
set sashelp.iris;
run;
Iris
數(shù)據(jù)中沒有缺失值。這是很重要的,因?yàn)?code>annTrain?操作將從模型訓(xùn)練中剔除包含缺失數(shù)據(jù)的觀察值。如果要用于神經(jīng)網(wǎng)絡(luò)分析的輸入數(shù)據(jù)包含大量缺失值的觀測(cè)值,則應(yīng)在執(zhí)行模型訓(xùn)練之前替換或估算缺失值。因?yàn)?code>Iris數(shù)據(jù)不包含任何缺失值,所以該示例不執(zhí)行變量替換。
該示例使用??annTrain
?來創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)根據(jù)其萼片和花瓣的長(zhǎng)度和寬度(以毫米為單位)的輸入來預(yù)測(cè)預(yù)測(cè)鳶尾花種類的函數(shù)。
target="species"
inputs={"sepallength","sepalwidth","petallength","petalwidth"}
nominals={"species"}
hiddens={2}
maxiter=1000
seed=12345
randDist="UNIFORM"
scaleInit=1
combs={"LINEAR"}
targetAct="SOFTMAX"
errorFunc="ENTROPY"
std="MIDRANGE"
validTable=vldTable
使用
sampling.Stratified
?操作Iris
?按目標(biāo)變量對(duì)輸入數(shù)據(jù)進(jìn)行分區(qū)?Species
。將分區(qū)指示列添加??
_Partind_
?到輸出表。該_Partind_
?列包含映射到數(shù)據(jù)分區(qū)的整數(shù)值。創(chuàng)建一個(gè)由30%的表觀察值組成的采樣分區(qū)??
Species
。剩余的70%的表觀測(cè)值構(gòu)成第二個(gè)分區(qū)。指定
12345
?要用于采樣函數(shù)的隨機(jī)種子值? 。命名
sampling_stratified
?操作創(chuàng)建的輸出表? (帶有新的分區(qū)信息列)??iris_partitioned
。如果內(nèi)存中存在具有該名稱的表,則現(xiàn)有表將被新iris_partitioned
?表內(nèi)容覆蓋? 。在源表中指定所有變量,將其傳輸?shù)讲蓸拥谋碇小?/p>
使用新添加的分區(qū)列中的數(shù)據(jù)創(chuàng)建單獨(dú)的表,以進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練和驗(yàn)證。令訓(xùn)練表
trnTable
?為表? 中所有觀察iris_partitioned
?值的子集,? 其中列的整數(shù)值??_Partind_
?等于1。使用新添加的分區(qū)列中的數(shù)據(jù)創(chuàng)建單獨(dú)的表,進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練和驗(yàn)證。假設(shè)驗(yàn)證表
vldTable
?是表? 中所有觀察iris_partitioned
?值的子集,? 其中列的整數(shù)值??_Partind_
?等于0。annTrain
?通過使用trnTable
?帶有目標(biāo)變量的表,來創(chuàng)建和訓(xùn)練MLP神經(jīng)網(wǎng)絡(luò)??Species
。指定四個(gè)輸入變量用作ANN分析的分析變量。
要求將目標(biāo)變量??
Species
?視為分析的名義變量。為神經(jīng)網(wǎng)絡(luò)前饋模型中的每個(gè)隱藏層指定隱藏神經(jīng)元的數(shù)量。例如,??
hiddens={2}
?用兩個(gè)隱藏的神經(jīng)元指定一個(gè)隱藏層。指定在尋求目標(biāo)函數(shù)收斂時(shí)要執(zhí)行的最大迭代次數(shù)。
指定用于執(zhí)行采樣和分區(qū)任務(wù)的隨機(jī)種子。
要求將UNIFORM分布用于隨機(jī)生成初始神經(jīng)網(wǎng)絡(luò)連接權(quán)重。
指定連接權(quán)重的比例因子,該比例是相對(duì)于上一層中的單位數(shù)的。
scaleInit
?參數(shù)的默認(rèn)值為? 1。將參數(shù)的值設(shè)置??scaleInit
?為2會(huì)增加連接權(quán)重的比例。為每個(gè)隱藏層中的神經(jīng)元指定LINEAR組合函數(shù)。
在輸出層中為神經(jīng)元指定激活函數(shù)。默認(rèn)情況下,SOFTMAX函數(shù)用于名義變量。
指定誤差函數(shù)來訓(xùn)練網(wǎng)絡(luò)。ENTROPY是名義目標(biāo)的默認(rèn)設(shè)置。
指定要在區(qū)間變量上使用的標(biāo)準(zhǔn)化。當(dāng)??
std
?參數(shù)的值為MIDRANGE時(shí),變量將標(biāo)準(zhǔn)化到0和1。指定要用于驗(yàn)證表的輸入表名稱。這樣可以通過使用
optmlOpt
?參數(shù)來盡早停止迭代過程? 。指定??
Nnet_train_model
?作為輸出表。啟用神經(jīng)算法求解器優(yōu)化工具。
指定250次最大迭代以進(jìn)行優(yōu)化,并指定1E–10作為目標(biāo)函數(shù)的閾值停止值。
啟用LBFGS算法。LBFGS是準(zhǔn)牛頓方法族中的一種優(yōu)化算法,它通過使用有限的計(jì)算機(jī)內(nèi)存來近似Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法。
使用頻率參數(shù)來設(shè)置驗(yàn)證選項(xiàng)。當(dāng)??
frequency
?參數(shù)的值為1時(shí),將在每個(gè)時(shí)期進(jìn)行驗(yàn)證。當(dāng)??frequency
?為0時(shí),將不進(jìn)行任何驗(yàn)證。
輸出顯示數(shù)據(jù)的概述。
輸出:列信息
來自table.columnInfo的結(jié)果

如果在輸入表上使用table.fetch
?命令,則可以查看輸出2中顯示的示例數(shù)據(jù)行? 。
輸出2:已提取的行
來自table.fetch的結(jié)果

如果simple.freq
?在輸入表上使用命令,則可以驗(yàn)證三種種類中每種都有50個(gè)觀測(cè)值,輸入數(shù)據(jù)表中總共有150個(gè)觀測(cè)值,如輸出3所示。
輸出 3:物種頻率
來自simple.freq的結(jié)果

Iris
?通過成功完成輸入表的neuralNet.annTrain
訓(xùn)練過程后? ,結(jié)果將顯示訓(xùn)練數(shù)據(jù)迭代歷史記錄,其中包含目標(biāo)函數(shù),損失和驗(yàn)證誤差列,如??輸出4中所示。
輸出 4:優(yōu)化迭代歷史記錄
來自NeuroNet.annTrain的結(jié)果

在“迭代歷史記錄”表下方,您應(yīng)該看到“收斂狀態(tài)”表。對(duì)于成功的神經(jīng)網(wǎng)絡(luò)模型,“收斂狀態(tài)”應(yīng)報(bào)告“優(yōu)化已收斂”,如??輸出 5中所示。
輸出 5:收斂狀態(tài)

成功的模型訓(xùn)練包括輸出模型的摘要結(jié)果,如輸出 6所示? 。
輸出 6:模型信息
這些結(jié)果重申了關(guān)鍵的模型構(gòu)建因素,例如模型類型;目標(biāo)變量 神經(jīng)網(wǎng)絡(luò)模型輸入,隱藏和輸出節(jié)點(diǎn)的摘要;權(quán)重和偏差參數(shù);最終目標(biāo)值;以及評(píng)分驗(yàn)證數(shù)據(jù)集的誤分類誤差。
在表格底部,您將看到由驗(yàn)證數(shù)據(jù)確定的最終誤分類錯(cuò)誤百分比。如果將這個(gè)神經(jīng)網(wǎng)絡(luò)模型用作預(yù)測(cè)函數(shù),并且您的數(shù)據(jù)來自與Iris
?驗(yàn)證表具有相同數(shù)據(jù)分布,則? 可以預(yù)期93%–94%的物種預(yù)測(cè)是正確的。
使用神經(jīng)網(wǎng)絡(luò)模型對(duì)輸入數(shù)據(jù)進(jìn)行評(píng)分
訓(xùn)練和驗(yàn)證神經(jīng)網(wǎng)絡(luò)模型后,可以使用該模型對(duì)新數(shù)據(jù)進(jìn)行評(píng)分。最常見的技術(shù)是通過SAS Enterprise Miner或SAS Visual Data Mining and Machine Learning使用數(shù)據(jù)挖掘環(huán)境來生成評(píng)分輸出,從而提交新數(shù)據(jù)并運(yùn)行模型以對(duì)新數(shù)據(jù)評(píng)分。
擁有訓(xùn)練的神經(jīng)網(wǎng)絡(luò)后,可以使用該神經(jīng)網(wǎng)絡(luò)模型和??annScore
?操作對(duì)新的輸入數(shù)據(jù)進(jìn)行評(píng)分,如下所示:
table=vldTable
modelTable="train_model";
識(shí)別訓(xùn)練數(shù)據(jù)表。訓(xùn)練數(shù)據(jù)是
iris_partitioned
?表中的觀測(cè)值,在分區(qū)指示符列(_partind_
)中的值為0 。確認(rèn)驗(yàn)證數(shù)據(jù)表。驗(yàn)證數(shù)據(jù)是
iris_partitioned
?表中的觀察值,在分區(qū)指示符列(_partind_
)中的值為1 。對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行評(píng)分。提交輸入數(shù)據(jù),該? 數(shù)據(jù)將由經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型評(píng)分。因?yàn)樵诖舜a塊中要評(píng)分的數(shù)據(jù)是模型訓(xùn)練數(shù)據(jù),所以您應(yīng)該期望評(píng)分代碼讀取所有105個(gè)觀察值,并以0%錯(cuò)誤分類錯(cuò)誤預(yù)測(cè)目標(biāo)變量值。模型訓(xùn)練數(shù)據(jù)包含已知的目標(biāo)值,因此,在對(duì)模型訓(xùn)練數(shù)據(jù)進(jìn)行評(píng)分時(shí),應(yīng)期望其分類錯(cuò)誤為0%。
對(duì)驗(yàn)證數(shù)據(jù)評(píng)分。該操作將提交輸入數(shù)據(jù),在SAS數(shù)據(jù)挖掘環(huán)境中,由經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型對(duì)輸入數(shù)據(jù)進(jìn)行評(píng)分。驗(yàn)證數(shù)據(jù)包含已知目標(biāo)值,但訓(xùn)練算法不會(huì)讀取驗(yàn)證數(shù)據(jù)。算法預(yù)測(cè)驗(yàn)證數(shù)據(jù)中每個(gè)觀察值的目標(biāo)值,然后將預(yù)測(cè)值與已知值進(jìn)行比較。分類誤差百分比是通過從1中減去正確預(yù)測(cè)的分類百分比來計(jì)算的。較低的分類誤差百分比通常表示模型性能更好。
驗(yàn)證數(shù)據(jù)包含30%的原始輸入數(shù)據(jù)觀察值,并按目標(biāo)變量Species
分層? 。原始數(shù)據(jù)包含每個(gè)種類的50個(gè)觀察值;驗(yàn)證數(shù)據(jù)(30%)包含三種物種中每一種的比例15個(gè)觀測(cè)值,總共45個(gè)觀測(cè)值。如果驗(yàn)證數(shù)據(jù)中的45個(gè)觀察值中有42個(gè)被正確分類,則該模型的錯(cuò)誤分類誤差為6.67%。

最受歡迎的見解
1.r語言用神經(jīng)網(wǎng)絡(luò)改進(jìn)nelson-siegel模型擬合收益率曲線分析
2.r語言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)和結(jié)果可視化
3.python用遺傳算法-神經(jīng)網(wǎng)絡(luò)-模糊邏輯控制算法對(duì)樂透分析
4.用于nlp的python:使用keras的多標(biāo)簽文本lstm神經(jīng)網(wǎng)絡(luò)分類
5.用r語言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票實(shí)例
6.R語言基于Keras的小數(shù)據(jù)集深度學(xué)習(xí)圖像分類
7.用于NLP的seq2seq模型實(shí)例用Keras實(shí)現(xiàn)神經(jīng)機(jī)器翻譯
8.python中基于網(wǎng)格搜索算法優(yōu)化的深度學(xué)習(xí)模型分析糖
9.matlab使用貝葉斯優(yōu)化的深度學(xué)習(xí)請(qǐng)選中你要保存的內(nèi)容,粘貼到此文本框