Frage

Ich versuche, die GB -Methode (Gradient Boosting) vollständig zu verstehen. Ich habe einige Wiki-Seiten und -Papiere darüber gelesen, aber es würde mir wirklich helfen, ein ganz einfaches Beispiel zu sehen, das Schritt für Schritt durchgeführt hat. Kann jemand mir einen bereitstellen oder mir einen Link zu einem solchen Beispiel geben? Ein einfacher Quellcode ohne schwierige Optimierungen entsprechen auch meinen Anforderungen.

War es hilfreich?

Lösung

Ich habe versucht, das folgende einfache Beispiel zu konstruieren (hauptsächlich für mein Selbstverständnis), von dem ich hoffe, dass er für Sie nützlich sein könnte. Wenn jemand anderes einen Fehler bemerkt, lassen Sie es mich bitte wissen. Dies basiert irgendwie auf der folgenden netten Erklärung des Gradientenverbots http://blog.kaggle.com/2017/01/23/a-kaggle-master-explain-gradient-boosting/

Das Beispiel zielt darauf ab, das Gehalt pro Monat (in Dollar) vorherzusagen, je nachdem, ob die Beobachtung ein eigenes Haus, ein eigenes Auto und eine eigene Familie/Kinder hat oder nicht. Angenommen, wir haben einen Datensatz von drei Beobachtungen, bei denen die erste Variable "eigenes Haus haben", das zweite "eigenes Auto" und die dritte Variable "Familie/Kinder" und das Ziel "Gehalt pro Monat" ist. Die Beobachtungen sind

1.- (Ja, ja, ja, 10000)

2 .- (Nein, nein, nein, 25)

3. .- (Ja, nein, nein, 5000)

Wähle eine Nummer $ M $ von steigender Phasen, sagen wir $ M = 1 $. Der erste Schritt des Gradienten -Boosting -Algorithmus besteht darin, mit einem ersten Modell zu beginnen $ F_ {0} $. Dieses Modell ist eine Konstante durch $ mathrm {arg min} _ { gamma} sum_ {i = 1}^3l (y_ {i}, gamma) $ in unserem Fall wo $ L $ ist die Verlustfunktion. Angenommen, wir arbeiten mit der üblichen Verlustfunktion zusammen $ L (y_ {i}, gamma) = frac {1} {2} (y_ {i}- gamma)^{2} $. Wenn dies der Fall ist, entspricht diese Konstante dem Mittelwert der Ausgänge $ y_ {i} $, Also in unserem Fall $ frac {10000+25+5000} {3} = 5008,3 $. Unser ursprüngliches Modell ist also $ F_ {0} (x) = 5008,3 $ (die jede Beobachtung ordnet $ x $ (zB (nein, ja, nein)) bis 5008,3.

Als nächstes sollten wir einen neuen Datensatz erstellen, der der vorherige Datensatz ist, aber anstelle von $ y_ {i} $ Wir nehmen die Residuen $ r_ {i0} =- frac { partial {l (y_ {i}, f_ {0} (x_ {i})}} { partial {f_ {0} (x_ {i})}}} $. In unserem Fall haben wir $ r_ {i0} = y_ {i} -f_ {0} (x_ {i}) = y_ {i} -5008.3 $. Also wird unser Datensatz

1.- (Ja, ja, ja, 4991.6)

2 .- (Nein, nein, nein, -4983.3)

3 .- (Ja, nein, nein, -8,3)

Der nächste Schritt besteht darin, einen Basislernenden anzupassen $ H $ zu diesem neuen Datensatz. Normalerweise ist der Basislernende ein Entscheidungsbaum, also verwenden wir dies.

Nehmen Sie nun an, dass wir den folgenden Entscheidungsbaum konstruiert haben $ H $. Ich habe diesen Baum mit Entropie- und Informationsgewinnformeln konstruiert, aber wahrscheinlich habe ich einen Fehler gemacht, aber für unsere Zwecke können wir davon ausgehen, dass er richtig ist. Für ein detaillierteres Beispiel überprüfen Sie bitte

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

Der konstruierte Baum ist:

enter image description here

Nennen wir diesen Entscheidungsbaum $ H_ {0} $. Der nächste Schritt besteht darin, eine Konstante zu finden $ lambda_ {0} = mathrm {arg ; min} _ { lambda} sum_ {i = 1}^{3} l (y_ {i}, f_ {0} (x_ {i})+ lambda {h_ {0} (x_ {i})}) $. Deshalb wollen wir eine Konstante $ lambda $ Minimierung

$ C = frac {1} {2} (10000- (5008.3+ lambda*{4991.6})^{2}+ frac {1} {2} (25- (5008.3+ lambda (-4983.3)) ))^{2}+ frac {1} {2} (5000- (5008.3+ lambda (-8.3))^{2} $.

Hier ist der Gradientenabstieg nützlich.

Angenommen, wir beginnen bei $ P_ {0} = 0 $. Wählen Sie die Lernrate gleich gleich $ eta = 0,01 $. Wir haben

$ frac { partial {c}} { partial { lambda}} = (10000- (5008.3+ lambda*4991.6)) (-4991.6)+(25- (5008.3+ lambda (-4983.3)))) *4983.3+(5000- (5008,3+ lambda (-8,3)))*8.3 $.

Dann unser nächster Wert $ P_ {1} $ wird gegeben von $P_{1}=0-eta{frac{partial{C}}{partial{lambda}}(0)}=0-.01(-4991.6*4991.7+4983.4*(-4983.3)+ (-8,3)*8.3) $.

Wiederholen Sie diesen Schritt $ N $ Zeiten und nehmen an, dass der letzte Wert ist $ P_ {n} $. Wenn $ N $ ist ausreichend groß und $ eta $ ist dann ausreichend klein $ lambda: = p_ {n} $ sollte der Wert sein, bei dem $ sum_ {i = 1}^{3} l (y_ {i}, f_ {0} (x_ {i})+ lambda {h_ {0} (x_ {i})}) $ ist minimiert. Wenn dies der Fall ist, dann unsere $ lambda_ {0} $ wird gleich sein $ P_ {n} $. Nehmen wir das an, dies nehme an, das $ P_ {n} = 0,5 $ (so dass $ sum_ {i = 1}^{3} l (y_ {i}, f_ {0} (x_ {i})+ lambda {h_ {0} (x_ {i})}) $ ist minimiert bei $ lambda: = 0,5 $). Deswegen, $ lambda_ {0} = 0,5 $.

Der nächste Schritt besteht darin, unser ursprüngliches Modell zu aktualisieren $ F_ {0} $ durch $ F_ {1} (x): = f_ {0} (x)+ lambda_ {0} h_ {0} (x) $. Da unsere Anzahl an Boosting -Stufen nur eins ist, dann ist dies unser endgültiges Modell $ F_ {1} $.

Nehmen wir nun an, ich möchte eine neue Beobachtung vorhersagen $ x = $(Ja, ja, nein) (also hat diese Person ein eigenes Haus und ein eigenes Auto, aber keine Kinder). Was ist das Gehalt pro Monat dieser Person? Wir berechnen nur $ F_ {1} (x) = f_ {0} (x)+ lambda_ {0} h_ {0} (x) = 5008.3+0,5*4991.6 = 7504.1 $. Diese Person verdient laut unserem Modell 7504,1 USD pro Monat.

Andere Tipps

Wie es heißt, ist die folgende Präsentation eine "sanfte" Einführung in die Gradientenverstärkung. Ich fand es sehr hilfreich, als ich den Gradient -Boosting herausfand. Es gibt ein vollständig erklärtes Beispiel.

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

Dies ist das Repository, in dem sich das Xgboost -Paket befindet. Das ist, wo die XGBOOST -Bibliothek für große Sprachen wie Julia, Java, R usw. gegabelt wird.

Dies ist die Python -Implementierung.

Wenn Sie durch den Quellcode gehen (wie im "Wie man beitragen" angewiesen wird), würde Ihnen die Intuition dahinter verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top