R語言中的BP神經(jīng)網(wǎng)絡(luò)模型分析學(xué)生成績|附代碼數(shù)據(jù)
原文鏈接:tecdat.cn/?p=19936
在本教程中,您將學(xué)習(xí)如何在R中創(chuàng)建神經(jīng)網(wǎng)絡(luò)模型?(?點(diǎn)擊文末“閱讀原文”獲取完整代碼數(shù)據(jù))。
神經(jīng)網(wǎng)絡(luò)(或人工神經(jīng)網(wǎng)絡(luò))具有通過樣本進(jìn)行學(xué)習(xí)的能力。人工神經(jīng)網(wǎng)絡(luò)是一種受生物神經(jīng)元系統(tǒng)啟發(fā)的信息處理模型。它由大量高度互連的處理元件(稱為神經(jīng)元)組成,以解決問題。它遵循非線性路徑,并在整個(gè)節(jié)點(diǎn)中并行處理信息。神經(jīng)網(wǎng)絡(luò)是一個(gè)復(fù)雜的自適應(yīng)系統(tǒng)。自適應(yīng)意味著它可以通過調(diào)整輸入權(quán)重來更改其內(nèi)部結(jié)構(gòu)。
該神經(jīng)網(wǎng)絡(luò)旨在解決人類容易遇到的問題和機(jī)器難以解決的問題,例如識(shí)別貓和狗的圖片,識(shí)別編號(hào)的圖片。這些問題通常稱為模式識(shí)別。它的應(yīng)用范圍從光學(xué)字符識(shí)別到目標(biāo)檢測。
本教程將涵蓋以下主題:
神經(jīng)網(wǎng)絡(luò)概論
正向傳播和反向傳播
激活函數(shù)
R中神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)
案例
利弊
結(jié)論
神經(jīng)網(wǎng)絡(luò)概論
神經(jīng)網(wǎng)絡(luò)是受人腦啟發(fā)執(zhí)行特定任務(wù)的算法。它是一組連接的輸入/輸出單元,其中每個(gè)連接都具有與之關(guān)聯(lián)的權(quán)重。在學(xué)習(xí)階段,網(wǎng)絡(luò)通過調(diào)整權(quán)重進(jìn)行學(xué)習(xí),來預(yù)測給定輸入的正確類別標(biāo)簽。
人腦由數(shù)十億個(gè)處理信息的神經(jīng)細(xì)胞組成。每個(gè)神經(jīng)細(xì)胞都認(rèn)為是一個(gè)簡單的處理系統(tǒng)。被稱為生物神經(jīng)網(wǎng)絡(luò)的神經(jīng)元通過電信號(hào)傳輸信息。這種并行的交互系統(tǒng)使大腦能夠思考和處理信息。一個(gè)神經(jīng)元的樹突接收來自另一個(gè)神經(jīng)元的輸入信號(hào),并根據(jù)這些輸入將輸出響應(yīng)到某個(gè)其他神經(jīng)元的軸突。
樹突接收來自其他神經(jīng)元的信號(hào)。單元體將所有輸入信號(hào)求和以生成輸出。當(dāng)總和達(dá)到閾值時(shí)通過軸突輸出。突觸是神經(jīng)元相互作用的一個(gè)點(diǎn)。它將電化學(xué)信號(hào)傳輸?shù)搅硪粋€(gè)神經(jīng)元。
x1,x2 .... xn是輸入變量。w1,w2 .... wn是各個(gè)輸入的權(quán)重。b是偏差,將其與加權(quán)輸入相加即可形成輸入。偏差和權(quán)重都是神經(jīng)元的可調(diào)整參數(shù)。使用一些學(xué)習(xí)規(guī)則來調(diào)整參數(shù)。神經(jīng)元的輸出范圍可以從-inf到+ inf。神經(jīng)元不知道邊界。因此,我們需要神經(jīng)元的輸入和輸出之間的映射機(jī)制。將輸入映射到輸出的這種機(jī)制稱為激活函數(shù)。
前饋和反饋人工神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)主要有兩種類型:前饋和反饋人工神經(jīng)網(wǎng)絡(luò)。前饋神經(jīng)網(wǎng)絡(luò)是非遞歸網(wǎng)絡(luò)。該層中的神經(jīng)元僅與下一層中的神經(jīng)元相連,并且它們不形成循環(huán)。在前饋中,信號(hào)僅在一個(gè)方向上流向輸出層。
反饋神經(jīng)網(wǎng)絡(luò)包含循環(huán)。通過在網(wǎng)絡(luò)中引入環(huán)路,信號(hào)可以雙向傳播。反饋周期會(huì)導(dǎo)致網(wǎng)絡(luò)行為根據(jù)其輸入隨時(shí)間變化。反饋神經(jīng)網(wǎng)絡(luò)也稱為遞歸神經(jīng)網(wǎng)絡(luò)。
激活函數(shù)
激活函數(shù)定義神經(jīng)元的輸出。激活函數(shù)使神經(jīng)網(wǎng)絡(luò)具有非線性和可表達(dá)性。有許多激活函數(shù):
識(shí)別函數(shù)?通過激活函數(shù) Identity,節(jié)點(diǎn)的輸入等于輸出。它完美擬合于潛在行為是線性(與線性回歸相似)的任務(wù)。當(dāng)存在非線性,單獨(dú)使用該激活函數(shù)是不夠的,但它依然可以在最終輸出節(jié)點(diǎn)上作為激活函數(shù)用于回歸任務(wù)。。
在?二元階梯函數(shù)(Binary Step Function)中,如果Y的值高于某個(gè)特定值(稱為閾值),則輸出為True(或已激活),如果小于閾值,則輸出為false(或未激活)。這在分類器中非常有用。
S形函數(shù)?稱為S形函數(shù)。邏輯和雙曲正切函數(shù)是常用的S型函數(shù)。有兩種:
Sigmoid函數(shù)?是一種邏輯函數(shù),其中輸出值為二進(jìn)制或從0到1變化。
tanh函數(shù)?是一種邏輯函數(shù),其輸出值在-1到1之間變化。也稱為雙曲正切函數(shù)或tanh。
ReLU函數(shù)又稱為修正線性單元(Rectified Linear Unit),是一種分段線性函數(shù),其彌補(bǔ)了sigmoid函數(shù)以及tanh函數(shù)的梯度消失問題。它是最常用的激活函數(shù)。對(duì)于x的負(fù)值,它輸出0。
在R中實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)
創(chuàng)建訓(xùn)練數(shù)據(jù)集
我們創(chuàng)建數(shù)據(jù)集。在這里,您需要數(shù)據(jù)中的兩種屬性或列:特征和標(biāo)簽。在上面顯示的表格中,您可以查看學(xué)生的專業(yè)知識(shí),溝通技能得分和學(xué)生成績。因此,前兩列(專業(yè)知識(shí)得分和溝通技能得分)是特征,第三列(學(xué)生成績)是二進(jìn)制標(biāo)簽。
#創(chuàng)建訓(xùn)練數(shù)據(jù)集 #?在這里,把多個(gè)列或特征組合成一組數(shù)據(jù) test=data.frame(專業(yè)知識(shí),溝通技能得分)讓我們構(gòu)建神經(jīng)網(wǎng)絡(luò)分類器模型。 首先,導(dǎo)入神經(jīng)網(wǎng)絡(luò)庫,并通過傳遞標(biāo)簽和特征的參數(shù)集,數(shù)據(jù)集,隱藏層中神經(jīng)元的數(shù)量以及誤差計(jì)算來創(chuàng)建神經(jīng)網(wǎng)絡(luò)分類器模型。 `````` #?擬合神經(jīng)網(wǎng)絡(luò) nn(成績~專業(yè)知識(shí)+溝通技能得分,?hidden=3,act.fct?=?"logistic", ????????????????linear.output?=?FALSE) 復(fù)制代碼
這里得到模型的因變量、自變量、損失_函數(shù)、_激活函數(shù)、權(quán)重、結(jié)果矩陣(包含達(dá)到的閾值,誤差,AIC和BIC以及每次重復(fù)的權(quán)重的矩陣)等信息:
$model.list $model.list$response [1]?"成績" $model.list$variables [1]?"專業(yè)知識(shí)"?????"溝通技能得分" $err.fct function?(x,?y)? { ????1/2?*?(y?-?x)^2 } $act.fct function?(x)? { ????1/(1?+?exp(-x)) } $net.result $net.result[[1]] ????????????[,1] [1,]?0.980052980 [2,]?0.001292503 [3,]?0.032268860 [4,]?0.032437961 [5,]?0.963346989 [6,]?0.977629865 $weights $weights[[1]] $weights[[1]][[1]] ???????????[,1]????????[,2]???????[,3] [1,]??3.0583343??3.80801996?-0.9962571 [2,]??1.2436662?-0.05886708??1.7870905 [3,]?-0.5240347?-0.03676600??1.8098647 $weights[[1]][[2]] ???????????[,1] [1,]???4.084756 [2,]??-3.807969 [3,]?-11.531322 [4,]???3.691784 $generalized.weights $generalized.weights[[1]] ????????????[,1]???????[,2] [1,]??0.15159066?0.09467744 [2,]??0.01719274?0.04320642 [3,]??0.15657354?0.09778953 [4,]?-0.46017408?0.34621212 [5,]??0.03868753?0.02416267 [6,]?-0.54248384?0.37453006 $startweights $startweights[[1]] $startweights[[1]][[1]] ???????????[,1]????????[,2]???????[,3] [1,]??0.1013318?-1.11757311?-0.9962571 [2,]??0.8583704?-0.15529112??1.7870905 [3,]?-0.8789741??0.05536849??1.8098647 $startweights[[1]][[2]] ???????????[,1] [1,]?-0.1283200 [2,]?-1.0932526 [3,]?-1.0077311 [4,]?-0.5212917 $result.matrix ??????????????????????????????????[,1] error??????????????????????0.002168460 reached.threshold??????????0.007872764 steps????????????????????145.000000000 Intercept.to.1layhid1??????3.058334288 專業(yè)知識(shí).to.1layhid1???????1.243666180 溝通技能得分.to.1layhid1??-0.524034687 Intercept.to.1layhid2??????3.808019964 專業(yè)知識(shí).to.1layhid2??????-0.058867076 溝通技能得分.to.1layhid2??-0.036766001 Intercept.to.1layhid3?????-0.996257068 專業(yè)知識(shí).to.1layhid3???????1.787090472 溝通技能得分.to.1layhid3???1.809864672 Intercept.to.成績??????????4.084755522 1layhid1.to.成績??????????-3.807969087 1layhid2.to.成績?????????-11.531321534 1layhid3.to.成績???????????3.691783805 復(fù)制代碼
繪制神經(jīng)網(wǎng)絡(luò)
讓我們繪制您的神經(jīng)網(wǎng)絡(luò)模型。
#?繪圖神經(jīng)網(wǎng)絡(luò) plot(nn) 復(fù)制代碼
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
左右滑動(dòng)查看更多
01
02
03
04
創(chuàng)建測試數(shù)據(jù)集
創(chuàng)建測試數(shù)據(jù)集:專業(yè)知識(shí)得分和溝通技能得分
#?創(chuàng)建測試集 test=data.frame(專業(yè)知識(shí),溝通技能得分) 復(fù)制代碼
預(yù)測測試集的結(jié)果
使用計(jì)算函數(shù)預(yù)測測試數(shù)據(jù)的概率得分。
##?使用神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測 Pred$result 復(fù)制代碼
0.9928202080 0.3335543925 0.9775153014 復(fù)制代碼
現(xiàn)在,將概率轉(zhuǎn)換為二進(jìn)制類。
#?將概率轉(zhuǎn)換為設(shè)置閾值0.5的二進(jìn)制類別 pred?<-?ifelse(prob>0.5,?1,?0) pred 復(fù)制代碼
1 0 1 復(fù)制代碼
預(yù)測結(jié)果為1,0和1。
利弊
神經(jīng)網(wǎng)絡(luò)更靈活,可以用于回歸和分類問題。神經(jīng)網(wǎng)絡(luò)非常適合具有大量輸入(例如圖像)的非線性數(shù)據(jù)集,可以使用任意數(shù)量的輸入和層,可以并行執(zhí)行工作。
還有更多可供選擇的算法,例如SVM,決策樹和回歸算法,這些算法簡單,快速,易于訓(xùn)練并提供更好的性能。神經(jīng)網(wǎng)絡(luò)更多的是黑盒子,需要更多的開發(fā)時(shí)間和更多的計(jì)算能力。與其他機(jī)器學(xué)習(xí)算法相比,神經(jīng)網(wǎng)絡(luò)需要更多的數(shù)據(jù)。NN僅可用于數(shù)字輸入和非缺失值數(shù)據(jù)集。一位著名的神經(jīng)網(wǎng)絡(luò)研究人員說:??“神經(jīng)網(wǎng)絡(luò)是解決任何問題的第二好的方法。最好的方法是真正理解問題?!?/p>
神經(jīng)網(wǎng)絡(luò)的用途
神經(jīng)網(wǎng)絡(luò)的特性提供了許多應(yīng)用方面,例如:
模式識(shí)別:?神經(jīng)網(wǎng)絡(luò)非常適合模式識(shí)別問題,例如面部識(shí)別,物體檢測,指紋識(shí)別等。
異常檢測:?神經(jīng)網(wǎng)絡(luò)擅長異常檢測,它們可以輕松檢測出不適合常規(guī)模式的異常模式。
時(shí)間序列預(yù)測:?神經(jīng)網(wǎng)絡(luò)可用于預(yù)測時(shí)間序列問題,例如股票價(jià)格,天氣預(yù)報(bào)。
自然語言處理:?神經(jīng)網(wǎng)絡(luò)在自然語言處理任務(wù)中提供了廣泛的應(yīng)用,例如文本分類,命名實(shí)體識(shí)別(NER),詞性標(biāo)記,語音識(shí)別和拼寫檢查。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
Python用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)對(duì)不穩(wěn)定降雨量時(shí)間序列進(jìn)行預(yù)測分析
R語言中的神經(jīng)網(wǎng)絡(luò)預(yù)測時(shí)間序列:多層感知器(MLP)和極限學(xué)習(xí)機(jī)(ELM)數(shù)據(jù)分析報(bào)告
R語言深度學(xué)習(xí):用keras神經(jīng)網(wǎng)絡(luò)回歸模型預(yù)測時(shí)間序列數(shù)據(jù)
Matlab用深度學(xué)習(xí)長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對(duì)文本數(shù)據(jù)進(jìn)行分類
R語言KERAS深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)分類識(shí)別手寫數(shù)字圖像數(shù)據(jù)(MNIST)
MATLAB中用BP神經(jīng)網(wǎng)絡(luò)預(yù)測人體脂肪百分比數(shù)據(jù)
Python中用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測銀行客戶流失模型
R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
SAS使用鳶尾花(iris)數(shù)據(jù)集訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)(ANN)模型
【視頻】R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類
R語言用神經(jīng)網(wǎng)絡(luò)改進(jìn)Nelson-Siegel模型擬合收益率曲線分析
R語言基于遞歸神經(jīng)網(wǎng)絡(luò)RNN的溫度時(shí)間序列預(yù)測
R語言神經(jīng)網(wǎng)絡(luò)模型預(yù)測車輛數(shù)量時(shí)間序列
R語言中的BP神經(jīng)網(wǎng)絡(luò)模型分析學(xué)生成績
matlab使用長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對(duì)序列數(shù)據(jù)進(jìn)行分類
R語言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測和結(jié)果可視化
用R語言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實(shí)例
使用PYTHON中KERAS的LSTM遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行時(shí)間序列預(yù)測
python用于NLP的seq2seq模型實(shí)例:用Keras實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯
用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類