2013-03-25 17 views
9

Sto utilizzando il pacchetto R GBM per aumentare la regressione su alcuni dati biologici delle dimensioni 10.000 X 932 e desidero sapere quali sono le impostazioni dei parametri migliori per il pacchetto GBM in particolare (n.trees, shrinkage, interaction.depth e n.minobsinnode) quando ho cercato online ho scoperto che il pacchetto CARET su R può trovare tali parametri. Tuttavia, ho difficoltà ad usare il pacchetto Caret con il pacchetto GBM, quindi voglio solo sapere come usare il punto di inserimento per trovare le combinazioni ottimali dei parametri menzionati in precedenza? So che questa potrebbe sembrare una domanda molto tipica, ma ho letto il manuale del caret e ho ancora difficoltà nell'integrare il caret con gbm, specialmente perché sono molto nuovo ad entrambi questi pacchettiutilizzando il pacchetto di omissione per trovare i parametri ottimali di GBM

risposta

13

Questo link ha un esempio concreto (pagina 10) - http://www.jstatsoft.org/v28/i05/paper

Fondamentalmente, è necessario innanzitutto creare una griglia di valori candidati per i parametri iper (come n.trees, interaction.depth e shrinkage). Quindi chiama la funzione generica del treno come al solito.

13

Non so se hai trovato quello che cercavi, ma trovo che alcuni di questi fogli siano meno utili.

Se si utilizza il pacchetto di accento circonflesso, il seguente descrive i parametri richiesti:> getModelInfo() $ GBM $ Parametri

Si sono alcune regole pratiche per GBM esecuzione:

  1. L'interazione. la profondità è 1, e nella maggior parte dei set di dati che sembra pari a , ma su alcuni ho riscontrato che testare i risultati con i multipli dispari ha dato risultati migliori. Il valore massimo I visto per questo parametro è floor (sqrt (NCOL (training))).
  2. Restringimento: minore è il numero, migliore è il valore predittivo, maggiore è il numero di alberi richiesti e maggiore è il costo computazionale. Test i valori su un piccolo sottoinsieme di dati con qualcosa come il restringimento = restringimento = seq (.0005, .05, .0005) possono essere utili nella definizione del valore ideale .
  3. n.minobsinnode: il valore predefinito è 10 e in genere non lo faccio. Ho provato c (5,10,15,20) su insiemi di dati di piccole dimensioni, e in realtà non ho visto un ritorno adeguato per il costo computazionale.
  4. n.trees: minore è il restringimento, più alberi si dovrebbero avere. Inizia con n.trees = (0:50) * 50 e regola di conseguenza.

Esempio di configurazione utilizzando il pacchetto di accento circonflesso:

getModelInfo()$gbm$parameters 
library(parallel) 
library(doMC) 
registerDoMC(cores = 20) 
# Max shrinkage for gbm 
nl = nrow(training) 
max(0.01, 0.1*min(1, nl/10000)) 
# Max Value for interaction.depth 
floor(sqrt(NCOL(training))) 
gbmGrid <- expand.grid(interaction.depth = c(1, 3, 6, 9, 10), 
        n.trees = (0:50)*50, 
        shrinkage = seq(.0005, .05,.0005), 
        n.minobsinnode = 10) # you can also put something  like c(5, 10, 15, 20) 

fitControl <- trainControl(method = "repeatedcv", 
         repeats = 5, 
         preProcOptions = list(thresh = 0.95), 
         ## Estimate class probabilities 
         classProbs = TRUE, 
         ## Evaluate performance using 
         ## the following function 
         summaryFunction = twoClassSummary) 

# Method + Date + distribution 
set.seed(1) 
system.time(GBM0604ada <- train(Outcome ~ ., data = training, 
      distribution = "adaboost", 
      method = "gbm", bag.fraction = 0.5, 
      nTrain = round(nrow(training) *.75), 
      trControl = fitControl, 
      verbose = TRUE, 
      tuneGrid = gbmGrid, 
      ## Specify which metric to optimize 
      metric = "ROC")) 

le cose possono cambiare a seconda dei dati (come la distribuzione), ma ho trovato l'essere chiave per giocare con gbmgrid fino ad ottenere il risultato si è cercando. Le impostazioni così come sono ora richiederebbero molto tempo per essere eseguite, quindi modificare come la macchina e il tempo lo consentirà. Per darti un campo di calcolo, corro su un Mac PRO 12 core con 64 GB di RAM.