/ / Régression avec de nouveaux niveaux de facteur dans l'ensemble de test - comment ignorer correctement l'erreur - r, gestion des erreurs, régression, forêt aléatoire, données catégorielles

Régression avec nouveaux niveaux de facteur dans l'ensemble de tests - comment ignorer normalement les erreurs - r, traitement des erreurs, régression, forêt aléatoire, données catégorielles

Y a-t-il de toute façon pour R d'ignorer "gracieusement"des erreurs qui feraient normalement échouer complètement la prédiction lorsqu'il y a de nouveaux niveaux de facteur dans l'ensemble de test? Normalement, s'il n'y a qu'une seule valeur incorrecte, l'opération entière ne fonctionne pas

Pour que les prédictions se produisent s'il y a des valeurs valides, mais quand il y a de nouveaux niveaux de facteur, une erreur se produit?

exemple vraiment merdique mais ... voici ce à quoi je veux en venir

  library(randomForest)
df=mtcars
df$vs=99
df[1,8]=0  # vs column
df$vs=factor(df$vs)
mtcars$vs=factor(mtcars$vs)

fit=lm(mpg~., data=mtcars)
# fit above works with explanation given below, but fit2 fails with randomforest?  why?
fit2 = randomForest(mpg~., data=mtcars)
df$help=predict(fit, df)   #  first row should work others should error gracefully maybe with a NA?

La première réponse que j'ai eue a été excellente. Cependant, il échoue toujours pour un exemple moins simpliste avec randomForest ci-dessus.

Réponses:

3 pour la réponse № 1

Vous pourriez utiliser un tryCatch retourner un NA lors de la prédiction.

Pour une seule ligne:

tryCatch(predict(fit, bad_df[1,]),
error=function(e) NA))

Pour toutes les lignes:

sapply(1:nrow(bad_df),
function(i)
tryCatch(predict(fit, bad_df[i,]),
error=function(e) NA))

Une alternative consiste à modifier votre ensemble de données. En gros, les facteurs de votre ensemble de données qui ne correspondent pas à votre fit l'objet est défini sur NA:

for(i in 1:length(fit$xlevels)) {
bad_values = which(!(bad_df[,names(fit$xlevels)[i]] %in% fit$xlevels[[i]]))
bad_df[, bad_values] = NA
}