拓端tecdat|R語(yǔ)言中的BP神經(jīng)網(wǎng)絡(luò)模型分析學(xué)生成績(jī)
原文鏈接:http://tecdat.cn/?p=19936?
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
在本教程中,您將學(xué)習(xí)如何在R中創(chuàng)建神經(jīng)網(wǎng)絡(luò)模型。
神經(jīng)網(wǎng)絡(luò)(或人工神經(jīng)網(wǎng)絡(luò))具有通過(guò)樣本進(jìn)行學(xué)習(xí)的能力。人工神經(jīng)網(wǎng)絡(luò)是一種受生物神經(jīng)元系統(tǒng)啟發(fā)的信息處理模型。它由大量高度互連的處理元件(稱(chēng)為神經(jīng)元)組成,以解決問(wèn)題。它遵循非線(xiàn)性路徑,并在整個(gè)節(jié)點(diǎn)中并行處理信息。神經(jīng)網(wǎng)絡(luò)是一個(gè)復(fù)雜的自適應(yīng)系統(tǒng)。自適應(yīng)意味著它可以通過(guò)調(diào)整輸入權(quán)重來(lái)更改其內(nèi)部結(jié)構(gòu)。
該神經(jīng)網(wǎng)絡(luò)旨在解決人類(lèi)容易遇到的問(wèn)題和機(jī)器難以解決的問(wèn)題,例如識(shí)別貓和狗的圖片,識(shí)別編號(hào)的圖片。這些問(wèn)題通常稱(chēng)為模式識(shí)別。它的應(yīng)用范圍從光學(xué)字符識(shí)別到目標(biāo)檢測(cè)。
本教程將涵蓋以下主題:
神經(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ò)通過(guò)調(diào)整權(quán)重進(jìn)行學(xué)習(xí),來(lái)預(yù)測(cè)給定輸入的正確類(lèi)別標(biāo)簽。
人腦由數(shù)十億個(gè)處理信息的神經(jīng)細(xì)胞組成。每個(gè)神經(jīng)細(xì)胞都認(rèn)為是一個(gè)簡(jiǎn)單的處理系統(tǒng)。被稱(chēng)為生物神經(jīng)網(wǎng)絡(luò)的神經(jīng)元通過(guò)電信號(hào)傳輸信息。這種并行的交互系統(tǒng)使大腦能夠思考和處理信息。一個(gè)神經(jīng)元的樹(shù)突接收來(lái)自另一個(gè)神經(jīng)元的輸入信號(hào),并根據(jù)這些輸入將輸出響應(yīng)到某個(gè)其他神經(jīng)元的軸突。

樹(shù)突接收來(lái)自其他神經(jīng)元的信號(hào)。單元體將所有輸入信號(hào)求和以生成輸出。當(dāng)總和達(dá)到閾值時(shí)通過(guò)軸突輸出。突觸是神經(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ī)則來(lái)調(diào)整參數(shù)。神經(jīng)元的輸出范圍可以從-inf到+ inf。神經(jīng)元不知道邊界。因此,我們需要神經(jīng)元的輸入和輸出之間的映射機(jī)制。將輸入映射到輸出的這種機(jī)制稱(chēng)為激活函數(shù)。
前饋和反饋人工神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)主要有兩種類(lèi)型:前饋和反饋人工神經(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)。通過(guò)在網(wǎng)絡(luò)中引入環(huán)路,信號(hào)可以雙向傳播。反饋周期會(huì)導(dǎo)致網(wǎng)絡(luò)行為根據(jù)其輸入隨時(shí)間變化。反饋神經(jīng)網(wǎng)絡(luò)也稱(chēng)為遞歸神經(jīng)網(wǎng)絡(luò)。

激活函數(shù)
激活函數(shù)定義神經(jīng)元的輸出。激活函數(shù)使神經(jīng)網(wǎng)絡(luò)具有非線(xiàn)性和可表達(dá)性。有許多激活函數(shù):
識(shí)別函數(shù)?通過(guò)激活函數(shù) Identity,節(jié)點(diǎn)的輸入等于輸出。它完美擬合于潛在行為是線(xiàn)性(與線(xiàn)性回歸相似)的任務(wù)。當(dāng)存在非線(xiàn)性,單獨(dú)使用該激活函數(shù)是不夠的,但它依然可以在最終輸出節(jié)點(diǎn)上作為激活函數(shù)用于回歸任務(wù)。。
在?二元階梯函數(shù)(Binary Step Function)中,如果Y的值高于某個(gè)特定值(稱(chēng)為閾值),則輸出為T(mén)rue(或已激活),如果小于閾值,則輸出為false(或未激活)。這在分類(lèi)器中非常有用。
S形函數(shù)?稱(chēng)為S形函數(shù)。邏輯和雙曲正切函數(shù)是常用的S型函數(shù)。有兩種:
Sigmoid函數(shù)?是一種邏輯函數(shù),其中輸出值為二進(jìn)制或從0到1變化。
tanh函數(shù)?是一種邏輯函數(shù),其輸出值在-1到1之間變化。也稱(chēng)為雙曲正切函數(shù)或tanh。
ReLU函數(shù)又稱(chēng)為修正線(xiàn)性單元(Rectified Linear Unit),是一種分段線(xiàn)性函數(shù),其彌補(bǔ)了sigmoid函數(shù)以及tanh函數(shù)的梯度消失問(wèn)題。它是最常用的激活函數(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é)生的專(zhuān)業(yè)知識(shí),溝通技能得分和學(xué)生成績(jī)。因此,前兩列(專(zhuān)業(yè)知識(shí)得分和溝通技能得分)是特征,第三列(學(xué)生成績(jī))是二進(jìn)制標(biāo)簽。
#創(chuàng)建訓(xùn)練數(shù)據(jù)集
# 在這里,把多個(gè)列或特征組合成一組數(shù)據(jù)
test=data.frame(專(zhuān)業(yè)知識(shí),溝通技能得分)
# 擬合神經(jīng)網(wǎng)絡(luò)
nn(成績(jī)~專(zhuān)業(yè)知識(shí)+溝通技能得分, hidden=3,act.fct = "logistic",
linear.output = FALSE)
這里得到模型的因變量、自變量、損失函數(shù)、激活函數(shù)、權(quán)重、結(jié)果矩陣(包含達(dá)到的閾值,誤差,AIC和BIC以及每次重復(fù)的權(quán)重的矩陣)等信息:
$model.list
$model.list$response
[1] "成績(jī)"
$model.list$variables
[1] "專(zhuān)業(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
專(zhuān)業(yè)知識(shí).to.1layhid1 ? ? ? 1.243666180
溝通技能得分.to.1layhid1 ?-0.524034687
Intercept.to.1layhid2 ? ? ?3.808019964
專(zhuān)業(yè)知識(shí).to.1layhid2 ? ? ?-0.058867076
溝通技能得分.to.1layhid2 ?-0.036766001
Intercept.to.1layhid3 ? ? -0.996257068
專(zhuān)業(yè)知識(shí).to.1layhid3 ? ? ? 1.787090472
溝通技能得分.to.1layhid3 ? 1.809864672
Intercept.to.成績(jī) ? ? ? ? ?4.084755522
1layhid1.to.成績(jī) ? ? ? ? ?-3.807969087
1layhid2.to.成績(jī) ? ? ? ? -11.531321534
1layhid3.to.成績(jī) ? ? ? ? ? 3.691783805
繪制神經(jīng)網(wǎng)絡(luò)
讓我們繪制您的神經(jīng)網(wǎng)絡(luò)模型。
# 繪圖神經(jīng)網(wǎng)絡(luò)
plot(nn)

創(chuàng)建測(cè)試數(shù)據(jù)集
創(chuàng)建測(cè)試數(shù)據(jù)集:專(zhuān)業(yè)知識(shí)得分和溝通技能得分
# 創(chuàng)建測(cè)試集
test=data.frame(專(zhuān)業(yè)知識(shí),溝通技能得分)
預(yù)測(cè)測(cè)試集的結(jié)果
使用計(jì)算函數(shù)預(yù)測(cè)測(cè)試數(shù)據(jù)的概率得分。
## 使用神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測(cè)
Pred$result
0.9928202080
0.3335543925
0.9775153014
現(xiàn)在,將概率轉(zhuǎn)換為二進(jìn)制類(lèi)。
# 將概率轉(zhuǎn)換為設(shè)置閾值0.5的二進(jìn)制類(lèi)別
pred <- ifelse(prob>0.5, 1, 0)
pred
1
0
1
預(yù)測(cè)結(jié)果為1,0和1。
利弊
神經(jīng)網(wǎng)絡(luò)更靈活,可以用于回歸和分類(lèi)問(wèn)題。神經(jīng)網(wǎng)絡(luò)非常適合具有大量輸入(例如圖像)的非線(xiàn)性數(shù)據(jù)集,可以使用任意數(shù)量的輸入和層,可以并行執(zhí)行工作。
還有更多可供選擇的算法,例如SVM,決策樹(shù)和回歸算法,這些算法簡(jiǎn)單,快速,易于訓(xùn)練并提供更好的性能。神經(jīng)網(wǎng)絡(luò)更多的是黑盒子,需要更多的開(kāi)發(fā)時(shí)間和更多的計(jì)算能力。與其他機(jī)器學(xué)習(xí)算法相比,神經(jīng)網(wǎng)絡(luò)需要更多的數(shù)據(jù)。NN僅可用于數(shù)字輸入和非缺失值數(shù)據(jù)集。一位著名的神經(jīng)網(wǎng)絡(luò)研究人員說(shuō):??“神經(jīng)網(wǎng)絡(luò)是解決任何問(wèn)題的第二好的方法。最好的方法是真正理解問(wèn)題?!?/p>
神經(jīng)網(wǎng)絡(luò)的用途
神經(jīng)網(wǎng)絡(luò)的特性提供了許多應(yīng)用方面,例如:
模式識(shí)別:?神經(jīng)網(wǎng)絡(luò)非常適合模式識(shí)別問(wèn)題,例如面部識(shí)別,物體檢測(cè),指紋識(shí)別等。
異常檢測(cè):?神經(jīng)網(wǎng)絡(luò)擅長(zhǎng)異常檢測(cè),它們可以輕松檢測(cè)出不適合常規(guī)模式的異常模式。
時(shí)間序列預(yù)測(cè):?神經(jīng)網(wǎng)絡(luò)可用于預(yù)測(cè)時(shí)間序列問(wèn)題,例如股票價(jià)格,天氣預(yù)報(bào)。
自然語(yǔ)言處理:?神經(jīng)網(wǎng)絡(luò)在自然語(yǔ)言處理任務(wù)中提供了廣泛的應(yīng)用,例如文本分類(lèi),命名實(shí)體識(shí)別(NER),詞性標(biāo)記,語(yǔ)音識(shí)別和拼寫(xiě)檢查。

最受歡迎的見(jiàn)解
1.r語(yǔ)言用神經(jīng)網(wǎng)絡(luò)改進(jìn)nelson-siegel模型擬合收益率曲線(xiàn)分析
2.r語(yǔ)言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)和結(jié)果可視化
3.python用遺傳算法-神經(jīng)網(wǎng)絡(luò)-模糊邏輯控制算法對(duì)樂(lè)透分析
4.用于nlp的python:使用keras的多標(biāo)簽文本lstm神經(jīng)網(wǎng)絡(luò)分類(lèi)
5.用r語(yǔ)言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票實(shí)例
6.R語(yǔ)言基于Keras的小數(shù)據(jù)集深度學(xué)習(xí)圖像分類(lèi)
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í)