2017-07-14 6 views
1

OK, donc une autre question débutant en rapport avec le Titanic Concours:Forêt aléatoire dans R: nouveaux niveaux de facteur ne sont pas présents dans les données de formation

Je suis en train d'exécuter une prédiction forêt aléatoire contre mes données de test. Tout mon travail a été fait sur des données combinées de test et d'entraînement.

J'ai maintenant diviser le 2 à testdata et trainingdata

je le code suivant:

trainingdata <- droplevels(data.combined[1:891,]) 
testdata <- droplevels(data.combined[892:1309,]) 

fitRF <- randomForest(as.factor(Survived) ~ Pclass + Sex + Age + SibSp 
+ Parch + Fare + Embarked 
        + new.title + family.size + FamilyID2, 
        data=trainingdata, 
        importance =T, 
        ntree=2000) 

varImpPlot(fitRF) 

#All works up to this point 


Prediction <- predict(fitRF, testdata) 
#This line above generates error 
submit <- data.frame(PassengerID = data.combined$PassengerId, Survived 
= Prediction) 
write.csv(submit, file="14072017_1_RF", row.names = F) 

Quand je lance la ligne de prédiction je reçois l'erreur suivante:

> Prediction <- predict(fitRF, testdata) 
Error in predict.randomForest(fitRF, testdata) : 
    New factor levels not present in the training data 

Quand je cours str (testdata) et str (trainingdata) je peux voir 2 facteurs qui ne correspondent plus

Trainingdata  
$ Parch   : Factor w/ 7 levels 

Testdata 
$ Parch   : Factor w/ 8 

Trainingdata 
$ FamilyID2  : Factor w/ 22 

Testdata 
$ FamilyID2  : Factor w/ 18 

Est-ce que ce sont ces différences qui provoquent mon erreur? Et si oui, comment puis-je résoudre ce problème?

Merci beaucoup

Informations complémentaires: J'ai enlevé Parch et FamilyID2 de la ligne de création forêt d'arbres décisionnels, et le code fonctionne maintenant, il est donc sans aucun doute ces 2 variables qui sont à l'origine de la question avec des niveaux incompatibles.

+0

La duplication possible de [Forfait forêt aléatoire dans R montre une erreur lors de la prédiction() s'il existe de nouveaux niveaux de facteur dans les données de test. Est-il possible d'éviter cette erreur?] (Https://stackoverflow.com/questions/17059432/random-forest-package-in-r-shows-error-during-prediction-if-there-are-new-fact – RUser

+0

J'ai regardé ce post, et j'ai essayé d'implémenter la solution mais l'erreur était la même. –

+0

Avant la fonction 'predict()' si vous exécutez 'testdata <- factor (testdata, levels = levels (trainingdata))' vous ne devriez avoir aucun problème. – Prem

Répondre

1

Fellow débutant ici, je venais de jouer avec Titanic ces jours-ci. Je pense que ce sens pour Indifférent Fume avoir la variable Parch comme un facteur, alors assurez-vous peut-être numérique et qui peut résoudre le problème:

train de $ Parch < - as.numeric (train à Parch de $)

dans le cas contraire, les données de test a 2 obs avec la valeur de 9 pour Parch, qui ne sont pas présentes dans les données du train:

> table(train$Parch) 

0 1 2 3 4 5 6 
678 118 80 5 4 5 1 

> table(test$Parch) 

0 1 2 3 4 5 6 9 
324 52 33 3 2 1 1 2 
> 

Alternativement, si vous avez besoin que la variable soit un facteur, alors vous pouvez simplement ajouter un autre de niveau:

train$Parch <- as.factor(train$Parch) # in my data, Parch is type int 
train$Parch 
levels(train$Parch) <- c(levels(train$Parch), "9") 
train$Parch # now Parch has 7 levels 
table(train$Parch) # level 9 is empty