2016-07-03 2 views
0

Je veux utiliser le réseau de neurones en R pour prédire le prix d'une voiture, ayant 144 variables indépendantes. Ci-dessous mon code. Tout fonctionne bien, sauf les 2 dernières lignes: AUC et intrigue.en République du Congo: Neural Network en R

C'est l'erreur que je suis:

erreur en République du Congo (predNN, YTest): assez prédictions distinctes ne pas calculer l'aire sous la courbe ROC.

je l'ai déjà calculé la variable dépendante comme un facteur, mais cette erreur reste. Comment devrais-je résoudre ce problème?

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

Répondre

1

Vous souffrez probablement de problèmes liés à un mauvais modèle. Regardez dans la prédiction du modèle. Probablement vous pourriez avoir tous les 0 ou 1 basé sur le seuil de probabilité 0.5. Les techniques de réseaux neuronaux sont très susceptibles d'avoir une différence d'échelle entre différentes colonnes, donc une standardisation des données [moyenne = 0 std = 1] est une bonne pratique. Je vous suggère d'utiliser la fonction R scale() pour cela. Veuillez fournir des données pour reproduire votre problème.

+0

Quelqu'un d'autre upvoted la réponse. J'ai essayé de mettre à l'échelle la basetable, mais cette erreur se produit lors de l'exécution du réseau de neurones: Erreur dans if (nconn [i + 1] == ns) cadd <- c (0, from): valeur manquante où TRUE/FALSE nécessaire. Lorsque vous jetez un coup d'oeil à la basetable mise à l'échelle, certaines variables factices ont maintenant beaucoup de valeurs NA, alors que d'autres ne le font pas – GerritCalle

+0

Comment résoudre ce problème? – GerritCalle

+0

Avant tout ce code fait 'scale (data_price2)' c'est tout. Je ne sais pas comment vous avez mentionné l'erreur. – abhiieor