top of page
Team I.A. Italia

Algoritmo gradient boosting dalla spiegazione all'implementazione in python


In questo articolo, spiegheremo la matematica alla base dell'algoritmo di gradient boosting per poi implementarlo in python su un set di dati reale.

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Che cosa è il gradient boosting ?

L'aumento del gradiente è un metodo che si distingue per la velocità e l'accuratezza di previsione, in particolare con set di dati grandi e complessi. Dalle competizioni Kaggle alle soluzioni di apprendimento automatico per le aziende, questo algoritmo ha prodotto i migliori risultati. Sappiamo già che gli errori giocano un ruolo importante in qualsiasi algoritmo di apprendimento automatico. Esistono principalmente due tipi di errore, errore di bias e errore di varianza. L'algoritmo di incremento del gradiente ci aiuta a ridurre al minimo l'errore di bias del modello


Prerequisiti :

  • Se non sai cosa è il Machine Learning, clicca qui

  • Se non conosci le principali applicazioni Machine Learning, clicca qui

  • Se non sai come scaricare e gestire le librerie, clicca qui

  • Se non sai cosa sia un Dataset, clicca qui

  • Se non conosci i principali algoritmi di Machine Learning , clicca qui

  • Se non sai perchè utilizzeremo Python , clicca qui


Prima di entrare nei dettagli di questo algoritmo, dobbiamo avere una certa conoscenza dell'algoritmo AdaBoost che è ancora una volta un metodo di potenziamento. Questo algoritmo inizia costruendo un moncone decisionale e quindi assegnando pesi uguali a tutti i punti dati. Quindi aumenta i pesi per tutti i punti che sono classificati erroneamente e abbassa il peso per quelli che sono facilmente classificabili o sono classificati correttamente. Viene creato un nuovo moncone decisionale per questi punti dati ponderati. L'idea alla base di questo è di migliorare le previsioni fatte dal primo moncone. Ho parlato di più di questo algoritmo qui.


Differenza tra gradient boosting e AdaBoost

La principale differenza tra questi due algoritmi è che il Gradient boosting ha uno stimatore di base fisso, ad esempio Decision Trees, mentre in AdaBoost possiamo cambiare lo stimatore di base in base alle nostre esigenze.


Ora possiamo partire con la spiegazione per poi arrivare all'implementazione su un set di dati. La guida sarà lunga, preparati un bel caffè .


Indice

  1. Che cosa è il Boosting ?

  2. Algoritmo di potenziamento del gradiente

  3. Gradient Boosting Regressor

  4. Esempio di aumento del gradiente

  5. Classificatore di aumento del gradiente

  6. Implementazione tramite Scikit-learn

  7. Note finali


Che cosa è il boosting ?

Durante lo studio dell'apprendimento automatico devi esserti imbattuto in questo termine chiamato Boosting. È il termine più frainteso nel campo della scienza dei dati. Il principio alla base del potenziamento degli algoritmi è che prima abbiamo costruito un modello sul set di dati di addestramento, quindi viene creato un secondo modello per correggere gli errori presenti nel primo modello. Lascia che ti spieghi cosa significa esattamente e come funziona.

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Supponiamo di avere n punti dati e 2 classi di output (0 e 1). Si desidera creare un modello per rilevare la classe dei dati del test. Ora quello che facciamo è selezionare casualmente le osservazioni dal set di dati di addestramento e inviarle al modello 1 (M1), inoltre assumiamo che inizialmente tutte le osservazioni abbiano un peso uguale, il che significa un'uguale probabilità di essere selezionate.


Ricorda che nelle tecniche di assemblaggio "i deboli " si combinano per creare un modello forte, quindi qui M1, M2, M3….Mn sono tutti " deboli " .


Poiché M1 è uno "studente debole", sicuramente classificherà erroneamente alcune delle osservazioni. Ora, prima di inviare le osservazioni a M2, ciò che facciamo è aggiornare i pesi delle osservazioni che sono classificate erroneamente. Puoi pensarlo come una borsa che inizialmente contiene 10 palline di colore diverso, ma dopo un po' di tempo un bambino tira fuori la sua palla di colore preferita e mette invece 4 palline di colore rosso all'interno della borsa. Ora fuori rotta la probabilità di selezionare una pallina rossa è maggiore. Questo stesso fenomeno si verifica nelle tecniche di Boosting, quando un'osservazione viene classificata erroneamente, il suo peso viene aggiornato e per quelle correttamente classificate, il loro peso viene diminuito. La probabilità di selezionare un'osservazione classificata in modo errato aumenta, quindi nel modello successivo vengono selezionate solo le osservazioni che sono state classificate erroneamente nel modello 1.


Allo stesso modo, accade con M2, i pesi classificati erroneamente vengono nuovamente aggiornati e quindi alimentati a M3. Questa procedura viene continuata fino a quando ea meno che gli errori non siano ridotti al minimo e il set di dati non sia previsto correttamente. Ora, quando il nuovo datapoint arriva (dati di test) passa attraverso tutti i modelli (studenti deboli) e la classe che ottiene il voto più alto è l'output per i nostri dati di test.


Che cos'è un algoritmo di aumento del gradiente?

L'idea principale alla base di questo algoritmo è quella di costruire modelli in sequenza e questi modelli successivi cercano di ridurre gli errori del modello precedente. Ma come lo facciamo? Come riduciamo l'errore? Questo viene fatto costruendo un nuovo modello sugli errori o sui residui del modello precedente.

Quando la colonna target è continua, utilizziamo Gradient Boosting Regressor mentre quando si tratta di un problema di classificazione, utilizziamo Gradient Boosting Classifier . L'unica differenza tra i due è la "funzione di perdita" . L'obiettivo qui è ridurre al minimo questa funzione di perdita aggiungendo studenti deboli utilizzando la discesa del gradiente. Dal momento che si basa sulla funzione di perdita, quindi per problemi di regressione, avremo diverse funzioni di perdita come Errore quadratico medio ( MSE ) e per la classificazione, avremo diverse, ad esempio , log-verosimiglianza .



Comprendere l'algoritmo di aumento del gradiente con l'esempio

Capiamo l'intuizione dietro l'aumento del gradiente con l'aiuto di un esempio. Qui la nostra colonna target è continua, quindi useremo Gradient Boosting Regressor.

Di seguito è riportato un esempio di un set di dati casuale in cui dobbiamo prevedere il prezzo dell'auto in base a varie caratteristiche. La colonna target è il prezzo e le altre funzionalità sono funzionalità indipendenti.



Spiegazione e implementazione Algoritmo Gradient Boosting
Spiegazione e implementazione Algoritmo Gradient Boosting

Passaggio -1 Il primo passaggio nell'aumento del gradiente consiste nel creare un modello di base per prevedere le osservazioni nel set di dati di addestramento. Per semplicità prendiamo una media della colonna target e assumiamo che sia il valore previsto come mostrato di seguito:


Spiegazione e implementazione Algoritmo Gradient Boosting
Spiegazione e implementazione Algoritmo Gradient Boosting

Perché ho detto che prendiamo la media della colonna target? Bene, c'è la matematica coinvolta dietro questo. Matematicamente il primo passo può essere scritto come:



Spiegazione e implementazione Algoritmo Gradient Boosting
Spiegazione e implementazione Algoritmo Gradient Boosting

Guardare questo può darti un mal di testa, ma non preoccuparti cercheremo di capire cosa c'è scritto qui.

  • L è la nostra funzione di perdita

  • Gamma è il nostro valore previsto

  • argmin significa che dobbiamo trovare un valore per il quale la funzione di perdita è minima.

Poiché la colonna target è continua, la nostra funzione di perdita sarà:

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python
  • Qui y è il valore osservato

  • E gamma è il valore previsto

Ora dobbiamo trovare un valore minimo di gamma tale che questa funzione di perdita sia minima. Abbiamo tutti studiato come trovare minimi e massimi. Abbiamo usato per differenziare questa funzione di perdita e poi metterla uguale a 0 giusto? Sì, faremo lo stesso qui.


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python


Vediamo come farlo con l'aiuto del nostro esempio. Ricorda che y_i è il nostro valore osservato e gamma_i è il nostro valore previsto, inserendo i valori nella formula sopra otteniamo: ( stiamo usando i valori che puoi trovare nella tabella sopra, se vuoi esercitarti prova a fare questi conti da solo, se qualcosa non ti torna scrivici nei commenti )


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Finiamo sopra una media del prezzo dell'auto osservato ed è per questo che ti ho chiesto di prendere la media della colonna target e presumere che fosse la tua prima previsione.

Quindi per gamma=14500, la funzione di perdita sarà minima, quindi questo valore diventerà la nostra previsione per il modello base .


Passaggio 2 Il passaggio successivo consiste nel calcolare gli pseudo residui che sono (valore osservato – valore previsto)


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Ancora una volta viene la domanda: perché solo osservato – previsto? Tutto è matematicamente dimostrato, da dove viene questa formula. Questo passaggio può essere scritto come:


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Qui F(x i ) è il modello precedente e m è il numero di DT realizzati.

Stiamo solo prendendo la derivata della funzione di perdita rispetto al valore previsto e abbiamo già calcolato questa derivata:

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Se vedi la formula dei residui sopra, vediamo che la derivata della funzione di perdita è moltiplicata per un segno negativo, quindi ora otteniamo:



Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Il valore previsto qui è la previsione fatta dal modello precedente. Nel nostro esempio la previsione fatta dal modello precedente (previsione del modello base iniziale) è 14500, per calcolare i residui la nostra formula diventa:



Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Nella fase successiva, costruiremo un modello su questi pseudo residui e faremo previsioni. Perché lo facciamo? Poiché vogliamo ridurre al minimo questi residui e la riduzione al minimo dei residui alla fine migliorerà l'accuratezza del nostro modello e il potere di previsione. Quindi, utilizzando il residuo come obiettivo e la funzione originale Numero del cilindro, altezza del cilindro e posizione del motore genereremo nuove previsioni. Nota che le previsioni, in questo caso, saranno i valori di errore, non i valori previsti del prezzo dell'auto poiché la nostra colonna target è ora un errore.


Diciamo che h m (x) è il nostro DT fatto su questi residui.


Passaggio 4 In questo passaggio troviamo i valori di output per ciascuna foglia del nostro albero decisionale. Ciò significa che potrebbe esserci un caso in cui 1 foglia ottiene più di 1 residuo, quindi dobbiamo trovare l'output finale di tutte le foglie. Per trovare l'output possiamo semplicemente prendere la media di tutti i numeri in una foglia, non importa se c'è solo 1 numero o più di 1.


Vediamo perché prendiamo la media di tutti i numeri. Matematicamente questo passaggio può essere rappresentato come:

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Qui h m (x i ) è il DT fatto sui residui e m è il numero di DT. Quando m=1 si parla del 1° DT e quando è “ M ” si parla dell'ultimo DT.


Il valore di output per la foglia è il valore di gamma che riduce al minimo la funzione Loss. Il lato sinistro “Gamma” è il valore di uscita di una particolare foglia. Sul lato destro [F m-1 (x i )+ƴh m (x i ))] è simile al passaggio 1 ma qui la differenza è che stiamo prendendo previsioni precedenti mentre prima non c'era alcuna previsione precedente.


Capiamolo ancora meglio con l'aiuto di un esempio. Supponiamo che questo sia il nostro albero regressore:

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Vediamo che il 1° residuo va in R 1,1 , il 2 ° e il 3 ° residuo va a R 2,1 e il 4 ° residuo va a R 3,1 . Calcoliamo l'output per la prima congedo che è R 1,1


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Quindi la foglia R 1,1 ha un valore di uscita di -2500. Ora risolviamo per R 2,1

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Quindi la foglia R 1,1 ha un valore di uscita di -2500. Ora risolviamo per R 2,1

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Prendiamo la derivata per ottenere il valore minimo di gamma per cui questa funzione è minima:


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Finiamo con la media dei residui nella foglia R 2,1 . Quindi, se otteniamo una foglia con più di 1 residuo, possiamo semplicemente trovare la media di quella foglia e quello sarà il nostro output finale.

Ora, dopo aver calcolato l'output di tutte le foglie, otteniamo:

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python


Step-5 Questo è finalmente l'ultimo passaggio in cui dobbiamo aggiornare le previsioni del modello precedente. Può essere aggiornato come:


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

dove m è il numero di alberi decisionali realizzati.

Dato che abbiamo appena iniziato a costruire il nostro modello, quindi il nostro m=1. Ora per creare un nuovo DT le nostre nuove previsioni saranno:

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Qui F m-1 (x) è la previsione del modello base (previsione precedente) poiché F 1-1=0 , F 0 è il nostro modello base, quindi la previsione precedente è 14500.

nu è il tasso di apprendimento solitamente selezionato tra 0-1 . Riduce l'effetto che ogni albero ha sulla previsione finale e questo migliora la precisione a lungo termine. Prendiamo nu=0.1 in questo esempio.

H m (x) è il DT recente fatto sui residui. Calcoliamo ora la nuova previsione:

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Supponiamo di voler trovare una previsione del nostro primo punto dati che abbia un'altezza dell'auto di 48,8. Questo punto dati passerà attraverso questo albero decisionale e l'output che ottiene verrà moltiplicato per il tasso di apprendimento e quindi aggiunto alla previsione precedente.

Ora diciamo m=2, il che significa che abbiamo costruito 2 alberi decisionali e ora vogliamo avere nuove previsioni.

Questa volta aggiungeremo la previsione precedente che è F 1 (x) al nuovo DT fatto sui residui. Itereremo attraverso questi passaggi ancora e ancora fino a quando la perdita non sarà trascurabile. Sto facendo un esempio ipotetico qui solo per farti capire come questo prevede un nuovo set di dati:



Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python


Se un nuovo punto dati dice che arriva l'altezza = 1,40, passerà attraverso tutti gli alberi e quindi fornirà la previsione. Qui abbiamo solo 2 alberi, quindi il datapoint passerà attraverso questi 2 alberi e l'output finale sarà F 2 (x) .


Che cos'è il classificatore di aumento del gradiente?

Un classificatore di aumento del gradiente viene utilizzato quando la colonna di destinazione è binaria. Tutti i passaggi spiegati nel regressore dell'aumento del gradiente vengono utilizzati qui, l'unica differenza è che cambiamo la funzione di perdita. In precedenza abbiamo utilizzato l'errore quadratico medio quando la colonna target era continua, ma questa volta utilizzeremo la probabilità logaritmica come funzione di perdita.

La funzione di perdita per il problema di classificazione è data di seguito:


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Il nostro primo passo nell'algoritmo di aumento del gradiente è stato inizializzare il modello con un valore costante, lì abbiamo usato la media della colonna di destinazione ma qui useremo log(probabilità) per ottenere quel valore costante. La domanda sorge spontanea: perché log(probabilità)?


Quando distinguiamo questa funzione di perdita, otterremo una funzione di log(probabilità) e quindi dobbiamo trovare un valore di log(probabilità) per il quale la funzione di perdita sia minima.

Confuso vero? Ok, vediamo come funziona:

Per prima cosa trasformiamo questa funzione di perdita in modo che sia una funzione di log(probabilità), ti dirò in seguito perché abbiamo fatto questa trasformazione.


Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Ora questa è la nostra funzione di perdita e dobbiamo minimizzarla, per questo prendiamo la derivata di questo per log(probabilità) e poi la mettiamo uguale a 0,

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Ecco i valori osservati

Ti starai chiedendo perché abbiamo trasformato la funzione di perdita nella funzione di log(odds). In realtà, a volte è facile usare la funzione di log(odds), ea volte è facile usare la funzione di probabilità prevista “p”.

Non è obbligatorio trasformare la funzione di perdita, l'abbiamo fatto solo per avere facili calcoli.


Quindi il valore minimo di questa funzione di perdita sarà la nostra prima previsione (previsione del modello di base)

Ora nel Gradient boosting regressor il nostro passaggio successivo è stato calcolare gli pseudo residui in cui abbiamo moltiplicato la derivata della funzione di perdita con -1 . Faremo lo stesso, ma ora la funzione di perdita è diversa e ora abbiamo a che fare con la probabilità di un risultato.

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Dopo aver trovato i residui possiamo costruire un albero decisionale con tutte le variabili indipendenti e le variabili target come "residui".

Ora, quando abbiamo il nostro primo albero decisionale, troviamo l'output finale delle foglie perché potrebbe esserci un caso in cui una foglia ottiene più di 1 residuo, quindi dobbiamo calcolare il valore di output finale. La matematica alla base di questo passaggio non rientra nell'ambito di questo articolo, quindi menzionerò la formula diretta per calcolare l'output di una foglia:

Infine, siamo pronti per ottenere nuove previsioni aggiungendo il nostro modello base con il nuovo albero che abbiamo realizzato sui residui.

Ci sono alcune varianti dell'aumento del gradiente.


Implementazione gradient boost Utilizzando scikit-learn

Per l'implementazione su un set di dati, utilizzeremo il set di dati Valutazione del reddito, che contiene informazioni sulla vita personale di un individuo e un output di 50.000 o <=50. Il set di dati può essere scaricato dalle sezione progetti, insieme al codice che troverai nell'articolo. Troverai il Link alla fine dell'articolo.

Il compito qui è classificare il reddito di un individuo, quando gli vengono forniti gli input richiesti sulla sua vita personale.

Innanzitutto, importiamo tutte le librerie richieste.

Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Qui il nostro obiettivo principale è dirti come implementarlo su Python. Ora per addestrare e testare il nostro modello, i dati devono essere divisi in dati di training e test.

Ridimensioneremo anche i dati in modo che siano compresi tra 0 e 1.

# Split dataset into test and train data
X_train, X_test, y_train, y_test = train_test_split(df.drop(‘income’, axis=1),df[‘income’], test_size=0.2)

Ora andiamo avanti con la definizione del Gradient Boosting Classifier insieme ai suoi iperparametri. Successivamente, adatteremo questo modello ai dati di addestramento.


gbc=GradientBoostingClassifier(n_estimators=500,learning_rate=0.05,random_state=100,max_features=5 )

# Fit train data to GBC

gbc.fit(X_train,y_train)

Il modello è stato addestrato e ora possiamo osservare anche i risultati.

Di seguito, puoi vedere la matrice di confusione del modello, che fornisce un rapporto sul numero di classificazioni e classificazioni errate.

print(confusion_matrix(y_test, gbc.predict(X_test)))


Il numero di classificazioni errate da parte del Gradient Boosting Classifier è 1334, rispetto alle 8302 classificazioni corrette. Il modello ha funzionato decentemente.


Verifichiamo la precisione e Controlliamo anche il rapporto di classificazione:


print("GBC accuracy is %2.2f" % accuracy_score( 
     y_test, gbc.predict(X_test)))
from sklearn.metrics import classification_report

pred=gbc.predict(X_test)

print(classification_report(y_test, pred))

La precisione è dell'86%, il che è abbastanza buono, ma può essere migliorata ottimizzando gli iperparametri o elaborando i dati per rimuovere i valori anomali.



Algoritmo gradient boosting dalla spiegazione all'implementazione in python
Algoritmo gradient boosting dalla spiegazione all'implementazione in python

Questo, tuttavia, ci fornisce l'idea di base alla base dell'aumento del gradiente e dei suoi principi di funzionamento sottostanti.



Note finali

Speriamo che tu abbia capito come funziona l'algoritmo Gradient Boosting . Abbiamo cercato di mostrarti la matematica che c'è dietro nel modo più semplice possibile.



Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online