2016-05-19 7 views
1

Я хочу получить точность или RMSE результата прогноза нейронной сети. Я начал использовать Матрицу замешательства, но, как указано в предыдущих ответах, матрица Confusion Matrix дает достоверные результаты для непересекающихся переменных.Прогнозирование на Нейронной сети в регионе R

Есть ли способ получить точность или частоту ошибок в прогнозе нейронной сети ??

В качестве примера здесь не является код, который я получил до сих пор:

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)) 

Кто-нибудь знает, как я могу сделать эту работу? или как я могу получить Точность или предсказание нейронной сети? Любая помощь будет глубоко оценена.

+0

Почему бы не назвать 'confusionMatrix' непосредственно на прогнозируемых результатах и 'y'? т. е. 'confusionMatrix (nnclas_prediction, y)' – cdeterman

+1

Кажется, вы пытаетесь создать матрицу путаницы для предсказаний о непрерывной переменной. Матрицы с замешательством предназначены для задач классификации ... – Jason

+0

Вы имеете в виду что-то вроде этого: 'nnclas_prediction <- confusionMatrix ((предсказывать (nnclas_model, x)), y)'? – mina

ответ

1

Как упоминалось в комментариях, матрицы смешения предназначены для задач классификации. Если вы хотите классифицировать 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 как непрерывные, матрица путаницы не имеет никакого смысла. Вместо этого вы должны думать об ошибках среднего квадрата.

+0

Я попытался получить «RMSE», но все же у меня нет успешных результатов, я просто не вижу, что я делаю неправильно (см. Мой отредактированный вопрос). – mina

+0

@ Джейсон в последняя строка кода 'confusionMatrix (as.factor (yhat), y)', вы имеете в виду x вместо y, где находится 'y <- rock [, 4]'? Просто не уверен, откуда этот 'y'. Благодаря! –

+0

@ nate-m, да, я пропустил линию. Я добавил его сейчас. – Jason

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') 
Смежные вопросы