
Hallo Khabrozhiteli, wir haben der Druckerei ein neues Buch
„Maschinelles Lernen: Algorithmen für Unternehmen“ übergeben . Hier ist ein Auszug über Ensemble-Methoden. Sie sollen erklären, was sie effektiv macht und wie häufige Fehler vermieden werden können, die zu ihrem Missbrauch im Finanzbereich führen.
6.2. Drei Fehlerquellen
MO-Modelle leiden normalerweise unter drei
Fehlern .
1. Bias: Dieser Fehler wird durch unrealistische Annahmen verursacht. Wenn die Verzerrung hoch ist, bedeutet dies, dass der MO-Algorithmus die wichtigen Beziehungen zwischen den Merkmalen und Ergebnissen nicht erkennen konnte. In dieser Situation wird gesagt, dass der Algorithmus "nicht genehmigt" ist.
2. Dispersion: Dieser Fehler wird durch die Empfindlichkeit gegenüber kleinen Änderungen in der Trainingsuntermenge verursacht. Wenn die Varianz hoch ist, bedeutet dies, dass der Algorithmus neu auf die Trainingsuntermenge ausgerichtet wird und daher selbst minimale Änderungen in der Trainingsuntermenge schrecklich unterschiedliche Vorhersagen erzeugen können. Anstatt allgemeine Muster in einer Trainingsuntermenge zu modellieren, nimmt der Algorithmus fälschlicherweise Rauschen für das Signal.
3. Rauschen: Dieser Fehler wird durch die Streuung der beobachteten Werte verursacht, z. B. unvorhersehbare Änderungen oder Messfehler. Dies ist ein schwerwiegender Fehler, der von keinem Modell erklärt werden kann.
Eine Ensemble-Methode ist eine Methode, die viele schwache Schüler, die auf demselben Lernalgorithmus basieren, mit dem Ziel kombiniert, einen (stärkeren) Schüler zu schaffen, dessen Leistung besser ist als die der einzelnen Schüler. Ensemble-Techniken helfen, Vorspannung und / oder Streuung zu reduzieren.
6.3. Bootstrap-Aggregation
Das Absacken (Aggregation) oder Aggregation von Bootstrap-Beispielen ist ein effektiver Weg, um die Varianz in Prognosen zu verringern. Es funktioniert wie folgt: Zunächst müssen N Trainingsuntermengen von Daten unter Verwendung einer Zufallsstichprobe mit Rückgabe generiert werden. Zweitens passen Sie N Evaluatoren an, einen für jede Trainingsuntermenge. Diese Evaluatoren werden unabhängig voneinander angepasst, daher können Modelle parallel angepasst werden. Drittens ist die Ensemble-Vorhersage ein einfaches arithmetisches Mittel einzelner Vorhersagen aus N Modellen. Bei kategorialen Variablen wird die Wahrscheinlichkeit, dass eine Beobachtung zu einer Klasse gehört, durch den Anteil der Bewerter bestimmt, die diese Beobachtung als Mitglied dieser Klasse klassifizieren (mit Stimmenmehrheit, dh mit Stimmenmehrheit). Wenn der Basisgutachter Vorhersagen mit der Wahrscheinlichkeit der Vorhersage treffen kann, kann der eingepackte Klassifikator den Durchschnittswert der Wahrscheinlichkeiten erhalten.
Wenn Sie die baggingClassifier-Klasse der sklearn-Bibliothek verwenden, um die Genauigkeit ohne Paket zu berechnen, sollten Sie diesen Fehler kennen:
https://github.com/scikit-learn/scikitlearn/issues/8933 . Eine Problemumgehung besteht darin, Beschriftungen in einer ganzzahligen Reihenfolge umzubenennen.
6.3.1. Dispersionsreduzierung
Der Hauptvorteil des Absackens besteht darin, dass die Varianz der Prognosen verringert wird, wodurch das Problem der Überanpassung gelöst wird. Die Varianz in der Bagged-Vorhersage (φi [c]) ist eine Funktion der Anzahl der Bagged-Gutachter (N), der durchschnittlichen Varianz der von einem Gutachter durchgeführten Vorhersage (σ̄) und der durchschnittlichen Korrelation zwischen ihren Vorhersagen (ρ̄):
Durch sequentielles Bootstraping (Kapitel 4) soll die Abtastung so unabhängig wie möglich gemacht werden, wodurch ρ̄ verringert wird, was die Streuung von eingepackten Klassifikatoren verringern sollte. In Abb. In 6.1 haben wir das Standardabweichungsdiagramm der Bagged-Vorhersage als Funktion von N ∈ [5, 30], ρ̄ ∈ [0, 1] und σ̄ = 1 aufgetragen.
6.3.2. Verbesserte Genauigkeit
Stellen Sie sich einen Bagged-Klassifikator vor, der eine Vorhersage für k Klassen mit Stimmenmehrheit unter N unabhängigen Klassifikatoren macht. Wir können Vorhersagen als {0,1} bezeichnen, wobei 1 korrekte Vorhersage bedeutet. Die Genauigkeit des Klassifikators ist die Wahrscheinlichkeit p, die Vorhersage als 1 zu markieren. Im Durchschnitt erhalten wir Np-Vorhersagen, die als 1 mit einer Varianz von Np (1 - p) markiert sind. Die Mehrheitsentscheidung macht die richtige Vorhersage, wenn die vorhersehbarste Klasse beobachtet wird. Zum Beispiel machte der Bagged-Klassifikator für N = 10 und k = 3 die korrekte Vorhersage, wenn er beobachtet wurde
Listing 6.1. Die Richtigkeit des eingepackten Klassifikators
from scipy.misc import comb N,p,k=100,1./3,3. p_=0 for i in xrange(0,int(N/k)+1): p_+=comb(N,i)*p**i*(1-p)**(Ni) print p,1-p_
Dies ist ein starkes Argument für das Absacken eines Klassifikators im allgemeinen Fall, wenn die Rechenfähigkeiten dies zulassen. Im Gegensatz zum Boosten kann das Absacken jedoch die Genauigkeit schwacher Klassifikatoren nicht verbessern:
Für eine detaillierte Analyse dieses Themas wird dem Leser empfohlen, sich an den Satz der Condorcet-Jury zu wenden. Obwohl dieser Satz zum Zweck der Mehrheitsentscheidung in der Politikwissenschaft erhalten wurde, hat das in diesem Satz angesprochene Problem Gemeinsamkeiten mit dem oben beschriebenen.
6.3.3. Redundanz der Beobachtungen
In Kapitel 4 haben wir einen der Gründe untersucht, warum finanzielle Beobachtungen nicht als gleichmäßig verteilt und voneinander unabhängig angesehen werden können. Übermäßige Beobachtungen wirken sich nachteilig auf das Absacken aus. Erstens ist es wahrscheinlicher, dass Proben, die mit Rückgabe entnommen wurden, nahezu identisch sind, auch wenn sie keine gemeinsamen Beobachtungen haben. Es tut

und das Absacken verringert die Varianz nicht, unabhängig von N. Wenn beispielsweise jeder Fall bei t gemäß einer finanziellen Rendite zwischen t und t + 100 markiert ist, müssen wir 1% der Fälle pro eingesacktem Gutachter auswählen, aber nicht mehr. In Kapitel 4, Abschnitt 4.5, werden drei alternative Lösungen empfohlen, von denen eine max_samples = out ['tW']. Mean () bei der Implementierung der Bagged-Classifier-Klasse in der sklearn-Bibliothek war. Eine andere (bessere) Lösung war die Anwendung der Methode der sequentiellen Bootstrap-Auswahl.
Der zweite nachteilige Effekt der Beobachtungsredundanz besteht darin, dass die Genauigkeit zusätzlicher Pakete erhöht wird. Dies ist auf die Tatsache zurückzuführen, dass die Zufallsstichprobe mit Stichproben zu den Stichproben der Trainingsuntermenge zurückkehrt, die denen außerhalb des Pakets sehr ähnlich sind. In diesem Fall zeigt die korrekte geschichtete K-Block-Kreuzvalidierung ohne Mischen vor dem Teilen eine viel geringere Genauigkeit in der Testuntermenge als die, die außerhalb des Pakets bewertet wurde. Aus diesem Grund wird bei Verwendung dieser sklearn-Bibliotheksklasse empfohlen, stratifiedKFold (n_splits = k, shuffle = False) festzulegen, den Bagged-Klassifikator zu überprüfen und die Ergebnisse der Nicht-Paket-Genauigkeit zu ignorieren. Ein niedriges k ist einem hohen k vorzuziehen, da durch Überspaltung wieder Muster in die Testuntermenge eingefügt werden, die denen in der Trainingsuntermenge zu ähnlich sind.
6.4. Zufälliger Wald
Entscheidungsbäume sind insofern bekannt, als sie zu Überanpassungen neigen, was die Varianz der Prognosen erhöht. Um dieses Problem anzugehen, wurde eine Random Forest (RF) -Methode entwickelt, um Ensemble-Vorhersagen mit geringerer Varianz zu generieren.
Eine zufällige Gesamtstruktur weist einige Gemeinsamkeiten mit dem Absacken auf, da einzelne Evaluatoren unabhängig voneinander in Bootstrap-Datenuntergruppen geschult werden. Der Hauptunterschied zum Absacken besteht darin, dass eine zweite Ebene der Zufälligkeit in zufällige Wälder eingebaut wird: Während der Optimierung jeder Knotenfragmentierung wird nur eine zufällige Teilstichprobe (ohne Rückgabe) von Attributen ausgewertet, um die Bewerter weiter zu dekorrelieren.
Wie beim Absacken reduziert ein zufälliger Wald die Varianz von Prognosen ohne Überanpassung (denken Sie daran, bis). Der zweite Vorteil besteht darin, dass eine zufällige Gesamtstruktur die Wichtigkeit von Attributen bewertet, auf die wir in Kapitel 8 ausführlich eingehen werden. Der dritte Vorteil besteht darin, dass eine zufällige Gesamtstruktur Schätzungen der Genauigkeit außerhalb des Pakets liefert, bei Finanzanwendungen jedoch wahrscheinlich aufgeblasen wird (wie in beschrieben) Abschnitt 6.3.3). Aber wie beim Absacken weist ein zufälliger Wald nicht unbedingt eine geringere Tendenz auf als einzelne Entscheidungsbäume.
Wenn eine große Anzahl von Stichproben redundant ist (nicht gleichmäßig verteilt und voneinander unabhängig), erfolgt dennoch eine erneute Anpassung: Durch Zufallsstichproben mit Rückgabe wird eine große Anzahl nahezu identischer Bäume erstellt (), wobei jeder Entscheidungsbaum überpasst ist (ein Nachteil, aufgrund dessen Entscheidungsbäume berüchtigt sind). . Im Gegensatz zum Absacken legt eine zufällige Gesamtstruktur die Größe der Bootstrap-Beispiele immer entsprechend der Größe der Trainingsuntermenge von Daten fest. Schauen wir uns an, wie wir dieses Problem der Neuanpassung zufälliger Wälder in der sklearn-Bibliothek lösen können. Zur Veranschaulichung werde ich auf die Klassen der sklearn-Bibliothek verweisen. Diese Lösungen können jedoch auf jede Implementierung angewendet werden:
1. Setzen Sie den Parameter max_features auf einen niedrigeren Wert, um eine Diskrepanz zwischen den Bäumen zu erzielen.
2. Vorzeitiger Stopp: Setzen Sie den Regularisierungsparameter min_weight_fraction_leaf auf einen ausreichend großen Wert (z. B. 5%), damit die Genauigkeit außerhalb des Pakets gegen die Korrektheit außerhalb der Stichprobe (k-Block) konvergiert.
3. Verwenden Sie den BaggingClassifier-Evaluator für den DecisionTreeClassifier-Basis-Evaluator, wobei max_samples auf die durchschnittliche Eindeutigkeit (avgU) zwischen den Samples festgelegt ist.
- clf = DecisionTreeClassifier (Kriterium = 'Entropie', max_features = 'auto', class_weight = 'ausgeglichen')
- bc = BaggingClassifier (base_estimator = clf, n_estimators = 1000, max_samples = avgU, max_features = 1.)
4. Verwenden Sie den BaggingClassifier-Evaluator für den Basis-RandomForestClassifier-Evaluator, wobei max_samples auf die durchschnittliche Eindeutigkeit (avgU) zwischen den Samples festgelegt ist.
- clf = RandomForestClassifier (n_estimators = 1, Kriterium = 'Entropie', Bootstrap = False, class_weight = 'balance_subsample')
- bc = BaggingClassifier (base_estimator = clf, n_estimators = 1000, max_samples = avgU, max_features = 1.)
5. Ändern Sie die zufällige Gesamtstrukturklasse, um Standard-Bootstraps durch sequentielle Bootstraps zu ersetzen.
Zusammenfassend zeigt Listing 6.2 drei alternative Möglichkeiten zum Konfigurieren einer zufälligen Gesamtstruktur mit verschiedenen Klassen.
Listing 6.2. Drei Möglichkeiten, einen zufälligen Wald einzurichten
clf0=RandomForestClassifier(n_estimators=1000, class_weight='balanced_ subsample', criterion='entropy') clf1=DecisionTreeClassifier(criterion='entropy', max_features='auto', class_weight='balanced') clf1=BaggingClassifier(base_estimator=clf1, n_estimators=1000, max_samples=avgU) clf2=RandomForestClassifier(n_estimators=1, criterion='entropy', bootstrap=False, class_weight='balanced_subsample') clf2=BaggingClassifier(base_estimator=clf2, n_estimators=1000, max_samples=avgU, max_features=1.)
Beim Anpassen von Entscheidungsbäumen reduziert die Drehung des Merkmalsraums in der mit den Achsen übereinstimmenden Richtung in der Regel die Anzahl der für den Baum erforderlichen Ebenen. Aus diesem Grund schlage ich vor, dass Sie einen zufälligen Baum in die PCA der Attribute einfügen, da dies die Berechnungen beschleunigen und die Neuanpassung geringfügig reduzieren kann (mehr dazu in Kapitel 8). Wie in Kapitel 4, Abschnitt 4.8 beschrieben, hilft das Argument class_weight = 'balance_subsample' außerdem, zu verhindern, dass Bäume Minderheitenklassen falsch klassifizieren.
6.5. Boost
Kearns und Valiant [1989] waren unter den ersten, die fragten, ob schwache Bewerter kombiniert werden könnten, um die Realisierung eines hochpräzisen Bewerters zu erreichen. Kurz darauf zeigte Schapire [1990] eine positive Antwort auf diese Frage mit einem Verfahren, das wir heute Boosten nennen (Boosten, Boosten, Verstärken). Im Allgemeinen funktioniert es wie folgt: Generieren Sie zunächst eine Trainingsuntermenge durch zufällige Auswahl mit Rückgabe gemäß bestimmten Stichprobengewichten (initialisiert durch einheitliche Gewichte). Zweitens passen Sie einen Bewerter mit dieser Trainingsuntermenge an. Drittens, wenn ein einzelner Gutachter eine Genauigkeit erreicht, die den Akzeptanzschwellenwert überschreitet (z. B. in einem binären Klassifikator sind es 50%, so dass der Klassifikator besser funktioniert als zufällige Wahrsagerei), bleibt der Gutachter erhalten, andernfalls wird er verworfen. Viertens geben Sie falsch klassifizierten Beobachtungen mehr Gewicht und korrekt klassifizierten Beobachtungen weniger Gewicht. Fünftens wiederholen Sie die vorherigen Schritte, bis N Gutachter empfangen werden. Sechstens ist die Ensemble-Vorhersage der gewichtete Durchschnitt der einzelnen Vorhersagen aus N Modellen, wobei die Gewichte durch die Genauigkeit der einzelnen Bewerter bestimmt werden. Es gibt eine Reihe von Boosted-Algorithmen, von denen AdaBoost Adaptive Boosting einer der beliebtesten ist (Geron [2017]). Abbildung 6.3 fasst den Entscheidungsfluss in der Standardimplementierung des AdaBoost-Algorithmus zusammen.

6.6. Bagging vs Finance Boosting
Aufgrund der obigen Beschreibung unterscheidet sich das Boosten durch verschiedene Aspekte grundlegend vom
Absacken :
- Die Anpassung der einzelnen Klassifikatoren erfolgt nacheinander.
- Schlechte Klassifikatoren werden abgelehnt.
- Bei jeder Iteration werden die Beobachtungen unterschiedlich gewichtet.
Die Ensemble-Prognose ist der gewichtete Durchschnitt der einzelnen Schüler.
Der Hauptvorteil des Boostings besteht darin, dass sowohl die Varianz als auch die Verzerrung der Prognosen verringert werden. Eine Vorspannungskorrektur tritt jedoch aufgrund eines höheren Risikos einer Überanpassung auf. Es kann argumentiert werden, dass bei Finanzanwendungen das Absacken normalerweise dem Boosten vorzuziehen ist. Das Absacken löst das Überanpassungsproblem, während das Boosten das Überanpassungsproblem löst. Eine Überanpassung ist häufig ein schwerwiegenderes Problem als eine Unteranpassung, da eine zu enge Anpassung des MO-Algorithmus an Finanzdaten aufgrund des geringen Signal-Rausch-Verhältnisses überhaupt nicht schwierig ist. Darüber hinaus kann das Absacken parallelisiert werden, während das Boosten normalerweise eine sequentielle Ausführung erfordert.
6.7. Absacken für Skalierbarkeit
Wie Sie wissen, lassen sich einige gängige MO-Algorithmen je nach Stichprobengröße nicht sehr gut skalieren. Die SVM-Methode (Support Vector Machines) ist ein Paradebeispiel. Wenn Sie versuchen, den SVM-Evaluator über eine Million Beobachtungen anzupassen, kann es lange dauern, bis der Algorithmus konvergiert. Und selbst nach der Konvergenz gibt es keine Garantie dafür, dass die Lösung ein globales Optimum darstellt oder nicht neu ausgerichtet wird.
Ein praktischer Ansatz besteht darin, einen Bagged-Algorithmus zu erstellen, bei dem der Basisauswerter zu einer Klasse gehört, die mit der Stichprobengröße nicht gut skaliert werden kann, z. B. SVM. Bei der Definition dieses grundlegenden Gutachters führen wir eine strenge Bedingung für einen frühen Stopp ein. Bei der Implementierung von SVMs (Support Vector Machines) in der sklearn-Bibliothek können Sie beispielsweise einen niedrigen Wert für den Parameter max_iter festlegen, z. B. 1E5-Iterationen. Der Standardwert ist max_iter = -1, wodurch der Evaluator angewiesen wird, die Iteration fortzusetzen, bis die Fehler unter das Toleranzniveau fallen. Andererseits können Sie das Toleranzniveau mit dem Parameter tol erhöhen, der standardmäßig tol = iE-3 ist. Jede dieser beiden Optionen führt zu einem vorzeitigen Stopp. Sie können andere Algorithmen frühzeitig stoppen, indem Sie äquivalente Parameter verwenden, z. B. die Anzahl der Ebenen in einer zufälligen Gesamtstruktur (max_depth) oder den minimalen gewichteten Bruchteil der Gesamtsumme der Gewichte (alle Eingabebeispiele), die für einen Blattknoten erforderlich sind (min_weight_fraction_leaf).
Da Bagged-Algorithmen parallelisiert werden können, wandeln wir eine große sequentielle Aufgabe in eine Reihe kleinerer Aufgaben um, die gleichzeitig ausgeführt werden. Ein frühzeitiger Stopp erhöht natürlich die Varianz der Ergebnisse einzelner Basisbewerter. Diese Zunahme kann jedoch durch die Abnahme der Varianz, die mit dem Bagged-Algorithmus verbunden ist, mehr als ausgeglichen werden. Sie können diese Reduzierung steuern, indem Sie neue unabhängige Basisbewerter hinzufügen. Auf diese Weise können Sie mit Bagging schnelle und zuverlässige Schätzungen für sehr große Datenmengen erhalten.
»Weitere Informationen zum Buch finden Sie auf
der Website des Herausgebers»
Inhalt»
Auszug25% Rabatt für Khabrozhiteley Vorbestellungsbücher auf einen Gutschein -
Maschinelles Lernen