[PYTHON] [Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen

Einführung

Dieses Mal werde ich die Theorie über Adaboost beim Lernen von Ensembles zusammenfassen.

In diesem Bereich gibt es viele Begriffe, daher werde ich zunächst die Begriffe erläutern, die für das Lernen von Ensembles verwendet werden.

Die Theorie von AdaBoost wird später zusammengefasst. Wenn Sie sie also schnell sehen möchten, überspringen Sie sie bitte.

Die folgenden Artikel waren beim Schreiben dieses Artikels sehr hilfreich.

Maschinelles Lernen ⑤ AdaBoost-Zusammenfassung

Detaillierte Erklärung zu Boosting und AdaBoost

Erste Mustererkennung Kapitel 11 Boosten

Ich habe Ada Boost recherchiert, also werde ich es zusammenfassen

Geben wir unser Bestes.

Was ist Ensemble-Lernen?

Ensemble-Lernen ist eine Technik, die versucht, bessere Vorhersagen zu erzielen, indem mehrere Lernmaschinen kombiniert werden.

In vielen Fällen erzielen Sie bessere Ergebnisse als bei Verwendung eines einzelnen Modells.

In Bezug auf die Kombination mehrerer Lernender wird im Fall der Klassifizierung die "Mehrheitsentscheidung" mehrerer Lernender getroffen, und im Fall der Regression wird der "Durchschnitt" mehrerer Lernender getroffen.

Häufig verwendete Techniken beim Lernen von Ensembles sind "Absacken", "Boosten", "Stapeln" und "Anstoßen".

Zufälliger Wald kann als Ensemble-Lernen bezeichnet werden, bei dem der "Entscheidungsbaum" als Lernender mit einer als Bagging bezeichneten Technik verwendet wird.

Es kamen viele Begriffe heraus und es wurde schwer zu verstehen. Ich werde jede Technik erklären.

Über das Absacken

Bagging ist eine Abkürzung für Bootstrap Aggregation.

Erstellen Sie mithilfe einer Technik namens Boost Trap mehrere Datensätze aus einem Datensatz, generieren Sie einen Lernenden für jeden duplizierten Datensatz und treffen Sie eine Mehrheitsentscheidung über die mehreren auf diese Weise erstellten Lernenden. Wenn Sie dies tun, wird die endgültige Vorhersage getroffen.

Boost Trap ist eine Methode zum Abtasten von n Daten aus einem Datensatz, die eine Duplizierung ermöglicht.

Der Datensatz sei $ S_0 = (d_1, d_2, d_3, d_4, d_5) $, und wenn n = 5 Datenstücke abgetastet werden, ist $ S_1 = (d_1, d_1, d_3, d_4, d_5) $ oder $ S_2 = Sie erstellen einen Datensatz wie (d_2, d_2, d_3, d_4, d_5) $.

Wie Sie sehen können, können Sie Boost-Traps verwenden, um viele verschiedene Datensätze aus einem Datensatz zu erstellen.

Betrachten wir den vorhergesagten Wert anhand eines konkreten Beispiels.

Generieren Sie aus dem Trainingsdatensatz N Boost-Trap-Datensätze der Größe n.

Erstellen Sie mit diesen Daten N Vorhersagemodelle und lassen Sie jeden Vorhersagewert $ y_n (X) $ sein.

Da der Durchschnitt dieser N vorhergesagten Werte der endgültige vorhergesagte Wert ist, ist der endgültige vorhergesagte Wert des Modells unter Verwendung des Absackens wie folgt.

y(X) = \frac{1}{N}\sum_{n=1}^{N}y_n(X)

Dies ist das Ende der Erklärung des Absackens. Als nächstes schauen wir uns das Boosten an.

Über das Boosten

Beim Boosten werden schwache Lernende nacheinander konstruiert, anstatt schwache Lernende unabhängig zu machen, wie beim Absacken. Zu diesem Zeitpunkt wird der k + 1. schwache Lernende basierend auf dem k-ten schwachen Lernenden konstruiert (um die Schwäche auszugleichen).

Im Gegensatz zum Absacken, bei dem schwache Lernende unabhängig voneinander generiert werden, dauert das Boosten, bei dem Sie nacheinander schwache Lernende generieren müssen, einige Zeit. Stattdessen ist das Boosten tendenziell genauer als das Absacken.

Stapeln

Für das Absacken haben wir einen einfachen Durchschnitt von N vorhergesagten Werten berücksichtigt.

Dieser Algorithmus wertet einzelne Vorhersagen gleichermaßen aus und berücksichtigt nicht die Bedeutung jedes Modells.

Durch das Stapeln werden einzelne vorhergesagte Werte entsprechend ihrer Wichtigkeit gewichtet, um den endgültigen vorhergesagten Wert zu erhalten.

Es wird durch die folgende Formel ausgedrückt.

y(X) = \sum_{n=1}^{N}W_ny_n(X)

Stoßen

Bumping ist eine Technik, um das am besten passende Modell unter mehreren Lernenden zu finden.

Generieren Sie N Modelle mit dem Boost-Trap-Datensatz, wenden Sie den damit erstellten Lernenden auf die Originaldaten an und wählen Sie das Modell mit dem kleinsten Vorhersagefehler als bestes Modell aus.

Dies mag als weniger vorteilhafte Methode erscheinen, vermeidet jedoch das Lernen mit Daten von schlechter Qualität.

Über die Theorie von Ada Boost

Lassen Sie uns nun über die Theorie von Ada Boost sprechen.

Sowohl AdaBoost als auch Gradienten-Boosting sind eine Art von Boosting. Es handelt sich also um Algorithmen, die nacheinander schwache Lernende erzeugen.

Es ist grob in die folgenden vier Merkmale unterteilt.

Auf diese Weise kann AdaBoost als ein Algorithmus bezeichnet werden, der versucht, das System durch Hervorheben falsch klassifizierter Daten zu verbessern.

Das Bild ist wie folgt.

image.png

extracted from Alexander Ihler's youtube video

Schauen wir uns nun an, wie falsch klassifizierte Daten mithilfe mathematischer Formeln tatsächlich gewichtet werden.

Ich werde es so einfach wie möglich erklären, also geben Sie bitte Ihr Bestes.

Betrachten Sie den Fall der Erzeugung von M schwachen Lernenden, um N Daten zu klassifizieren.

Die endgültige Ausgabe der starken Lernmaschine ist wie folgt.

H(x) = sign(\sum_{m=1}^{M}α_my_m(x))

Vorzeichen wird als Vorzeichenfunktion bezeichnet und gibt -1 zurück, wenn das Argument kleiner als 0 ist, und 1, wenn das Argument größer als 0 ist. $ y_m (x) $ ist der schwache Lernende und $ α_m $ ist das Gewicht jedes schwachen Lernenden.

Mit anderen Worten, der schwache Lernende wird gewichtet und summiert, und wenn die Summe größer als 0 ist, wird 1 zurückgegeben, und wenn sie kleiner als 0 ist, wird -1 zurückgegeben, was die endgültige Ausgabe ist. Nun wollen wir sehen, wie wir $ y_m (x) $ und $ α_m $ bestimmen.

Bestimmung von y und α

Da den ersten Daten gerade Gewichte gegeben werden, ist der Gewichtskoeffizient {$ W_n $} der Daten von $ n = 1,2,3, ..., N $ $ w_n ^ {(1)} = \ frac Initialisieren Sie mit {1} {N} $.

Das untere rechte von w ist die Datennummer und das obere rechte von w ist die schwache Lernmaschinennummer. Mit anderen Worten, beim ersten schwachen Lernenden beträgt das Gewicht aller Daten $ \ frac {1} {N} $.

Wiederholen Sie die folgenden Vorgänge für alle Lernmaschinen $ m = 1,2,3, ... M $.

J_m = \sum_{n=1}^{N}w_n^{(m)}I(y_m(x_n)\neq t_n)

$ w_n ^ {(m)} $ ist das Gewicht in den n-ten Daten des m-ten schwachen Lernenden.

$ I $ wird als Unterstützungsfunktion bezeichnet und gibt 1 zurück, wenn $ y_m (x_n) \ neq t_n $, dh wenn der vorhergesagte Wert und das richtige Antwortetikett in einem Daten nicht übereinstimmen, und $ y_m (x_n) = t_n $ Wenn das heißt, wenn der vorhergesagte Wert und das richtige Antwortetikett in einer bestimmten Datenübereinstimmung übereinstimmen, wird 0 zurückgegeben.

Mit anderen Worten, $ J_m $ ist die Summe der Gewichte der Datenpunkte, die in einer schwachen Lernmaschine $ m $ einen Vorhersagefehler verursacht haben.

\epsilon_m = \frac{\sum_{n=1}^{N}w_n^{(m)}I(y_m(x_n)\neq t_n)}{\sum_{n=1}^{N}w_n^(m)}
\alpha_m = ln \bigl(\frac{1-\epsilon_m}{\epsilon_m} \bigr)

Der Nenner von $ \ epsilon_m $ ist die Summe der Gewichte der Daten im schwachen Lernenden $ m $, und das Molekül ist die Summe der Gewichte der falsch vorhergesagten Datenpunkte im schwachen Lernenden $ m $.

Mit anderen Worten kann $ \ epsilon_m $ als die als Gewicht ausgedrückte Fehlerrate bezeichnet werden.

Es ist unten dargestellt.

image.png Die folgende Formel war die endgültige Ausgabe.

H(x) = sign(\sum_{m=1}^{M}α_my_m(x))

Mit anderen Worten, das Gewicht des Lernenden mit einer hohen Fehlerrate ($ \ epsilon_m $ ist groß) $ \ alpha_m $ ist negativ, und das Gewicht des Lernenden mit einer niedrigen Fehlerrate ($ \ epsilon_m $ ist klein) ist positiv und wird addiert. Wenn ein positiver Wert ist, ist $ H (x) = 1 $, und wenn die Summe ein negativer Wert ist, ist $ H (x) = 0 $ die endgültige Ausgabe.

Aktualisieren Sie das Gewicht des Datenpunkts mit der folgenden Formel.

w_n^{(m + 1)} = w_n^{(m)}exp \bigl(\alpha_mI(y_m(x) \neq t_n) \bigr)

Wenn der vorhergesagte Wert der $ n $ -ten Daten im schwachen Lernenden $ m $ mit dem richtigen Antwortetikett übereinstimmt, werden die Daten nicht aktualisiert, und nur wenn der vorhergesagte Wert und das richtige Antwortetikett unterschiedlich sind, $ exp (\ alpha_m) $ Multiplizieren Sie, um das Gewicht zu aktualisieren.

Die Beziehung zwischen $ \ alpha $ und $ exp (\ alpha_m) $ ist unten dargestellt.

image.png

Auf einer Lernmaschine mit einer hohen Fehlerrate $ \ epsilon_m $ ist $ \ alpha_m $ kleiner, sodass $ w ^ {(m + 1)} $ kleiner ist.

Bei einem Lernenden mit einer niedrigen Fehlerrate von $ \ epsilon_m $, dh einem genauen Lernenden, ist $ \ alpha_m $ groß, sodass $ w ^ {(m + 1)} $ groß ist.

Mit anderen Worten, zusammenfassend wird in einer genauen Lernmaschine das Gewicht der falschen Daten erhöht und an die nächste Lernmaschine übergeben, und in einer ungenauen Lernmaschine wird das Gewicht der falschen Daten verringert und die nächste Lernmaschine verwendet. Wird an weitergegeben.

Das Obige ist die Theorie von Ada Boost.

Am Ende

Vielen Dank, dass Sie so weit gelesen haben.

Wenn Sie Lust dazu haben, möchte ich die Implementierung zusammenfassen.

Recommended Posts

[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, Othello AI mit Tensorflow zu machen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Einführung ~
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Implementierung ~
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Battle Edition ~
Ich habe versucht, den Befehl umask zusammenzufassen
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, die häufig verwendete Implementierungsmethode von pytest-mock zusammenzufassen
Ich habe versucht, die Yin- und Yang-Klassifikation hololiver Mitglieder durch maschinelles Lernen zu überprüfen
Ich habe versucht, die Trapezform des Bildes zu korrigieren
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, die Vorhersage-API des maschinellen Lernmodells von WordPress aus aufzurufen
Ich habe versucht, die logische Denkweise über Objektorientierung zusammenzufassen.
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Ich habe versucht, es sorgfältig zu verstehen, während ich den Algorithmus Adaboost beim maschinellen Lernen implementiert habe (+ ich habe mein Verständnis der Array-Berechnung vertieft)
Ich habe versucht, SparseMatrix zusammenzufassen
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Ich habe versucht, das Bild zu verarbeiten und zu transformieren und die Daten für maschinelles Lernen zu erweitern
Ich habe die Größenänderung von TensorFlow nicht verstanden und sie daher visuell zusammengefasst.
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
[Erste COTOHA-API] Ich habe versucht, die alte Geschichte zusammenzufassen
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe maschinelles Lernen mit liblinear versucht
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
Ich habe versucht, durch maschinelles Lernen Sätze in den XX-Stil umzuwandeln
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Ich habe versucht, die im Geschäftsleben häufig verwendeten Befehle zusammenzufassen
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (erste Hälfte).
Ich habe versucht, das lokale Minimum der Goldstein-Preis-Funktion zu bekämpfen
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht zusammenzufassen, wie das EPEL-Repository erneut verwendet wird
Passende App Ich habe versucht, Statistiken über starke Leute zu erstellen und ein Modell für maschinelles Lernen zu erstellen
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
Ich habe versucht, die Befehle zusammenzufassen, die Anfängeringenieure heute verwenden
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
[Maschinelles Lernen] Ich habe versucht, so etwas wie Bilder weiterzugeben
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, den allgemeinen Zustand der VTuber-Kanalbetrachter zu visualisieren
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen