B-P反向傳播網絡算法的R實現(2)

一、概率分割值與模型應用

在二分類的問題中,B-P算法給出的是預測不同類別的概率,一般情況下,我們默認大於0.5爲一類,小於0.5爲另一類,但這並非適用於所有的情況(在上面的例子中就幾乎沒有大於0.5的觀測),所以,我們需要在確認預測模型合理的基礎上根據概率值和實際類別找到一個恰當的概率分割值,併爲後續的類別預測提供概率依據。尋找合適的概率分割值最簡便的方法就是繪製ROC曲線。
library(ROCR)
查看預測概率值得分佈情況
summary(BP_model$net.result[[1]])
計算標準ROC曲線
perf_1 <- performance(BP_model_pred,measure = “tpr”,x.measure = “fpr”)
計算在不同的概率分割值下的精度值
perf_2 <- performance(BP_model_pred,measure = ‘acc’)
par(mfrow=c(1,2))
plot(perf_1,colorize=TRUE,print.cutoffs.at=c(0.2,0.3,0.46))
plot(perf_2)
在這裏插入圖片描述
從圖中可以看到,分割值在0.3附近時的總體預測精度較高(相對於其他預測值而言),因此選用0.3來查看模型的預測效果。
最終的預測精度爲0.57,從實際應用的角度來看這並不是一個很理想的結果,並且造成這個問題的原因有很多種:有可能是輸入變量較少,且年齡變量並不是很重要;也有可能是樣本量存在較大的不平衡性等等。
下圖是BP神經網絡的正向傳播與反向傳播:
在這裏插入圖片描述

二、B-P反向傳播網絡算法的R實現

除了nerualnet包外,nnet包也可實現傳統B-P反向傳播網絡的分類與迴歸預測,nnet函數所對應的是三層網絡結構,其中輸入節點個數等於輸入變量個數,網絡結構中只包含一個隱層,隱節點個數需要自行制定。在輸出節點上,二分類與迴歸問題的輸出節點個性爲1,多分類問題的輸出節點個數等於輸出變量的類別數,函數調用公式如下:
library(nnet)
nnet(formula, data, size, linout = FALSE, entropy = FALSE, softmax = FALSE,
maxit = 100, abstol = 1.0e-4,rang=, …)
size:指定隱節點的個數,若爲0,則表示沒有隱層
linout:指定輸出節點的激活函數是否爲非線性函數(FALSE),等同於neuralnet函數中的linear.output參數
entropy:用於指定損失函數是否採用交互熵,默認值FALSE表示損失函數採用誤差平方和的形式
maxit:用於指定迭代停止條件(默認值爲100)
asstol:用於指定迭代終止條件(默認權重的最大調整量小於0.0001時終止)
rang:初始權值設置
nnet函數同樣是返回一個包含衆多計算結果的列表,主要包括:
• wts:各個節點的連接權重
• value:迭代結束時的損失函數值
• fitted.values:各觀測值的預測值

nerualnet函數相比,nnet有着兩個主要優勢:
• predict函數可直接對nnet對象進行預測
• 當輸出變量爲多分類值時,只需定義爲因子,nnet函數就可進行多分類的預測(輸出概率值);若不定義爲因子,nnet將按回歸預測處理。

三、總結

本期我們給大家介紹了神經網絡中的B-P反向傳播網絡模型,同時也着重的介紹了其算法的實現過程,希望大家能夠有所收穫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章