2016-07-03 12 views
0

Ich möchte neuronalen Netzwerk in R verwenden, um den Preis eines Autos vorherzusagen, mit 144 unabhängigen Variablen. Unter meinem Code. Alles funktioniert gut, außer den letzten 2 Zeilen: AUC und Plot.Fehler in Roc: Neuronales Netzwerk in R

Dies ist der Fehler, den ich bekam:

Fehler in roc (predNN, yTEST): nicht deutlich genug Prognosen Fläche unter der ROC-Kurve zu berechnen.

Ich habe die abhängige Variable bereits als Faktor berechnet, aber dieser Fehler bleibt bestehen. Wie soll ich dieses Problem lösen?

allind <- sample(x=1:nrow(data_price2),size=nrow(data_price2)) 

trainind <- allind[1:round(length(allind)/3)] 
valind <- allind[(round(length(allind)/3)+1):round(length(allind)*(2/3))] 
testind <- allind[round(length(allind)*(2/3)+1):length(allind)] 

BasetableTRAIN <- data_price2[trainind,] 
BasetableVAL <- data_price2[valind,] 
Basetablebig <-rbind(BasetableTRAIN,BasetableVAL) 
BasetableTEST <- data_price2[testind,] 

#Create a separate response variable 
yTRAIN <- BasetableTRAIN$Price 
BasetableTRAIN$Price <- NULL 

yVAL <- BasetableVAL$Price 
BasetableVAL$Price <- NULL 

yTEST <- BasetableTEST$Price 
BasetableTEST$Price <- NULL 

yBIG <- Basetablebig$Price 
Basetablebig$Price <- NULL 

yTRAIN <- as.factor(yTRAIN) 
yVAL <- as.factor(yVAL) 
yTEST <- as.factor(yTEST) 
yBIG <- as.factor(yBIG) 

if (require("nnet")==FALSE) install.packages("nnet") ; library(nnet) 
if (require("AUC")==FALSE) install.packages("AUC") ; library(AUC) 

size <- 5 #number of units in the hidden layer 
decay <- 0.1 #weight decay. Same as lambda in regularized LR. Controls for 
       overfitting. 
rang <- 0.5 #the range of the initial random weights parameter 
maxit <- 2000 #set high in order not to run into early stopping 

NN <- nnet(yBIG ~ ., Basetablebig, size = size, 
     rang = rang, decay = decay, maxit = maxit,MaxNWts= Inf) 

predNN <- as.numeric(predict(NN,BasetableTEST,type="raw")) 
AUC::auc(roc(predNN,yTEST)) 
plot(roc(predNN,yTEST)) 

Antwort

1

Sie sind mehr als wahrscheinlich leiden an Problemen im Zusammenhang mit schlechten Modell. Schauen Sie sich die Vorhersage des Modells an. Wahrscheinlich haben Sie alle Nullen oder Einsen basierend auf der Wahrscheinlichkeitsschwelle von 0,5. Neuronale Netztechniken sind sehr anfällig für Skalenunterschiede zwischen verschiedenen Spalten, so dass eine Standardisierung der Daten [Mittelwert = 0 Std = 1] eine gute Vorgehensweise darstellt. Ich würde vorschlagen, dass Sie dafür die R-Funktion scale() verwenden. Bitte geben Sie Daten an, um Ihr Problem zu reproduzieren.

+0

Jemand anders hat die Antwort hochgestuft. Ich habe versucht, die Basistabelle zu skalieren, aber dann tritt dieser Fehler beim Ausführen des neuronalen Netzwerks auf: Fehler in if (nconn [i + 1] == ns) cadd <- c (0, von): fehlender Wert, wo TRUE/FALSE benötigt wird. Wenn man sich die skalierte Basistabelle ansieht, haben einige Dummy-Variablen jetzt viele NA-Werte, während andere nicht – GerritCalle

+0

Wie löse ich das? – GerritCalle

+0

Bevor der ganze Code 'scale (data_price2)' ist, ist es das. Ich weiß nicht, wie du Fehler bekommen hast, die du erwähnt hast. – abhiieor