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?

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 

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)


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.