2015-07-28 1 views
0

Je suis un débutant en R et j'essaie de faire de mon mieux pour créer mon premier modèle. Je travaille dans un projet forestier aléatoire 2- classes et jusqu'à présent, je l'ai programmé le modèle comme suit:Évaluation de forêt aléatoire en R

library(randomForest) 

set.seed(2015) 

randomforest <- randomForest(as.factor(goodkit) ~ ., data=training1, importance=TRUE,ntree=2000) 

varImpPlot(randomforest) 

prediction <- predict(randomforest, test,type='prob') 

print(prediction) 

Je ne sais pas pourquoi je ne reçois pas la prévision globale pour mon model.I dois manquer quelque chose dans mon code. Je reçois le OOB et la prédiction par cas dans l'ensemble de test mais pas la prédiction globale du modèle.

library(pROC) 

auc <-roc(test$goodkit,prediction) 

print(auc) 

Cela ne fonctionne pas du tout.

J'ai été dans le manuel de PROC mais je ne peux pas comprendre tout. Il serait très utile que quelqu'un puisse aider avec le code ou poster un lien vers un bon exemple pratique.

+2

Quelle est exactement la "prédiction globale" pour le modèle? Les demandes de liens vers des didacticiels sont considérées hors sujet pour ce site. Il est préférable de poser une question de programmation claire. – MrFlick

+0

Par prédiction globale, j'entends un score de prédiction pour mon modèle. Toute aide/conseil avec le code pour l'AUC? – WillieM

Répondre

0

Votre problème est que predict sur un objet randomForest avec type='prob' retourne deux prédictions: chaque colonne contient la probabilité d'appartenir à chaque class (pour la prédiction binaire).

Vous devez décider lesquelles de ces prédictions utiliser pour construire la courbe ROC. Heureusement pour la classification binaire, ils sont identiques (juste inversés):

auc1 <-roc(test$goodkit, prediction[,1]) 
print(auc1) 
auc2 <-roc(test$goodkit, prediction[,2]) 
print(auc2) 
+0

Merci beaucoup pour votre message. ce qui a du sens dans le cas de mmy utilise auc2 comme suggéré par Morris. – WillieM

+0

@WillieM S'il vous plaît n'oubliez pas d'accepter une réponse si elle répond à votre question, et upvote réponses que vous avez trouvé utile. – Calimo

1

Utilisation du package ROCR, le code suivant devrait fonctionner pour le calcul de la CUA:

library(ROCR) 
predictedROC <- prediction(prediction[,2], as.factor(test$goodkit)) 
as.numeric(performance(predictedROC, "auc")@y.values)) 
+0

J'ai essayé votre code et j'ai eu quelques erreurs. De plus, je ne le comprends pas. Je pense que tout est ok jusqu'à predictionROC <- prédiction (prédiction, as.factor (test $ goodkit)) – WillieM

+0

Je pense que nous n'avons pas besoin de spécifier "as.numeric" car j'ai utilisé type = "prob" sur la prédiction. Aussi, je ne comprends pas la "performance (predictedROC," auc ")", pourquoi incluriez-vous le predictedROC dans l'instruction quand vous essayez de le calculer. La dernière partie du code le "@ y.values" semble être utilisé pour faire le même type de CV? La définition de "y.values" indique: Une liste dans laquelle chaque entrée contient les valeurs de y de la courbe de cette exécution de validation croisée particulière . – WillieM

+0

Désolé, j'ai oublié une petite partie, mais cruciale à ce code! Cependant, vous sembliez confus au-delà de cela. Une partie avancée clé de R est de pouvoir construire vos propres structures de données spéciales pour des problèmes spécifiques. De nombreux forfaits, y compris ROCR, en profitent. Les objets S4 sont ces types spéciaux d'objets. Ainsi, nous créons d'abord un objet de prédiction en utilisant la fonction de prédiction ROCR, puis utilisons cet objet de prédiction lors de la création d'un objet de performance. C'est pourquoi j'ai utilisé le as.numeric() dans le code. –