2017-08-02 4 views
1

J'applique Naive Bayes à un jeu de données jouet en utilisant le paquet klaR et tout fonctionne bien.Naies Bayees en klaR et caret

Ensuite, je veux reproduire la même analyse avec caret utilise method="nb", qui est en effet que d'une enveloppe pour la fonction NaiveBayes dans le package klaR.

Cependant, cette dernière estimation ne fonctionne pas. Je reçois un message d'erreur. Je connais les limites de l'ensemble de données sur les jouets. Cependant, comme l'analyse avec le paquet klaR fonctionne, je me demande comment reproduire exactement la même analyse avec caret?

Voici le code:

# Data 
d <- structure(list(Y = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 1L), .Label = c("0", "1"), class = "factor"), x1_disc = structure(c(1L, 
2L, 1L, 2L, 3L, 4L, 4L, 5L, 2L, 4L), .Label = c("_02", "_24", 
"_46", "_68", "_810"), class = "factor"), x2_disc = structure(c(1L, 
1L, 1L, 1L, 2L, 3L, 3L, 3L, 1L, 2L), .Label = c("_02", "_24", 
"_46"), class = "factor")), .Names = c("Y", "x1_disc", "x2_disc" 
), row.names = c(NA, -10L), class = "data.frame") 



# Works(klaR) 
library(klaR) 
fit2 <- NaiveBayes(Y ~ x1_disc + x2_disc, usekernel = FALSE, fL = 0, data=d) 
predict(fit2, d, threshold = 0) 


# Does not work (caret) 
library(caret) 
model2 <- train(form=Y ~ x1_disc + x2_disc, 
       data=d, 
       method="nb", 
       # Uses package klaR 
       # (see: http://topepo.github.io/caret/train-models-by-tag.html) 
       trControl=trainControl(method="none"), 
       tuneGrid = data.frame(fL=0, usekernel=F, adjust=1)) 

predict(model2, d, type="prob") 
+1

peut-être la version caret n'accepte pas les données de la classe "facteur". De la faute de frappe dans "usekernal" au lieu de usekernel "je suppose que vous avez obtenu votre code d'une question validée croisée Avez-vous essayé, comme ils le recommandent, de ne pas utiliser l'interface de la formule mais de spécifier x =' et y = '? – agenis

+0

Merci de m'avoir indiqué la faute de frappe, je l'ai corrigé, puis j'ai essayé de spécifier "x" et "y" et ça a marché, c'est un peu bizarre, mais merci pour l'aide rapide! – majom

Répondre

1

Je fais mon commentaire dans une réponse car il a résolu votre problème en partie. Je suis tombé sur cette croix Validé answer qui a suggéré d'exécuter le modèle caret sans l'interface de formule S3 qui serait dans votre cas:

model2 <- train(y=d$Y, x=d[, 2:3], ...) 

Je ne sais pas la raison exacte pour laquelle cela fait l'affaire, et il est probablement une explication différente que pour la question CV car ils n'ont pas eu l'erreur.

+0

La méthode formule conserve les deux prédicteurs en tant que facteurs alors que la méthode de la formule les convertit en variables fictives 99% des fonctions du modèle R suivent cette convention mais pas klaR :: NaiveBayes et d'autres (modèles basés sur l'arbre). – topepo