2017-04-07 3 views
1

J'utilise le paquet caret de R pour implémenter la technique adaboost. Mais je reçois une erreur lors de l'exécution.impossible d'utiliser Adaboost avec le paquet de caret R

> str(my_data) 
'data.frame': 3885 obs. of 10 variables: 
$ Date : Factor w/ 12 levels "0","1","2","3",..: 3 3 3 3 3 3 3 3 3 3 ... 
$ JAPAN : int 0 1 0 0 0 0 1 1 0 1 ... 
$ HONGKONG: int 0 1 0 1 0 0 0 1 1 1 ... 
$ CHINA : int 1 0 1 1 1 1 0 1 1 0 ... 
$ INDIA : int 0 0 0 1 0 0 1 1 0 1 ... 
$ GERMANY : int 0 1 1 0 1 1 0 0 0 1 ... 
$ FRANCE : int 0 1 1 0 1 1 0 0 0 1 ... 
$ EURO : int 0 1 1 0 1 1 0 0 0 1 ... 
$ LONDON : int 0 1 1 0 1 1 0 0 0 1 ... 
$ DOWJONES: int 0 1 0 1 1 1 0 0 0 1 ... 
> Train=my_data[1:3600,]   #2015 
> test=my_data[3601:3860,] 

Il n'y a pas de problème quand je suis avec la mise en œuvre GBM caret

#1 gradient boost 
set.seed(995) 
fitControl_1 <- trainControl(method = "repeatedcv", number = 4, repeats = 5) 
gbm_model<- train(factor(INDIA)~Date+JAPAN+HONGKONG+CHINA+GERMANY+FRANCE+EURO+LONDON+DOWJONES,data=Train, method = "gbm", trControl = fitControl_1,verbose=TRUE) 
PREDICTION_GBM= predict(gbm_model,test) 
solution <- data.frame(org_bse = test$INDIA, GBM = PREDICTION_GBM) 

Mais je ne reçois pas la sortie même si je gardais le verbose = TRUE

#2 Adaboost 
set.seed(995) 
fitControl_2 <- trainControl(method = "repeatedcv", number = 5, repeats = 5) 
ada_model<- train(factor(INDIA)~Date+JAPAN+HONGKONG+CHINA+GERMANY+FRANCE+EURO+LONDON+DOWJONES,data=Train,method="AdaBoost.M1",trControl = fitControl_2,verbose=TRUE) 
PREDICTION_ADA= predict(ada_model,test) 
solution<-cbind(solution,ADA=PREDICTION_ADA) 
+0

pouvez-vous s'il vous plaît fournir un jeu de données reproductible? Utilisez 'dput'. – JanLauGe

Répondre

1

I utilisé le code suivant pour reproduire votre problème:

library(caret) 
set.seed(995) 

Train <- data.frame(
    cyl = as.factor(mtcars$cyl), 
    vs = as.factor(mtcars$vs), 
    am = as.factor(mtcars$am), 
    gear = as.factor(mtcars$gear), 
    carb = as.factor(mtcars$carb)) 

fitControl_2 <- trainControl(method = "repeatedcv", number = 2, repeats = 1) 
ada_model<- train(
    cyl ~ vs + am + gear + carb, 
    data = Train, 
    method ="AdaBoost.M1", 
    trControl = fitControl_2, 
    verbose = TRUE) 

Pour moi, la formation "AdaBoost.M1" a duré environ dix minutes avant que je décide de l'arrêter. J'ai ensuite ajouté une grille d'accord comme indiqué ci-dessous, et obtenu un résultat dans une minute. Je vous recommande d'essayer d'ajuster votre code de la même manière:

library(caret) 
set.seed(995) 

Train <- data.frame(
    cyl = as.factor(mtcars$cyl), 
    vs = as.factor(mtcars$vs), 
    am = as.factor(mtcars$am), 
    gear = as.factor(mtcars$gear), 
    carb = as.factor(mtcars$carb)) 


fitGrid_2 <- expand.grid(mfinal = (1:3)*3,   # This is new! 
         maxdepth = c(1, 3),  # ...and this 
         coeflearn = c("Breiman")) # ...and this 

fitControl_2 <- trainControl(method = "repeatedcv", 
          number = 2, 
          repeats = 1) 
ada_model <- train(
    cyl ~ vs + am + gear + carb, 
    data = Train, 
    method ="AdaBoost.M1", 
    trControl = fitControl_2, 
    tuneGrid = fitGrid_2, #and this is new, too! 
    verbose = TRUE) 

Faites-moi savoir si cela résout votre problème.