簡體   English   中英

R中神經網絡的預測

[英]Prediction on Neural Network in R

我想獲得神經網絡的預測結果的准確度或RMSE 我開始使用混淆矩陣,但如前面的答案所示,混淆矩陣為非連續變量提供有效結果。

有什么方法可以獲得神經網絡預測的准確度或錯誤率嗎?

作為一個例子,這是我到目前為止的代碼:

library(nnet)
library(caret)
library(e1071)
data(rock)
newformula <- perm ~ area + peri + shape
y <- rock[, "perm"]
x <- rock[!colnames(rock)%in% "perm"]
original <- datacol(rock,"perm")

nnclas_model <- nnet(newformula, data = rock, size = 4, decay = 0.0001, maxit = 500)    
nnclas_prediction <- predict(nnclas_model, x)
nnclas_tab <- table(nnclas_prediction, y)
rmse <- sqrt(mean((original - nnclas_prediction)^2))

有誰知道我怎么能做這個工作? 或者我如何獲得准確度或神經網絡預測? 任何幫助將深表感謝。

我不知道“nnet”,但我使用了“neuralnet”庫並且能夠獲得RMSE。 這是我的完整代碼: 只需根據您的要求更改training_Data和testing_Data的數據,而不是“Channel”給出您的分類屬性

  dat <- read.csv("Give path of your data file here")
summary(dat)
cleandata <- dat
cleandata <- na.omit(cleandata)

#scaling

apply(cleandata,MARGIN = 2, FUN = function(x)sum(is.na(x)))
maxs    =   apply(cleandata,    MARGIN  =   2,  max)
mins    =   apply(cleandata,    MARGIN  =   2,  min)
scaledData =     as.data.frame(scale(cleandata, center  =   mins,   scale   =   maxs    - mins))
summary(scaledData)

#Splitting data in 80:20 ratio
train = sample(1:nrow(scaledData), nrow(scaledData)*0.8)
test = -train
training_Data = scaledData[train,]
testing_Data = scaledData[test,]
dim(training_Data)
dim(testing_Data)

#neural net

library(neuralnet)
n   <- names(training_Data)
f   <- as.formula(paste("Channel    ~", paste(n[!n  %in%    "Channel"], collapse    =   "   +   ")))
neuralnet_Model <- neuralnet(f,data = training_Data, hidden = c(2,1))
plot(neuralnet_Model)
neuralnet_Model$result.matrix
pred_neuralnet<-compute(neuralnet_Model,testing_Data[,2:8])
pred_neuralnet.scaled   <- pred_neuralnet$net.result *(max(scaledData$Channel)-min(scaledData$Channel))+min(scaledData$Channel)
real.values <- (testing_Data$Channel)*(max(cleandata$Channel)-min(cleandata$Channel))+min(cleandata$Channel)
MSE.neuralnetModel  <- sum((real.values - pred_neuralnet.scaled)^2)/nrow(testing_Data)
MSE.neuralnetModel
plot(real.values, pred_neuralnet.scaled, col='red',main='Real   vs  predicted',pch=18,cex=0.7)
abline(0,1,lwd=2)
legend('bottomright',legend='NN',pch=18,col='red',  bty='n')

正如評論中所提到的,混淆矩陣用於分類問題。 如果您打算根據其級別對perm進行分類,那么以下代碼應該適合您。

library(nnet)
library(caret)
library(e1071)
data(rock)
rock$perm <- as.factor(rock$perm)
nnclas_model <- nnet(perm ~ area + peri + shape, data = rock, 
                     size = 4, decay = 0.0001, maxit = 500)
x <- rock[, 1:3]
y <- rock[, 4]
yhat <- predict(nnclas_model, x, type = 'class')
confusionMatrix(as.factor(yhat), y)

如果你的意思是將perm視為連續的,那么混淆矩陣就沒有任何意義。 您應該考慮均方誤差。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM