Domanda

Sto cercando di comprendere appieno il gradiente aumentando il metodo (GB). Ho letto alcune pagine wiki e documenti su di esso, ma sarebbe davvero aiutare me vedere un esempio completo semplice effettuata step-by-step. Qualcuno può fornire uno per me, o darmi un link ad un esempio? codice sorgente semplice senza ottimizzazioni difficili anche soddisfare le mie esigenze.

È stato utile?

Soluzione

Ho cercato di costruire il seguente esempio semplice (per lo più per la mia comprensione di sé), che spero possa essere utile per voi. Se qualcun altro si accorge ogni errore per favore fatemelo sapere. Questo è in qualche modo basato sulla seguente bella spiegazione di gradiente incrementare http://blog.kaggle.com/2017/01/23/a-kaggle-master-explains-gradient-boosting/

L'esempio si propone di prevedere stipendio al mese (in dollari) sulla base o meno l'osservazione ha propria casa, propria auto e familiari propri / bambini. Supponiamo di avere un set di dati di tre osservazioni in cui la prima variabile è 'avere casa propria', il secondo è 'avere propria auto' e la terza variabile è 'avere famiglia / figli', e l'obiettivo è 'di stipendio al mese'. Le osservazioni sono

1.- (sì, sì, sì, 10000)

2 .- (No, No, No, 25)

3 .- (Sì, No, No, 5000)

Scegliere un numero $ M $ di stadi d'amplificazione, dice $ M = 1 $ . Il primo passo del gradiente di incrementare l'algoritmo è quello di iniziare con un modello iniziale $ F_ {0} $ . Questo modello è una costante definita da $ \ mathrm {arg min} _ {\ gamma} \ sum_ {i = 1} ^ 3L (y_ {i}, \ gamma) $ nel nostro caso, in cui $ L $ è la funzione di perdita. Supponiamo che stiamo lavorando con la solita funzione di perdita $ L (y_ {i}, \ gamma) = \ frac {1} {2} (y_ {i} - \ gamma) ^ {2} $ . Quando questo è il caso, questa costante è pari alla media delle uscite $ y_ {i} $ , quindi nel nostro caso $ \ frac {10000 + 25 + 5000} {3} = 5008,3 $ . Quindi, il nostro modello iniziale è $ F_ {0} (x) = 5008,3 $ (che associa ogni osservazione $ x $ (ad esempio, (No, Si, No)) a 5.008,3.

Poi si deve creare un nuovo set di dati, che è il set di dati precedente, ma invece di $ y_ {i} $ prendiamo i residui $ r_ {I0} = - \ frac {\ partial {L (y_ {i}, F_ {0} (x_ {i}))}} {\ partial {F_ {0} (x_ {i}) }} $ . Nel nostro caso, abbiamo $ r_ {I0} = y_ {i} -F_ {0} (x_ {i}) = {i} y_ -5.008,3 $ . Così il nostro set di dati diventa

1.- (sì, sì, sì, 4991,6)

2 .- (No, No, No, -4.983,3)

3 .- (Sì, No, No, -8.3)

Il passo successivo è quello di adattare uno studente di base $ h $ a questo nuovo set di dati. Di solito lo studente base è un albero di decisione, in modo da utilizzare questo.

Ora supponiamo che abbiamo costruito il seguente albero decisionale $ h $ . Ho costruito questo albero utilizzando formule entropia e ottenere informazioni, ma probabilmente ho fatto qualche errore, ma per i nostri scopi possiamo supporre che sia corretta. Per un esempio più dettagliato, si prega di controllare

https://www.saedsayad.com/decision_tree.htm

L'albero costruito è:

entrare descrizione dell'immagine qui

chiamata di lasciare che questo albero decisionale $ h_ {0} $ . Il passo successivo è quello di trovare un costante $ \ lambda_ {0} = \ mathrm {arg \; min} _ {\ lambda} \ sum_ {i = 1} ^ {3} L (y_ {i}, F_ {0} (x_ {i}) + \ lambda {h_ {0} (x_ {i})}) $ . Pertanto, vogliamo un costante $ \ lambda $ minimizzazione

$ C = \ frac {1} {2} (10000- (5008.3+ \ lambda * {4991,6})) ^ {2} + \ frac {1} {2 } (25- (5008.3+ \ lambda (-4.983,3))) ^ {2} + \ frac {1} {2} (5000- (5008.3+ \ lambda (-8,3))) ^ {2} $ .

Questo è dove discesa del gradiente viene in aiuto.

Supponiamo che iniziamo a $ P_ {0} = 0 $ . Scegli l'apprendimentotasso pari al $ \ eta = 0,01 $ . Abbiamo

$ \ frac {\ partial {C}} {\ partial {\ lambda}} = (10000- (5008.3+ \ lambda * 4.991,6)) (- 4.991,6) + ( 25- (5008.3+ \ lambda (-4983,3))) * 4983.3+ (5000- (5008.3+ \ lambda (-8,3))) * 8.3 $ .

Poi il nostro valore prossimo $ P_ {1} $ è dato da $ P_ {1} = 0- \ eta {\ frac {\ partial {C}} {\ partial {\ lambda}} (0)} = 0-0,01 (-4.991,6 * 4.991,7 4.983,4 + * (- 4.983,3) + (- 8,3) * 8.3) $ .

Ripetere questo passaggio $ N $ volte, e supponiamo che l'ultimo valore è $ P_ {N} $ . Se $ N $ è sufficientemente ampio e $ \ eta $ è sufficientemente piccola, allora $ \ lambda: = P_ {N} $ dovrebbe essere il valore in cui $ \ sum_ {i = 1} ^ {3} L (y_ {i }, F_ {0} (x_ {i}) + \ lambda {h_ {0} (x_ {i})}) $ è ridotto al minimo. Se questo è il caso, allora il nostro $ \ lambda_ {0} $ sarà uguale a $ P_ {N} $ . Solo per il gusto di farlo, supponiamo che $ P_ {N} = 0,5 $ (in modo che $ \ sum_ {i = 1} ^ {3} L (y_ {i}, F_ {0} (x_ {i}) + \ lambda {h_ {0} (x_ {i})}) $ è ridotta al minimo a $ \ lambda: = 0.5 $ ). Pertanto, $ \ lambda_ {0} = 0,5 $ .

Il passo successivo è quello di aggiornare il nostro modello iniziale $ F_ {0} $ da $ F_ {1} (x ): = F_ {0} (x) + \ lambda_ {0} h_ {0} (x) $ . Dato che il nostro numero di stadi d'amplificazione è solo uno, allora questo è il nostro modello finale $ F_ {1} $ .

Ora supponiamo che io voglia prevedere una nuova osservazione $ x = $ (Sì, sì, no) (quindi questa persona non ha propria casa e auto propria, ma niente bambini). Qual è lo stipendio mensile di questa persona? Abbiamo appena calcolo $ F_ {1} (x) = F_ {0} (x) + \ lambda_ {0} h_ {0} (x) = 5008,3 + 0,5 * 4.991,6 = 7.504,1 $ . Quindi questa persona guadagna $ 7504,1 al mese secondo il nostro modello.

Altri suggerimenti

Come si dice, la seguente presentazione è un'introduzione 'dolce' per Gradiente amplificazione, ho trovato molto utile quando capire Gradient amplificazione; c'è un esempio pienamente spiegato inclusi.

http: //www.ccs. neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf

Questa è il repository in cui risiede il pacchetto xgboost. Ecco da dove la libreria xgboost per le principali lingue come Julia, Java, R, ecc sono biforcuta da.

Questa è l'implementazione di Python.

A piedi attraverso il codice sorgente (come indicato nella "Come contribuire") docs aiuterebbe a capire l'intuizione dietro di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top