L'ingegnerizzazione delle funzionalità è ancora utile quando si utilizza XGBoost?


9

Stavo leggendo il materiale relativo a XGBoost. Sembra che questo metodo non richieda alcun ridimensionamento variabile poiché si basa su alberi e questo può catturare interazioni complesse con schemi di non linearità. E può gestire variabili sia numeriche sia categoriche e sembra anche che le variabili ridondanti non influiscano troppo su questo metodo.

Di solito, nella modellazione predittiva, è possibile effettuare una selezione tra tutte le funzionalità disponibili e è anche possibile creare alcune nuove funzionalità dall'insieme di funzionalità disponibili. Quindi selezionare un sottoinsieme di funzionalità significa che pensi che ci sia una ridondanza nel tuo set di funzionalità; la creazione di alcune nuove funzionalità dall'attuale set di funzionalità significa che è necessario apportare alcune trasformazioni funzionali alle funzionalità correnti. Quindi, entrambi questi due punti dovrebbero essere trattati in XGBoost. Quindi, significa che per usare XGBoost, devi solo scegliere saggiamente quei parametri di sintonizzazione? Qual è il valore di fare ingegneria delle funzionalità usando XGBoost?


Se cerchi piccoli miglioramenti nelle prestazioni, è meglio modellare esplicitamente le interazioni tra le funzionalità perché gli alberi non sono bravi a farlo: stats.stackexchange.com/questions/147594/…
Anton Tarasenko

Risposte:


12

Definiamo la prima caratteristica ingegneristica:

  1. Selezione delle funzionalità
  2. Estrazione delle caratteristiche
  3. Aggiunta di funzionalità tramite competenze di dominio

XGBoost fa (1) per te. XGBoost non fa (2) / (3) per te.

Quindi devi ancora fare ingegneria delle funzionalità da solo. Solo un modello di apprendimento approfondito potrebbe sostituire l'estrazione delle funzionalità per te.


7
  1. Selezione funzionalità: XGBoost esegue la selezione funzionalità fino a un livello. Nella mia esperienza, faccio sempre la selezione delle funzionalità tramite un giro di xgboost con parametri diversi da quelli che uso per il modello finale. In genere utilizzo numeri bassi per il campionamento di righe e feature e alberi non profondi e mantengo solo le feature che entrano nel modello. Quindi sintonizzati con un altro modello. Ciò mi ha impedito un eccesso di adattamento quando il numero di funzioni era molto elevato.
  2. Generazione di funzionalità: XGBoost (classificazione, booster = gbtree) utilizza metodi basati su alberi. Ciò significa che il modello avrebbe difficoltà a scegliere relazioni come ab , a / b e a + b per le caratteristiche a e b . Di solito aggiungo l'interazione tra le funzionalità a mano o seleziono quelle giuste con alcune euristiche. A seconda dell'applicazione, questo può davvero migliorare le prestazioni.

2

Qual è il valore di fare ingegneria delle funzionalità usando XGBoost?

Prestazioni forse?

(Nota che non usiamo XGBoost, ma un'altra libreria di potenziamento del gradiente, anche se le prestazioni di XGBoost probabilmente dipendono anche dalla dimensionalità dei dati in qualche modo.)

Abbiamo un set di dati in cui ogni elemento è composto da 3 segnali, ciascuno lungo 6000 campioni, ovvero 18k caratteristiche. L'utilizzo diretto di queste funzionalità richiede anni (giorni), quindi abbiamo svolto un po 'di ingegnerizzazione manuale delle funzionalità per ridurre il numero di funzionalità a circa 200. Ora la formazione (inclusa la regolazione dei parametri) è questione di poche ore.

Per fare un confronto: poco tempo fa abbiamo anche iniziato a formare ConvNets con gli stessi dati e le funzionalità complete di 18k (nessuna ingegneria di funzionalità). Raggiungono la stessa precisione dei modelli di aumento gradiente dopo solo circa 2 ore di allenamento.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.