Ottimizzazione efficiente dei parametri XGBoostCiao @russ_wolfinger ,
Ho lavorato alla creazione di modelli con XGBoost e confrontandoli con altri modelli di albero e modelli non di albero, come NN tra gli altri. Sto facendo un approccio simile a Nate e trattengo una parte del mio set di dati originale (in una tabella di dati completamente diversa) e quindi utilizzo la piattaforma di confronto dei modelli per vedere quanto bene questi modelli si confrontano tra loro con il set di dati di test.
Sto scoprendo che XGBoost non funziona bene sul set di dati di test come mi sarei aspettato. Trovo che la foresta bootstrap faccia un lavoro migliore al momento. Ho confrontato l'impostazione predefinita e ciò che segue come il miglior output da una tabella di ottimizzazione per un XGBoost ottimizzato. Potrebbe essere che non sto regolando molto bene l'adattamento, quindi mi chiedo se esista un modo più efficiente per regolare l'adattamento poiché ci sono così tanti parametri diversi che si possono modificare.
Ho esaminato gli esempi e letto la documentazione in linea a cui si fa riferimento nella guida PDF, ma non c'è molta descrizione per un aiuto pratico quando si tratta di mettere a punto il modello. Come nota, sto usando la convalida di esclusione singola e non la convalida incrociata k-fold. È meglio costruire prima un modello molto complesso che potrebbe leggermente overfit e poi potarlo indietro con gli altri parametri per renderlo più conservativo?
DS
Ri: messa a punto efficiente dei parametri XGBoostCiao @russ_wolfinger ,
Grazie per le informazioni aggiornate. Ho testato nel miglior modo possibile l'output di un albero potenziato ottimizzato e una foresta di bootstrap rispetto a XGBoost, dopo aver regolato XGBoost vicino alle altre piattaforme che potevo e gli output erano ben correlati. Non esatto, ma molto vicino!
Seguire la procedura nel link che ho pubblicato in precedenza ha davvero aiutato ad avvicinarsi a un modello più sintonizzato.
Su un paio di altre cose di feedback:
1. Di recente ho capito cosa fa "Rimuovi modelli mostrati" sotto "Confronta", che è come si dice, ma non era chiaro che se una casella fosse deselezionata, la manterrebbe. Questo è stato un modo utile per eliminare i possibili adattamenti dopo aver ordinato la tabella dei dati con la convalida R ^ 2.
2. Ho notato che quando si esegue un progetto di ottimizzazione, è importante assicurarsi che la prima colonna abbia gli stessi valori fissi delle colonne Min / Max o si trovi da qualche parte nel mezzo (se varia) affinché funzioni correttamente. Ci sono state un paio di volte in cui stavo regolando un altro valore, ad esempio min_child_weight, e avevo inserito valori fissi per le iterazioni (ad esempio Min / Max 150), ma il valore della prima colonna è stato lasciato a 100. Quando questo è il caso, mantiene le iterazioni a 100, non a 150. Penserei che se il min / max fosse impostato sugli stessi valori, la prima colonna dovrebbe estrarre quel valore e ripopolarlo come fa usando la tabella di ottimizzazione per i parametri non fissi. Nell'esempio seguente, stavo regolando max_depth e min_child_weight, ma ho avuto un paio di casi in cui ho lasciato le iterazioni a 100, anche se il min / max era impostato su 387. Ho dovuto tornare manualmente e cambiarlo in 387 per calcolare correttamente.

Grazie!,
DS
Ri: messa a punto efficiente dei parametri XGBoostCiao @DS ,
Grazie per aver continuato a perseguire questo obiettivo. Di recente ho trovato e risolto un paio di problemi con i metadati delle formule che attualmente potrebbero influenzare negativamente i risultati di XGBoost nella piattaforma Model Comparison. Questi e molti altri aggiornamenti saranno disponibili in JMP Pro 16 Early Adopter che uscirà tra un paio di mesi. Nel frattempo, potresti provare alcuni confronti di base con la piattaforma Boosted Tree direttamente nella tua tabella JMP.
I seguenti parametri vengono mappati direttamente tra Boosted Tree e XGBoost:
- Numero di strati <-> iterazioni
- Divisioni per albero <-> max_depth
- Tasso di apprendimento <-> tasso_di_apprendimento
- Divisione dimensione minima <-> min_child_weight
- Frequenza di campionamento riga <-> sottocampionamento
- Frequenza di campionamento della colonna <-> colsample_bytree
Può essere di ulteriore aiuto cambiare il parametro avanzato XGBoost grow_policy in "lossguide". Come indicato, prova ad adattare e salvare le previsioni da due modelli simili, quindi traccia le previsioni l'una rispetto all'altra. Dovrebbero essere altamente correlati.
La tabella Tuning Design in Opzioni avanzate è come hai intuito. È necessario impostare una tabella JMP separata con i nomi delle colonne che corrispondono esattamente ai nomi dei parametri XGBoost, quindi digitare manualmente il nome di questa tabella JMP nella casella dei parametri. È possibile creare la tabella da zero manualmente o fare clic con il pulsante destro del mouse nella tabella di confronto modelli> Salva come tabella dati per iniziare. Ciò consente la specifica di progetti arbitrari su tutti i parametri, ma a questo punto è stato testato solo leggermente, quindi assicurati di controllare attentamente i risultati.
Ri: messa a punto efficiente dei parametri XGBoostCiao @russ_wolfinger ,
Grazie per l'informazione. Ho trovato questo post molto utile, almeno nel passare attraverso un esempio diretto e un approccio iterativo passo-passo all'ottimizzazione di XGBoost.
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
La mia situazione particolare ha circa 3500 righe di allenamento e 1000 righe di test. Come accennato in precedenza, le mie righe di test si trovano in una tabella di dati separata che concateno al primo e quindi confronto i modelli: questo per scoprire quale modello prevede effettivamente meglio su un set di dati inutilizzato. Inoltre, ho diviso le 3500 righe di addestramento in 80/20 righe di addestramento / convalida, stratificate in base al mio output Y che sto modellando.
Lavorerò su diversi schemi di messa a punto per vedere cosa funziona meglio. Ma una cosa che vorrei fare è verificare che XGBoost possa fornirmi lo "stesso" output di, ad esempio, foresta di bootstrap. È possibile prendere i parametri dalla foresta bootstrap o dall'albero potenziato e convertirli nelle impostazioni appropriate in XGBoost? In linea di principio, XGBoost dovrebbe dare quasi lo stesso risultato, ma molto più velocemente. Ho provato a leggere alcuni post su come farlo, ma sto ancora lottando su come tradurre le impostazioni nelle altre piattaforme in XGBoost.
È possibile che la piattaforma di confronto del modello valuti il modello XGBoost in modo diverso?
Altre domande chiarificatrici:
C'è un modo per determinare il numero di alberi dalla piattaforma XGBoost? È questo il campo "iterazioni"?
Possiamo "alimentare" la piattaforma con la nostra tabella di progettazione del tuning? Sotto le Opzioni avanzate, c'è un campo con quel nome, ma è vuoto. Se abbiamo la nostra tabella di sintonizzazione, possiamo inserirne il nome lì?
Grazie,
DS
Ri: messa a punto efficiente dei parametri XGBoostCiao @DS , Grazie mille per il feedback. Esistono alcuni metodi manuali decenti per la messa a punto. Ho appena provato a cercare su Google "tuning xgboost" e i primi diversi collegamenti sembrano ragionevoli. Questi possono essere considerati un po 'più un'arte che una scienza, ma aiutano a illuminare ciò che ogni parametro sta facendo e costruire un'intuizione generale su come funziona XGBoost.
Sono curioso di conoscere la tua configurazione nel caso tu abbia la possibilità di condividerla o pubblicarla. Nei molti confronti che ho fatto così come in situazioni competitive come Kaggle ho scoperto che XGBoost ha prestazioni migliori. I guadagni in termini di prestazioni tendono a diventare più forti con l'aumentare della dimensione del set di dati.
Sembra che tu stia eseguendo una classica divisione di test di convalida di formazione. Potrebbe valere la pena eseguire questa procedura più volte con divisioni diverse per determinare la stabilità delle stime delle prestazioni.
Un vantaggio di k-fold è che si ottiene un predittore "insaccato" sugli adattamenti del modello k e quasi sempre funzionerà meglio di un singolo modello addestrato su una parte dei dati. Un approccio alternativo consiste nell'ottimizzazione con l'approccio di convalida che preferisci, quindi eseguire un adattamento finale alla fine utilizzando l'intera formazione + i dati di convalida.