人工神經網絡(Artificial Neural Network,ANN)簡稱神經網絡,是機器學習和認知科學領域中一種模仿生物神經網絡(動物的中樞神經系統,特別是大腦)的結構和功能的數學模型或計算模型,用於對函數進行估計或近似。神經網絡由大量的人工神經元聯結進行計算,大多數情況下人工神經網絡能在外界信息的基礎上改變內部結構,是一種自適應系統。
全連接神經網絡(Multi-Layer Perception,MLP,或者叫多層感知機)是一種連接方式較為簡單的人工神經網絡結構,屬於前饋神經網絡的一種,主要有輸入層、隱藏層和輸出層構成。在機器學習中MLP較為常用,可用於分類和回歸。下面主要會介紹MLP網絡在應用時的相關可視化分析過程。
1 全連接神經網絡分類的相關可視化
針對MLP分類模型,繼續使用種子數據集,建立一個分類器,然後對模型進行相關的可視化分析,程序如下所示:
library(neuralnet);library(NeuralNetTools);library(ggplot2);library(ggpol)myseeddf <- read.csv("data/chap11/myseeddata.csv")myseeddf$label <- as.factor(myseeddf$label)mlpcla <- neuralnet(label~., data = myseeddf, hidden = c(5,5), act.fct = "logistic", linear.output = FALSE, algorithm = "rprop+")par(cex = 0.6)plotnet(mlpcla,pos_col = "red", neg_col = "grey")在上面的程序中,建立MLP分類器時,共有2個隱藏層,並且每個隱藏層有5個神經元,針對獲得的mlpcla模型,可以使用plotnet() 函數可視化出模型的網絡結構,運行程序後,可獲得如圖1所示的圖像。在網絡的神經元之間的連接權重中,正數權重使用紅色的線連接、負的權重使用灰色的線連接,線的粗細則反映權重的取值大小。
圖1 MLP網絡結構可視化
針對MLP網絡,可以計算並可視化出每個自變量對模型預測結果的重要性,運行下面的程序可獲得如圖圖2所示的圖像。從結果中可發現,對分類最重要的變量是x5。
olden(mlpcla)+ggtitle("Variable importance using connection weights")
圖2 MLP變量重要性可視化
針對MLP分類器對數據集的預測效果,同樣可以使用混淆矩陣進行可視化,程序如下所示。可獲得如圖3所示的圖像。
mlppre <- predict(mlpcla,myseeddf)mlpprelab <- apply(mlppre , 1, which.max)ggplot() + geom_confmat(aes(x = myseeddf$label, y = mlpprelab), normalize = TRUE, text.perc = TRUE)+ labs(x = "Reference",y = "Prediction")+ scale_fill_gradient2(low="darkblue", high="lightgreen")
圖11-25 MLP混淆矩陣可視化
從圖3所示的混淆矩陣中,可發現第二類和第三類的種子,可以100%預測正確,只有1.429%的第一類種子會被預測為第二類。
2 全連接神經網絡回歸的相關可視化
針對使用MLP建立回歸模型,並可視化的示例,下面將會使用RSNNS包進行相關分析。針對該包的在建立回歸模型時,需要將數據歸一化到0~1之間。數據準備和建立MLP回歸模型的程序如下所示:
library(RSNNS);library(caret);library(neuralnet);library(NeuralNetTools)diadf <- read.csv("data/chap11/diabetes.csv",sep = "\t")diadf_s <- normalizeData(diadf,type = "0_1")set.seed(123)datasplist <- splitForTrainingAndTest(diadf_s[,1:10],diadf_s[,11], ratio = 0.3)mlpreg <- mlp(datasplist$inputsTrain, datasplist$targetsTrain, size = c(10,10,10), maxit = 200, learnFunc = "Rprop", hiddenActFunc = "Act_TanH", inputsTest=datasplist$inputsTest, targetsTest = datasplist$targetsTest, metric = "RSME") plotIterativeError(mlpreg,main = "MLP Iterative Error")在上面的程序中,針對建立的mlpreg回歸模型,可以使用plotIterativeError()函數可視化模型訓練過程中誤差的變化情況,運行程序後可獲得如圖4所示的圖像。可以faxing誤差在訓練數據(黑色線)和測試數據(紅色線)上均會快速收斂到很小的取值。
圖4 MLP回歸權重誤差收斂情況可視化
針對回歸結果還可以利用plotRegressionError()函數可視化出,模型在訓練數據和測試數據上的擬合結果,運行下面的程序後可獲得如圖5所示的圖像。
par(mfrow = c(1,2))plotRegressionError(datasplist$targetsTrain,mlpreg$fitted.values, main="MLP train fit")plotRegressionError(datasplist$targetsTest,mlpreg$fittedTestValues, main="MLP test fit")
圖5 MLP回歸在訓練集和測試集上的擬合情況可視化
在圖像5中,左圖為在訓練數據集上的擬合誤差,右圖為在測試數據集上的擬合誤差,紅色直線越接近於對角線(黑色線),說明模型的預測效果越好。
3 全連接神經網絡時間序列預測的相關可視化
針對MLP算法,還可以對時間序列進行相關的預測和可視化分析。下面使用mmfor包中的mlp()函數,對時間序列數據AirPassengers,建立預測模型,並對分析結果進行可視化。使用數據進行擬合訓練的程序如下所示:
library(nnfor)data("AirPassengers")tsmlp <- nnfor::mlp(AirPassengers,hd = c(6,6), reps = 5, comb = "mean", outplot = TRUE)運行上面的程序後,可獲得如圖6所的圖像,該圖像是模型在擬合過程中,對數據集的擬合情況,可以發現藍色的線很好的對使用的時間序列數據進行了擬合。
圖6 MLP時間序列模型訓練擬合圖
針對建立好的模型tsmlp,可以通過plot()函數,可視化出網絡結構,運行下面的程序可獲得如圖7所示的圖像。可以發現模型的輸入層有21個神經元。
圖7 MLP時間序列預測模型結構
MLP時間序列預測模型建立好後,可以通過forecast()函數對未來的數據進行預測,使用下面的程序同時還可以獲得預測結果的可視化圖像8。
#tsmlp_pre <- forecast(tsmlp, h = 36)plot(tsmlp_pre )圖8 MLP時間序列模型預測結果可視化
在圖像8中,預測結果為藍色粗線,其是針對為5個子模型的預測結果平均值,灰色細線為對應與5個子模型的預測結果。
關注我們: