R: Random Forest lançant NaN / Inf dans l'erreur «appel de fonction étrangère» malgré l'absence de NaN dans l'ensemble de données [fermé]

29

J'utilise caret pour exécuter une forêt aléatoire validée de façon croisée sur un ensemble de données. La variable Y est un facteur. Il n'y a pas de NaN, Inf ou NA dans mon jeu de données. Cependant, lors de l'exécution de la forêt aléatoire, j'obtiens

Error in randomForest.default(m, y, ...) : 
  NA/NaN/Inf in foreign function call (arg 1)
In addition: There were 28 warnings (use warnings() to see them)
Warning messages:
1: In data.matrix(x) : NAs introduced by coercion
2: In data.matrix(x) : NAs introduced by coercion
3: In data.matrix(x) : NAs introduced by coercion
4: In data.matrix(x) : NAs introduced by coercion

Quelqu'un a-t-il des idées pour savoir si cette erreur est causée par les AN introduits par la contrainte? Si oui, comment puis-je empêcher une telle coercition?

Info5ek
la source

Réponses:

36

Il doit y avoir des fonctionnalités dans votre ensemble d'entraînement avec la classe «char».

S'il te plaît, vérifie cela

> a <- c("1", "2",letters[1:5], "3")
> as.numeric(a)
[1]  1  2 NA NA NA NA NA  3
Warning message:
NAs introduced by coercion 
Pankaj Sharma
la source
Juste pour ajouter- si la fonctionnalité est réellement catégorique, elle peut toujours être incluse en la convertissant en un facteur, par exemple. blah <-as.factor (blah)
P.Windridge
14

La cause est probablement que vous avez des variables de caractère dans votre bloc de données.

Convertissez toutes les variables de caractère en facteur sur une seule ligne:

library(dplyr) data_fac=data_char %>% mutate_if(is.character, as.factor)

pablo_sci
la source
2
Je n'avais pas pensé à utiliser mutate_if()pour ça ... merci!
Andrew Brēza
3

Comme indiqué dans l'avertissement, il y avait 28 erreurs qui se trouvaient être le nombre de colonnes avec des types de données de caractères ("chr"). Forcer ces colonnes à des facteurs a permis au cycle de commencer.

Info5ek
la source