R caret paquet (rpart): construction d'un arbre de classification

J'ai du mal pendant plusieurs jours pour effectuer un arbre de classification à l'aide de l'accent circonflexe paquet.
Le problème, ce sont mes facteur de variables. - Je générer l'arbre, mais quand j'essaie d'utiliser le meilleur modèle pour faire des prédictions sur l'échantillon de test, il ne parvient pas, parce que le train de la fonction crée des mannequins pour mon facteur variables et ensuite la fonction predict ne peut pas trouver ces nouveaux mannequins dans le jeu de test. Comment dois-je régler ce problème?

Mon code est comme suit:

install.packages("caret", dependencies = c("Depends", "Suggests"))      
library(caret)                                      
db=data.frame(read.csv ("db.csv", head=TRUE, sep=";", na.strings ="?"))     
fix(db)
db$defaillance=factor(db$defaillance)
db$def=ifelse(db$defaillance==0,"No","Yes") 
db$def=factor(db$def)
db$defaillance=NULL
db$canal=factor(db$canal)
db$sect_isodev=factor(db$sect_isodev)
db$sect_risq=factor(db$sect_risq)       

#delete zero variance predictors                                
nzv <- nearZeroVar(db[,-78])
db_new <- db[,-nzv]

inTrain <- createDataPartition(y = db_new$def, p = .75, list = FALSE)                               
training <- db_new[inTrain,]
testing <- db_new[-inTrain,]
str(training)
str(testing)
dim(training)
dim(testing)

Un exemple o le str() pour la formation/test se trouve ci-dessous:

 $ FDR        : num  1305 211 162 131 143 ...
 $ FCYC       : num  0.269 0.18 0.154 0.119 0.139 ...
 $ BFDR       : num  803 164 108 72 76 63 100 152 188 80 ...
 $ TRES       : num  502 47 54 59 67 49 53 -7 -103 -109 ...
 $ sect_isodev: Factor w/ 9 levels "1","2","3","4",..: 4 3 3 3 3 3 3 3 3 3 ...
 $ sect_risq  : Factor w/ 6 levels "0","1","2","3",..: 6 6 6 6 6 6 6 6 6 6 ...
 $ def        : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ...
> dim(training)
[1] 14553    42
> dim(testing)
[1] 4850   42

Mon code comme ceci:

fitControl <- trainControl(method = "repeatedcv",
                           number = 10,
                           repeats = 10,
                   classProbs = TRUE,
                   summaryFunction = twoClassSummary)

#CART1
set.seed(1234)
tree1 = train (def~.,
           training,
           method = "rpart",
           tuneLength=20,
           metric="ROC",
           trControl = fitControl)

Un échantillon de

summary(tree1$finalModel)

est ici

RNTB          38.397731
sect_isodev1   6.742289
sect_isodev3   4.005016
sect_isodev8   2.520850
sect_risq3     9.909127
sect_risq4     6.737908
sect_risq5     3.085714
SOLV          73.067539
TRES          47.906884
sect_isodev2   0.000000
sect_isodev4   0.000000
sect_isodev5   0.000000
sect_isodev6   0.000000
sect_isodev7   0.000000
sect_isodev9   0.000000
sect_risq0     0.000000
sect_risq1     0.000000
sect_risq2     0.000000

Et voici l'erreur:

modèle.tree1 <- prévoir(tree1$finalModel,tests)
Erreur dans la fonction eval(expr, envir, enclos) : l'objet "sect_isodev1' ne trouve pas

Je suis curieux encore une autre chose. J'ai trouvé dans Max Kuhn "Modélisation Prédictive " avec R" de la syntaxe suivante:

predict(rpartTune$finalModel, newdata, type = "class")

rpartTune$finalModel est un arbre de classification identique à la mienne (ou la mienne identique au sien).
Maintenant, R n'accepte pas type="class". Seul type="prob". Je suis troublé à cause de cela.

Merci d'avance pour vos réponses

OriginalL'auteur lorelai | 2014-12-18