Ho un set di dati composto da 20 funzioni e circa 300.000 osservazioni. Sto usando il caret per addestrare il modello con doParallel e quattro core. Anche la formazione sul 10% dei miei dati richiede ben più di otto ore per i metodi che ho provato (rf, nnet, adabag, svmPoly). Sto ricampionando con bootstrap 3 volte e il mio tuneLength è 5. C'è qualcosa che posso fare per accelerare questo processo agonizzante lento? Qualcuno ha suggerito di usare la libreria sottostante per velocizzare il mio processo fino a 10 volte, ma prima di intraprendere questa strada mi piacerebbe assicurarmi che non ci siano altre alternative.Miglioramento della velocità di addestramento del modello nel punto di inserimento (R)
risposta
phiver
colpisce il chiodo sulla testa, ma, per questa situazione, ci sono alcune cose da suggerire:
- fare in modo che non si è estenuante memoria di sistema utilizzando l'elaborazione parallela. Stai facendo X copie extra dei dati in memoria quando si utilizza X lavoratori.
- con uno squilibrio di classe, additional sampling può aiutare. Il downsampling potrebbe aiutare a migliorare le prestazioni e impiegare meno tempo.
- utilizza librerie diverse. ranger anziché randomForest, xgboost o C5.0 anziché gbm. Dovresti capire che i metodi d'insieme si adattano a una tonnellata di modelli costitutivi e sono obbligati a prendersi un po 'di tempo per adattarsi.
- il pacchetto ha un racing-type algorithm per i parametri di regolazione in minor tempo
- la versione di sviluppo su github ha metodi di ricerca casuali per i modelli con molti parametri di ottimizzazione.
Max
Ciò che le persone dimenticano quando si confronta il modello sottostante con l'uso del caret è che il caret ha un sacco di cose extra in corso.
Prendi ad esempio la tua foresta casuale. quindi bootstrap, numero 3 e tuneLength 5. Così ricampionate 3 volte e, a causa della tuneLength, provate a trovare un buon valore per mtry. In totale, esegui 15 foreste casuali e confrontale per ottenere il migliore per il modello finale, rispetto a solo 1 se utilizzi il modello di foresta casuale di base.
Inoltre, si sta eseguendo il parallelismo su 4 core e randomforest richiede tutte le osservazioni disponibili, quindi tutte le osservazioni di allenamento saranno 4 volte in memoria. Probabilmente non è rimasto molto spazio per la formazione del modello.
Il mio consiglio è di iniziare il ridimensionamento per vedere se è possibile velocizzare le cose, come impostare il numero di bootstrap su 1 e sintonizzare la lunghezza sul valore predefinito 3. O anche impostare il metodo di traincontrollo su "none", solo per ottenere un'idea su quanto è veloce il modello sulle impostazioni minime e nessun ricampionamento.
Quali accorgimenti "extra" sono in corso rispetto agli altri metodi? – user1603472
Grandi ingressi di @phiver e @topepo. Cercherò di riassumere e aggiungere alcuni punti che ho raccolto da quel po 'di messaggi SO ricerca che ho fatto per un problema simile:
- Sì, l'elaborazione parallela richiede più tempo, con la memoria minore. Con 8 core e 64 GB di RAM, una regola empirica potrebbe essere quella di utilizzare al massimo 5-6 dipendenti.
- La pagina di @ topepo sulla preelaborazione del caret here è fantastica. È istruttivo a livello di passo e aiuta a sostituire il lavoro manuale di pre-elaborazione come le variabili dummy, rimuovendo le variabili di combinazione multi-collineare/lineari e la trasformazione.
- Uno dei motivi per cui i modelli randomForest e altri diventano molto lenti è a causa del numero di fattori nelle variabili categoriali. Si consiglia o di club i fattori o convertire in trasformazione ordinale/numerica, se possibile.
- Provate a utilizzare la funzione Tunegrid nel caret al massimo per i modelli di ensemble. Inizia con meno valori di mtry/ntree per un campione di dati e vedi come funziona in termini di miglioramento nel miglioramento della precisione.
- Ho scoperto che la pagina SO this è molto utile in caso di suggerimento di parRF. Non ho migliorato molto il mio set di dati sostituendo RF con parRF ma puoi provare. Gli altri suggerimenti sono di usare data.table invece di dataframes e usare dati di predittore/risposta invece di formula. Migliora notevolmente la velocità, credetemi (ma c'è un avvertimento, la prestazione dei dati di predittore/risposta (fornendo x = X, y = Y data.tables) sembra anche in qualche modo migliorare l'accuratezza predittiva in qualche modo e cambiare la tabella di importanza variabile da break-up dei fattori durante l'uso della formula (Y ~.)
- 1. miglioramento della velocità dell'importazione del modulo Python
- 2. Inserimento del punto di inserimento dopo un nodo inserito
- 3. Algoritmo di auto-addestramento
- 4. Impossibile trovare il punto di inserimento della procedura __gxx_personality_sj0 in ...
- 5. Velocità di rendering modello Django
- 6. Miglioramento della visualizzazione del testo ruotato
- 7. Utilizzo di punto/punto nelle funzioni R
- 8. aggiungi traccia/punto di interruzione già nel browser di R
- 9. JavaScript: controllo del punto di inserimento per document.write
- 10. Come ottengo la posizione attuale del punto di inserimento?
- 11. NSpoint dal punto di inserimento NSTextView
- 12. personalizzati punto di inserimento per NSTextView
- 13. Miglioramento dell'analisi del codice
- 14. ottenere ultimo carattere prima della posizione del punto di inserimento in javascript
- 15. comprensione della funzione minbucket nel modello CART utilizzando R
- 16. perl di debug miglioramento
- 17. Interruzione di riga nel comportamento della legenda del diagramma R
- 18. sovrascrive le impostazioni della velocità del mouse. Creazione del mio algoritmo di velocità del mouse
- 19. Passaggio della variabile nel modello di ramoscello incluso con variabile nel nome del modello
- 20. IDispatchMessageInspector: miglioramento della funzionalità BeforeSendReply
- 21. Miglioramento della qualità del rendering del testo in C# winform
- 22. Inserimento di un pannello nel sistema di rete del bootstrap
- 23. differenza di velocità nel fare una tabella
- 24. Miglioramento dell'algoritmo di risoluzione del campo minato
- 25. modello velocità e javascript
- 26. Inserimento del logo nella presentazione del proiettore utilizzando R Markdown
- 27. Punto nel nome del file?
- 28. Come impostare un punto di interruzione nel corpo della funzione in R-studio?
- 29. Precisione del punto di confronto del punto di panda e del punto di virgola mobile
- 30. Lavori paralleli utilizzando un makefile generato da CMake (nessun miglioramento della velocità)
Per chiedere l'ovvio: sarebbe possibile lavorare con un sottoinsieme delle osservazioni 300K? Si potrebbe dimostrare che un sottoinsieme di 30K si comporta allo stesso modo come il set completo da 300 K. –
Ciao Tim, scusate se non ero chiaro, 8 ore erano per l'allenamento di 30k osservazioni (10%). L'allenamento dell'1% richiede un tempo ragionevole, ma non è molto predittivo. domanda per te: il mio risultato è un fattore binario ("Sì"/"No") ma "Sì" si verifica solo in circa il 20% del mio set di dati totale. Pensi che fornire un set di prova con una divisione più omogenea (ad esempio 50/50 'Sì'/'No') potrebbe permettermi di allenarmi su un campione più piccolo? –
È davvero così lento su 30k x 20? Questo è davvero sorprendente. Quanta RAM stai lavorando? – devmacrile