web-dev-qa-db-fra.com

Classification - Utilisation des niveaux de facteurs

Je travaille actuellement sur un modèle prédictif pour un problème de désabonnement. 
Chaque fois que j'essaie d'exécuter le modèle suivant, le message d'erreur suivant s'affiche: Au moins un des niveaux de classe n'est pas un nom de variable R valide. Cela entraînera des erreurs lors de la génération des probabilités de classe car les noms de variables seront convertis en X0, X1. Veuillez utiliser des niveaux de facteurs pouvant être utilisés comme noms de variables R valides.

fivestats <- function(...) c( twoClassSummary(...), defaultSummary(...))
fitControl.default    <- trainControl( 
    method  = "repeatedcv"
  , number  = 10
  , repeats = 1 
  , verboseIter = TRUE
  , summaryFunction  = fivestats
  , classProbs = TRUE
  , allowParallel = TRUE)
set.seed(1984)

rpartGrid             <-  expand.grid(cp = seq(from = 0, to = 0.1, by = 0.001))
rparttree.fit.roc <- train( 
    churn ~ .
  , data      = training.dt  
  , method    = "rpart"
  , trControl = fitControl.default
  , tuneGrid  = rpartGrid
  , metric = 'ROC'
  , maximize = TRUE
)

Dans l'image ci-jointe, vous voyez mes données, j'ai déjà transformé certaines données de chr en facteur variable. 

DATA OVERVIEW

Je ne comprends pas ce que mon problème pose, si je transformais toutes les données en facteurs, alors par exemple la variable total_airtime_out aurait probablement environ 9 000 facteurs. 

Merci pour tout type d'aide!

5
Simon

Ce n'est pas exactement possible pour moi de reproduire votre erreur, mais je suppose que le message d'erreur vous dit tout ce que vous devez savoir:

Au moins un des niveaux de classe n'est pas un nom de variable R valide. Ceci provoquera des erreurs lors de la génération des probabilités de classe car les noms des variables seront convertis en X0, X1. Veuillez utiliser des niveaux de facteurs pouvant être utilisés comme noms de variables R valides.  

L'accent est à moi. En regardant votre variable de réponse, ses niveaux sont "0" et "1", ce ne sont pas des noms de variables valides dans R (vous ne pouvez pas faire 0 <- "my value"). Ce problème disparaîtra probablement si vous renommez les niveaux de la variable de réponse avec quelque chose comme

levels(training.dt$churn) <- c("first_class", "second_class")

selon ce Q .

15
einar

Que diriez-vous de cette fonction de base:

 make.names(churn) ~ .,

"créer des noms syntaxiquement valables à partir de vecteurs de caractères"? 

La source

1
Dbercules