Learn R | 機器學習中的人工神經網路(六)
一、B-P反向傳播網路演算法的R實現(上)
在R中,B-P反向傳播網路演算法的實現主要集中在neuralnet和nnet這兩個包中,首先我們先來學習使用neuralnet包。
> install.packages(neuralnet)n> library(neuralnet)n
該包中的neuralnet()函數可實現傳統B-P反向傳播網路彈性B-P網路的二分類建模與回歸建模。函數調用公式如下:
> neuralnet(formula, data, hidden = 1, threshold = 0.01,stepmax = 1e+05, n+ rep = 1, startweights = NULL, err.fct = "sse",linear.output = TRUE,n+ learningrate=NULL,algorithm = "rprop+")n# hidden:用於指定隱層數和隱節點個數,默認值為1(即為1個隱層和1個隱節點),若hidden=c(3,2,1),則表示第1至第3個隱層分別包含3,2,1個隱節點n# threshold:用於指定迭代停止條件,當權重的最大調整量小於指定值(默認0.01)時迭代終止n# stepmax:同樣用於指定迭代停止條件,當迭代次數達到指定次數(默認100000次)時迭代終止n# err.fct:用於指定損失函數L的形式,"sse"表示損失函數為誤差平方,"ce"表示為交互熵n# linear.output:取值為TRUE或FALSE,分別表示輸出節點的激活函數為線性函數(用於線性回歸預測)還是非線性函數(默認sigmoid函數),在B-P中為FALSEn# learningrate:學習率,當參數algorithm取值為backpop時需制定該參數為一個常數,否則學習率就是一個動態變化的量n# algorithm:用於指定演算法,"backpop"為傳統B-P演算法,"rprop+"或"rprop-"為彈性B-P演算法,分別表示採用權重回溯或不回溯,不回溯將加速收斂(默認為"rprop+")n
除此之外,neuralnet()函數還有其他參數可供使用,具體內容可查看相關文檔。
neuralnet()函數在實際應用後會返回一個包含眾多計算結果的列表,主要內容包括:
- response:各觀測輸出變數的實際值
- net.result:各觀測輸出變數的預測值(回歸預測值或預測類別的概率)
- weights:各個節點的權重值列表
- result.matrix:終止迭代時各個節點的權重,迭代次數,損失函數值和權重的最大調整量
- startweights:各個節點的初始權重(初始權值為在的正態分布隨機數)
在明確了函數的基本用法後,接下來我們進行實際應用的學習,首先導入數據
> library(readxl)n> consumer_data <- read_excel(consumer_data.xlsx)n> dim(data)n[1] 431 4n> head(consumer_data)n# A tibble: 6 × 4n Purchase Age Gender Incomen <dbl> <dbl> <dbl> <dbl>n1 0 41 2 1n2 0 47 2 1n3 1 41 2 1n4 1 39 2 1n5 0 32 2 1n6 0 32 2 1n
這個consumer_data是一個包含4個特徵的431條顧客消費行為數據集。其中Purchase表示是否購買(1為是0為否)、Gender為顧客性別(1男2女)、Age為年齡、Income為收入水平(1為高收入,2為中等收入,3為低收入)。除年齡外,其餘變數均為分類型變數。
# BP模型構建n> BP_model <- neuralnet(Purchase~Age+Gender+Income,data=consumer_data,n+ hidden=2,err.fct = ce,linear.output = FALSE)n
# 查看模型的連接權重與其他信息n> BP_model$result.matrixn 1nerror 265.770451270940nreached.threshold 0.008190299996nsteps 22475.000000000000nIntercept.to.1layhid1 66.423747676280nAge.to.1layhid1 2.121098930412nGender.to.1layhid1 -53.149459002337nIncome.to.1layhid1 -42.453209738011nIntercept.to.1layhid2 70.281098736244nAge.to.1layhid2 -1.703855910015nGender.to.1layhid2 -13.875131222934nIncome.to.1layhid2 -4.032171405084nIntercept.to.Purchase -0.084813443819n1layhid.1.to.Purchase -1.162189644977n1layhid.2.to.Purchase -1417.670163195389n# 上述信息表明:模型共迭代了22475次,損失函數值為265.77,權重的最大調整量為0.0082n# result.matrix還給出了網路節點的所有權重,例如第一個隱節點的偏差權重為66.42,年齡對該節點的權重為2.12等等n
# 查看連接權重列表n> BP_model$weightsn[[1]]n[[1]][[1]]n [,1] [,2]n[1,] 66.42374768 70.281098736n[2,] 2.12109893 -1.703855910n[3,] -53.14945900 -13.875131223n[4,] -42.45320974 -4.032171405nn[[1]][[2]]n [,1]n[1,] -0.08481344382n[2,] -1.16218964498n[3,] -1417.67016319539n
# 可視化神經網路n> plot(BP_model)n
二、B-P模型的深入解讀
1. 評價輸入變數的重要性
在演算法的實際應用中,很多時候我們都需要明確哪些輸入變數對輸出變數的預測更為重要,而神經網路中的權重僅作為節點的連接強度測度,它是無法直觀揭示輸出變數的重要性的。為此,Neuralnet函數中提供了廣義權重(Generalize Weight)用於測度解釋變數的重要性。第個輸入變數的廣義權重則定義為:
這是對數優勢函數的偏導數,將觀測值帶入,計算第個輸入變數在第個輸出變數處的廣義權重取值。從該式中可見,若第第個輸入變數在所有觀測值處的偏導數幾乎為0,則表明該變數取值的變化不對對數優勢產生影響,這也就意味著對輸出變數影響是很小的。
# 查看模型中的廣義權重值n> head(BP_model$generalized.weights[[1]])n [,1] [,2] [,3]n1 -0.023430368 0.5871067 0.4689523n2 -0.000000071 0.0000018 0.0000014n3 -0.023430368 0.5871067 0.4689523n4 -0.592912880 14.8569209 11.8669877n5 0.000263888 0.0021922 0.0006536n6 0.000263888 0.0021922 0.0006536n# 上述3列數據分別代表Age,Gender和Income在前六個觀測值上的廣義權重n
# 使用gwplot函數繪製廣義權重的散點圖n> par(mfrow=c(1,3))n> gwplot(BP_model,selected.covariate = Age,max=15,min=-15)n> gwplot(BP_model,selected.covariate = Gender,max=100,min=0)n> gwplot(BP_model,selected.covariate = Income,max=100,min=0)n
2. 比較輸入變數不同水平組合對輸出變數的影響
通過前面的分析我們已經知道,變數「Age」對消費決策是沒有什麼重要影響的,那麼在排除年齡影響的條件下,不同性別和收入水平的人群的購買概率是否有著明顯的不同呢?針對這個問題,包中的compute函數可計算輸入變數任意取值組合下的輸出節點概率值,調用公式如下:
> compute(x, covariate, rep = 1)n# x為神經網路模型,covariate為輸入變數任意取值組合的矩陣n
# 由於年齡對最終決策基本沒有影響,所以這裡選取年齡的均值39,對其餘兩個變數的不同取值水平進行組合,用於研究其對消費決策的影響n> newdata <- matrix(c(39,1,1,39,1,2,39,1,3,39,2,1,39,2,2,39,2,3),n+ nrow=6,ncol=3,byrow=TRUE)n> newdatan [,1] [,2] [,3]n[1,] 39 1 1n[2,] 39 1 2n[3,] 39 1 3n[4,] 39 2 1n[5,] 39 2 2n[6,] 39 2 3n
> BP_Model_output <- compute(BP_model,covariate = newdata)n> BP_Model_output$net.resultn [,1]n[1,] 0.2230300756n[2,] 0.2232190653n[3,] 0.4788092544n[4,] 0.3145226491n[5,] 0.4788093401n[6,] 0.4788093401n
上述計算結果表明,女性的購買概率要普遍高於男性;高收入人群的購買概率要低於低收入人群;男性中高、中收入人群購買概率接近,女性中中、低收入人群購買概率接近。
未完待續
推薦閱讀:
※李飛飛:我的2017
※「哈佛商業評論」所有AI公司都面臨的兩難:性能優先還是應用優先?
※分類演算法之支持向量機:SVM(理論篇)
※CS 294: Deep Reinforcement Learning(10)