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.
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!
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 .
Que diriez-vous de cette fonction de base:
make.names(churn) ~ .,
"créer des noms syntaxiquement valables à partir de vecteurs de caractères"?