代碼詳解:用R語言構建ANN並將其可視化


代碼詳解:用R語言構建ANN並將其可視化



神經網絡是一種模擬原始人類思維的計算設計。與人工神經網絡(ANN)相比,支持向量機首先將輸入數據概括為由核函數定義的高維特徵空間,並找到以最大餘量分配訓練數據的優秀超平面。該過程通過使用ANN進行。

人工神經網絡被認為是計算領域最有用的技術之一。即使它被歸為黑匣子,許多研究已經進入到運用R語言來實現人工神經網絡的發展。

代碼詳解:用R語言構建ANN並將其可視化


感知器


ANN是由激活函數定義的設計,其由互連的信息處理組件實現以將輸入重建為輸出。人工神經網絡一直與人類大腦進行比較。神經網絡的第一層需要原始輸入,處理它並將準備好的信息傳送到隱藏層。隱藏層將信息傳輸到最後一層,生成輸出。ANN的選擇是它本質上是自適應的。它從所提供的信息中讀取,這意味著它從數據中訓練自己,數據能夠感知結果並優化其權重,以便在結果未知的情況下獲得更好的預測。

感知器是一種單層神經網絡,這是神經網絡中最基本的形式。感知器支持多維輸入,並使用加權求和和激活目的來進行準備。它使用標記數據和學習算法進行訓練,該算法優化求和處理器中的權重。感知器模型的一個重要限制是它無法處理非線性問題。多層神經網絡成功實現了這一限制,有助於解決非線性問題。輸入層與隱藏層連接,隱藏層又連接到輸出層。連接被加權並且權重被優化以應用學習規則。


代碼詳解:用R語言構建ANN並將其可視化


在R中擬合神經網絡


R中的神經網絡擬合開始於將數據擬合到ANN中。

代碼詳解:用R語言構建ANN並將其可視化


數據擬合


數據擬合是建立電路或數學函數的方法,其具有與一組先前收集點的最佳近似。電路擬合可以與需要精確數據點的插值和平滑進行比較,其中建立了近似數據的平坦函數。從數據擬閤中收集的估計曲線可用於幫助顯示數據,預測沒有數據可用的函數的值,以及總結兩個或更多個變量之間的關係。


代碼詳解:用R語言構建ANN並將其可視化



代碼詳解:用R語言構建ANN並將其可視化


輸入-輸出關係


一旦神經網絡擁有了數據,它就形成了輸入-輸出關係的概括,並且可以應用於產生未被建模的輸入的輸出。

在這個例子中,我們將考慮汽車工業的主要製造商一直在研究的車輛燃料的消耗。

在石油出現困境,甚至發生空氣汙染問題的時候,車輛燃料消耗已成為一個關鍵因素。在這個例子中,我們將建立一個神經網絡,目的是根據某些特徵預測車輛的燃料消耗。

該數據集包含汽油里程、馬力和某些車輛的其他信息。這個數據框裡有以下九個變量:

1. mp_g: Miles per gallon.

2. cylinders_48: Number of cylinders between 4 and 8.

3. dis_placement: Engine displacement (cubic inches).

4. horse_power: Engine horsepower.

5. weight_lbs: Vehicle weight (lbs).

6. acceleration_mph: Time to accelerate from 0 to 60 mph (sec).

7. year_r: Model year (modulo 100).

8. origin_c: Origin of the car (American, European, Japanese).

9. name_v: Vehicle name.

R代碼

library("neuralnet")

library("ISLR") // for obtaining auto dataset//

data = Auto

View(data)

plot(data$weight_lbs, data$mp_g, pch=data$origin_c,cex=2)

par(mfrow=c(2,2))

plot(data$cylinders_48, data$mp_g, pch=data$origin_c,cex=1)

plot(data$dis_placement, data$mp_g, pch=data$origin_c,cex=1)

plot(data$horse_power, data$mp_g, pch=data$origin_c,cex=1)

plot(data$acceleration_mph, data$mp_g, pch=data$origin_c,cex=1)

mean_data <- apply(data[1:6], 2, mean)

sd_data <- apply(data[1:6], 2, sd)

data_scaled <- as.data.frame(scale(data[,1:6],center = mean_data, scale = sd_data))

head(data_scaled, n=20)

index = sample(1:nrow(data),round(0.70*nrow(data)))

train_data <- as.data.frame(data_scaled[index,])

test_data <- as.data.frame(data_scaled[-index,])

n = names_v(data_scaled)

f = as.formula(paste("mpg ~", paste(n[!n %in% "mpg"], collapse = " + ")))

net = neuralnet(f,data=train_data,hidden=3,linear.output=TRUE)

plot(net)

predict_net_test <- compute(net,test_data[,2:6])

MSE.net <- sum((test_data$mpg - predict_net_test$net.result)^2)/nrow(test_data)

Lm_Mod <- lm(mpg~., data=train_data)

summary(Lm_Mod)

predict_lm <- predict(Lm_Mod,test_data)

MSE.lm <- sum((predict_lm - test_data$mpg)^2)/nrow(test_data)

Lm_Mod <- lm(mpg~., data=train_data)

summary(Lm_Mod)

predict_lm <- predict(Lm_Mod,test_data)

MSE.lm <- sum((predict_lm - test_data$mpg)^2)/nrow(test_data)

par(mfrow=c(1,2))

plot(test_data$mp_g,predict_net_test$net.result,col='black',main='Real vs predicted for neural network',pch=18,cex=4)construction

abline(0,1,lwd=5)

plot(test_data$mpg,predict_lm,col='black',main='Real vs predicted for linear regression',pch=18,cex=4)

abline(0,1,lwd=5)


ISLR庫命令加載自動數據集,如預期的那樣,它包含在ISLR庫中,並將其保存在給定的數據框中。使用View函數查看任意R對象結構的壓縮顯示。

代碼詳解:用R語言構建ANN並將其可視化


探索性分析


我們進行探索性分析以瞭解數據的分佈方式並獲得初步知識。該過程從探索性分析開始,追蹤預測因子與客觀的關係圖。預測變量有以下變量:汽缸、排量、馬力、重量、加速度、年份、原點和名稱。目標是mp_g變量,其中包含每加侖樣車數量的測量值。

以下是繪製剩餘數量的預測值(氣缸,位移,馬力和加速度)與目標值(mpg)的其他圖表。


代碼詳解:用R語言構建ANN並將其可視化



R代碼

par(mfrow=c(2,2))

plot(data$cylinders_48, data$mp_g, pch=data$origin_c,cex=1)

plot(data$dis_placement, data$mp_g, pch=data$origin_c,cex=1)

plot(data$horse_power, data$mp_g, pch=data$origin_c,cex=1)

plot(data$acceleration_mph, data$mp_g,

pch=data$origin_c,cex=1)(/code)


代碼詳解:用R語言構建ANN並將其可視化



代碼詳解:用R語言構建ANN並將其可視化


構建神經網絡模型


建議在運行神經網絡之前對數據進行標準化。通過規範化,數據單元減少,允許用戶輕鬆關聯來自不同位置的數據。並不是所有數據都需要標準化。然而,我們已經注意到,當數值被歸一化時,神經網絡通常形成更實用更好的預測。

實際上,如果數值數據沒有被標準化並且兩個預測變量的大小非常難以接近,則神經網絡權重值的變化對更高的值具有更大的相關影響。有幾種標準化技術,其中min-max標準化和Z-評分歸一化是優選的,因為它們簡單易行。Z-評分技術包括將列的平均值減去列中的每個值,然後將結果分配給列的標準偏差。


代碼詳解:用R語言構建ANN並將其可視化



一旦數據被標準化,一切都被設置為構建神經網絡。在構建神經網絡時,需要考慮以下幾點:

· 少數神經元會導致系統出現高誤差,因為預測部分可能過於複雜而無法捕獲少量神經元。

· 大量神經元會過度擬合訓練數據而不能很好地誘導。

· 每個隱藏層中的神經元數量應該大約是輸入和輸出層的大小,也可能是平均值。

· 每個隱藏層中的神經元數量不應超過該輸入神經元數量的兩倍,因為你可能在給定點上過度擬合。

在此圖中,我們有五個輸入變量(cylinders, displacement, horsepower, weight, 和acceleration)和一個變量輸出(mpg)。 讓三個神經元在隱藏層中。

net_# = neuralnet(f,data=train_data,hidden=3,linear.output=TRUE)


隱藏參數允許具有每個隱藏層的神經元數量的向量,而應用參數linear.output來指定是否要進行迴歸(linear.output = TRUE)或分類(linear.output = FALSE)。

神經網絡組件的三個主要特徵如下:

長度:這是組件長度,它顯示了包含此類型的元素的數量。

分類:包含組件類的特定指示。

模式:一種組件。


代碼詳解:用R語言構建ANN並將其可視化



代碼詳解:用R語言構建ANN並將其可視化


相關推薦

推薦中...