library(randomForest)
rf.model <- randomForest(WIN ~ ., data = learn)
Je voudrais adapter un modèle de forêt aléatoire, mais je reçois cette erreur:
Error in na.fail.default(list(WIN = c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, :
missing values in object
J'ai le cadre de données apprendre avec 16 attributs numériques et WIN est un facteur avec les niveaux 0 1.
Ma réaction initiale à cette question était qu’elle ne demandait pas beaucoup d’efforts de recherche, car "tout le monde" savait que les forêts aléatoires ne géraient pas les valeurs manquantes dans les prédicteurs. Mais après vérification ?randomForest
Je dois avouer que cela pourrait être beaucoup plus explicite.
(Bien que le lien PDF de Breiman dans la documentation indique explicitement que les valeurs manquantes ne sont tout simplement pas gérées.
Le seul indice évident dans la documentation officielle que j'ai pu voir était que la valeur par défaut pour le na.action
paramètre est na.fail
, qui pourrait être trop cryptique pour les nouveaux utilisateurs.
Dans tous les cas, si vos valeurs prédites ont des valeurs manquantes, vous avez (essentiellement) deux choix:
rpart
gère bien les valeurs manquantes.)Sans surprise, le paquet randomForest
a une fonction pour cela, rfImpute
. La documentation à ?rfImpute
présente un exemple de base de son utilisation.
Si seul un petit nombre d'observations a des valeurs manquantes, vous pouvez également essayer de définir na.action = na.omit
pour simplement laisser tomber ces cas.
Et bien sûr, cette réponse laisse supposer que votre problème est simplement d'avoir des valeurs manquantes.
S'il est possible que les valeurs manquantes soient informatives, vous pouvez alors insérer des valeurs manquantes et ajouter des variables binaires supplémentaires (avec new.vars<-is.na(your_dataset)
) et vérifier si l'erreur est réduite si new.var
Est trop volumineux pour pouvoir être ajouté. your_dataset
puis vous pouvez l’utiliser seul, choisir des variables significatives avec varImpPlot
et les ajouter à your_dataset
, vous pouvez également essayer d’ajouter une seule variable à your_dataset
qui compte le nombre de NA
de new.var <- rowSums(new.vars)
Ce n’est pas une réponse inopinée, si les variables manquantes sont informatives, une comptabilisation pour celles-ci pourrait corriger l’augmentation de l’erreur de modèle due à la seule procédure d’imputation imparfaite.
Les valeurs manquantes sont informatives, elles sont dues à des causes non aléatoires, ce qui est particulièrement courant dans les contextes d'expériences sociales.
La forêt aléatoire de Breiman, sur laquelle est basé le paquetage randomForest , gère en réalité les valeurs manquantes en prédicteurs. Dans le package randomForest, vous pouvez définir
na.action = na.roughfix
Il commencera par utiliser médiane/mode pour les valeurs manquantes, mais ensuite il développera une forêt et calculera les proximités, puis itérera et construira une forêt en utilisant ces valeurs nouvellement remplies, etc. Ceci n'est pas bien expliqué dans randomForest documentation (p10). ) . Il déclare seulement
.... Les NA sont remplacés par des médianes de colonne .... Ceci est utilisé comme point de départ pour imputer les valeurs manquantes par forêt aléatoire
Sur Breiman's page d'accueil vous trouverez un peu plus d'informations
missfill = 1,2 effectue un remplacement rapide des valeurs manquantes pour l'ensemble d'apprentissage (si égal à 1) et un remplacement plus prudent (si égal à 2).
mfixrep = k avec missfill = 2 effectue un remplacement plus lent, mais généralement plus efficace, en utilisant les proximités avec k itérations sur l'ensemble de formation uniquement. (Requiert nprox> 0).