In den letzten Jahren haben Boosting-Algorithmen in Data Science und Machine-Learning-Wettbewerben enorm an Popularität gewonnen. Die meisten Gewinner solcher Wettbewerbe setzen Boosting ein, um hohe Genauigkeit zu erzielen. Diese Data-Science-Wettbewerbe bieten eine weltweite Bühne, um zu lernen, zu experimentieren und Lösungen für Geschäfts- und Regierungsprobleme zu entwickeln. Boosting-Algorithmen kombinieren mehrere Modelle mit geringer Genauigkeit (\"schwache\" Modelle) zu einem Modell mit hoher Genauigkeit (\"starkes\" Modell). Sie lassen sich in vielen Bereichen einsetzen, etwa im Kreditwesen, in der Versicherung, im Marketing und im Vertrieb. Boosting-Algorithmen wie AdaBoost, Gradient Boosting und XGBoost gehören zu den meistgenutzten Verfahren, um Datenwettbewerbe zu gewinnen. In diesem Tutorial lernst du den Ensemble-Boosting-Algorithmus AdaBoost kennen. Wir behandeln folgende Themen:
Ein Ensemble ist ein Verbundmodell, das eine Reihe schwächerer Klassifikatoren kombiniert, um einen besseren Klassifikator zu erzeugen. Dabei stimmen die einzelnen Klassifikatoren ab, und das endgültige Prädiktionslabel ergibt sich per Mehrheitsentscheid. Ensembles liefern in der Regel höhere Genauigkeit als einzelne Basisklassifikatoren. Ensemble-Methoden lassen sich parallelisieren, indem man jedem Basislernenden eine andere Maschine zuweist. Kurz gesagt: Ensemble-Lernen sind Meta-Algorithmen, die mehrere Machine-Learning-Verfahren zu einem einzigen Vorhersagemodell kombinieren, um die Leistung zu steigern. Ensembles können die Varianz per Bagging reduzieren, den Bias per Boosting verringern oder Vorhersagen per Stacking verbessern.
Bagging steht für Bootstrap Aggregating. Mehrere Lerner werden so kombiniert, dass die Varianz der Schätzungen sinkt. Beispiel Random Forest: Du trainierst M Entscheidungsbäume auf unterschiedlichen, zufällig gezogenen Teilmengen der Daten und stimmst dann für die finale Vorhersage ab. Typische Bagging-Methoden sind Random Forest und Extra Trees.
Boosting-Algorithmen setzen eine Reihe schwächerer Klassifikatoren zu einem sehr genauen Klassifikator zusammen. Ein schwacher Klassifikator liegt nur knapp über Zufall, ein starker erreicht eine sehr geringe Fehlerrate. Boosting kann gezielt die Fälle adressieren, bei denen das Modell falsch lag. Boosting ist zudem weniger anfällig für Overfitting. Die folgenden drei Verfahren sind in Data-Science-Wettbewerben besonders populär:
AdaBoost (Adaptive Boosting)
Gradient Tree Boosting
XGBoost
Stacking (oder Stacked Generalization) ist eine Ensemble-Technik, die die Vorhersagen mehrerer Basisklassifikatoren zu einem neuen Datensatz bündelt. Diese neuen Merkmale dienen dann als Eingabe für einen weiteren Klassifikator, der das eigentliche Problem löst. Stacking wird häufig auch Blending genannt.
Nach der Anordnung der Basislernenden lassen sich Ensemble-Methoden in zwei Gruppen einteilen: Parallele Ensembles erzeugen Basislernende parallel, z. B. Random Forest. Sequenzielle Ensembles erzeugen Basislernende nacheinander, z. B. AdaBoost.
Nach dem Typ der Basislernenden unterscheidet man: Homogene Ensembles nutzen in jeder Iteration denselben Lerner-Typ, heterogene Ensembles setzen unterschiedliche Lerner-Typen ein.
AdaBoost-Klassifikator
AdaBoost (Adaptive Boosting) ist ein Ensemble-Boosting-Klassifikator, vorgeschlagen von Yoav Freund und Robert Schapire im Jahr 1996. Er kombiniert mehrere Klassifikatoren, um deren Genauigkeit zu steigern. AdaBoost ist ein iteratives Ensemble-Verfahren. Der AdaBoost-Klassifikator baut einen starken Klassifikator aus mehreren schwachen auf, sodass du am Ende hohe Genauigkeit erreichst. Die Grundidee hinter AdaBoost ist, in jeder Iteration Gewichte für Klassifikatoren und Trainingsbeispiele so zu setzen, dass ungewöhnliche Beobachtungen korrekt vorhergesagt werden. Jeder ML-Algorithmus, der Beispielgewichte akzeptiert, kann als Basisklassifikator dienen. AdaBoost sollte zwei Bedingungen erfüllen:
Der Klassifikator wird wiederholt auf verschieden gewichteten Trainingsbeispielen trainiert.
In jeder Iteration wird versucht, diese Beispiele durch Minimierung des Trainingsfehlers möglichst gut zu treffen.
Wie funktioniert der AdaBoost-Algorithmus?
Er arbeitet in folgenden Schritten:
Zu Beginn wählt AdaBoost zufällig eine Trainings-Teilmenge aus.
Das Modell wird iterativ trainiert, wobei der Trainingssatz anhand der korrekten bzw. falschen Vorhersagen der letzten Iteration neu gewichtet wird.
Falsch klassifizierte Beobachtungen erhalten ein höheres Gewicht, damit sie in der nächsten Iteration mit höherer Wahrscheinlichkeit korrekt klassifiziert werden.
Auch der trainierte Klassifikator bekommt pro Iteration ein Gewicht entsprechend seiner Genauigkeit. Genauere Klassifikatoren erhalten höhere Gewichte.
Dieser Prozess läuft weiter, bis die Trainingsdaten fehlerfrei angepasst sind oder die angegebene maximale Anzahl an Basislernenden erreicht ist.
Für die Klassifikation wird über alle gelernten Modelle \"abgestimmt\".
Modellaufbau in Python
Benötigte Bibliotheken importieren
Lass uns zuerst die erforderlichen Bibliotheken laden.
# Load librariesfrom sklearn.ensemble import AdaBoostClassifier
from sklearn import datasets
# Import train_test_split functionfrom sklearn.model_selection import train_test_split
#Import scikit-learn metrics module for accuracy calculationfrom sklearn import metrics
Bereitgestellt von
Datensatz laden
Für den Modellaufbau verwenden wir den IRIS-Datensatz, ein sehr bekanntes Multiclass-Klassifikationsproblem. Der Datensatz umfasst 4 Merkmale (Kelchlänge, Kelchbreite, Kronblattlänge, Kronblattbreite) und ein Ziel (die Blumenart). Es gibt drei Klassen: Setosa, Versicolour und Virginica. Der Datensatz ist in der scikit-learn-Bibliothek verfügbar; alternativ kannst du ihn aus der UCI Machine Learning Library herunterladen.
# Load data
iris = datasets.load_iris()
X = iris.data
y = iris.target
Bereitgestellt von
Datensatz aufteilen
Um die Modellleistung zu verstehen, ist es sinnvoll, den Datensatz in Trainings- und Testsatz zu trennen.
Wir teilen den Datensatz mit der Funktion train_test_split(). Du übergibst drei Parameter: Features, Zielvariable und die Größe des Testsatzes.
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)# 70% training and 30% testBereitgestellt von
AdaBoost-Modell erstellen
Erstellen wir das AdaBoost-Modell mit Scikit-learn. Standardmäßig verwendet AdaBoost den DecisionTreeClassifier als Basisklassifikator.
# Create adaboost classifer object
abc = AdaBoostClassifier(n_estimators=50,
learning_rate=1)# Train Adaboost Classifer
model = abc.fit(X_train, y_train)#Predict the response for test dataset
y_pred = model.predict(X_test)Bereitgestellt von
Du erreichst eine Genauigkeit von 88,88 % – ein guter Wert.
Für eine weitergehende Bewertung kannst du auch unterschiedliche Basisschätzer ausprobieren.
Andere Basislernende verwenden
Hier verwende ich SVC als Basisschätzer. Du kannst jeden ML-Lerner einsetzen, der Beispielgewichte akzeptiert, zum Beispiel Decision Tree oder Support Vector Classifier.
# Load librariesfrom sklearn.ensemble import AdaBoostClassifier
# Import Support Vector Classifierfrom sklearn.svm import SVC
#Import scikit-learn metrics module for accuracy calculationfrom sklearn import metrics
svc=SVC(probability=True, kernel='linear')# Create adaboost classifer object
abc =AdaBoostClassifier(n_estimators=50, base_estimator=svc,learning_rate=1)# Train Adaboost Classifer
model = abc.fit(X_train, y_train)#Predict the response for test dataset
y_pred = model.predict(X_test)# Model Accuracy, how often is the classifier correct?print("Accuracy:",metrics.accuracy_score(y_test, y_pred))Bereitgestellt von
Dies ergibt eine Klassifikationsrate von 95,56 % – ebenfalls ein sehr guter Wert.
In diesem Fall liefert der SVC als Basisschätzer eine bessere Genauigkeit als der Decision Tree.
Vorteile
AdaBoost ist leicht umzusetzen. Es korrigiert iterativ die Fehler der schwachen Klassifikatoren und steigert die Genauigkeit durch ihre Kombination. Du kannst viele verschiedene Basisklassifikatoren mit AdaBoost nutzen. AdaBoost ist tendenziell wenig anfällig für Overfitting. Das zeigen empirische Ergebnisse, auch wenn es keine harte theoretische Begründung dafür gibt.
Nachteile
AdaBoost ist empfindlich gegenüber Rauschen in den Daten. Ausreißer wirken sich stark aus, weil das Verfahren versucht, jeden Punkt perfekt zu treffen. Außerdem ist AdaBoost langsamer als XGBoost.
Fazit
Glückwunsch, du hast das Ende dieses Tutorials erreicht!
Du hast den Ensemble-Ansatz im Machine Learning, den AdaBoost-Algorithmus, seine Funktionsweise sowie den Modellaufbau und die Bewertung mit Python und Scikit-learn kennengelernt. Außerdem haben wir Vor- und Nachteile diskutiert.
Ich freue mich über Feedback oder Fragen. Stell sie gern in den Kommentaren – ich gebe mein Bestes, sie zu beantworten.
Lerne mehr über abstrakte Klassen in Python, wozu sie gut sind und wie du mit dem Modul „abc“ einheitliche Schnittstellen sicherstellen kannst. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
In den letzten Jahren haben Boosting-Algorithmen in Data Science und Machine-Learning-Wettbewerben enorm an Popularität gewonnen. Die meisten Gewinner solcher Wettbewerbe setzen Boosting ein, um hohe Genauigkeit zu erzielen. Diese Data-Science-Wettbewerbe bieten eine weltweite Bühne, um zu lernen, zu experimentieren und Lösungen für Geschäfts- und Regierungsprobleme zu entwickeln. Boosting-Algorithmen kombinieren mehrere Modelle mit geringer Genauigkeit (\"schwache\" Modelle) zu einem Modell mit hoher Genauigkeit (\"starkes\" Modell). Sie lassen sich in vielen Bereichen einsetzen, etwa im Kreditwesen, in der Versicherung, im Marketing und im Vertrieb. Boosting-Algorithmen wie AdaBoost, Gradient Boosting und XGBoost gehören zu den meistgenutzten Verfahren, um Datenwettbewerbe zu gewinnen. In diesem Tutorial lernst du den Ensemble-Boosting-Algorithmus AdaBoost kennen. Wir behandeln folgende Themen:
Ensemble-Ansatz im Machine Learning
Ein Ensemble ist ein Verbundmodell, das eine Reihe schwächerer Klassifikatoren kombiniert, um einen besseren Klassifikator zu erzeugen. Dabei stimmen die einzelnen Klassifikatoren ab, und das endgültige Prädiktionslabel ergibt sich per Mehrheitsentscheid. Ensembles liefern in der Regel höhere Genauigkeit als einzelne Basisklassifikatoren. Ensemble-Methoden lassen sich parallelisieren, indem man jedem Basislernenden eine andere Maschine zuweist. Kurz gesagt: Ensemble-Lernen sind Meta-Algorithmen, die mehrere Machine-Learning-Verfahren zu einem einzigen Vorhersagemodell kombinieren, um die Leistung zu steigern. Ensembles können die Varianz per Bagging reduzieren, den Bias per Boosting verringern oder Vorhersagen per Stacking verbessern.
Bagging steht für Bootstrap Aggregating. Mehrere Lerner werden so kombiniert, dass die Varianz der Schätzungen sinkt. Beispiel Random Forest: Du trainierst M Entscheidungsbäume auf unterschiedlichen, zufällig gezogenen Teilmengen der Daten und stimmst dann für die finale Vorhersage ab. Typische Bagging-Methoden sind Random Forest und Extra Trees.
Boosting-Algorithmen setzen eine Reihe schwächerer Klassifikatoren zu einem sehr genauen Klassifikator zusammen. Ein schwacher Klassifikator liegt nur knapp über Zufall, ein starker erreicht eine sehr geringe Fehlerrate. Boosting kann gezielt die Fälle adressieren, bei denen das Modell falsch lag. Boosting ist zudem weniger anfällig für Overfitting. Die folgenden drei Verfahren sind in Data-Science-Wettbewerben besonders populär:
Stacking (oder Stacked Generalization) ist eine Ensemble-Technik, die die Vorhersagen mehrerer Basisklassifikatoren zu einem neuen Datensatz bündelt. Diese neuen Merkmale dienen dann als Eingabe für einen weiteren Klassifikator, der das eigentliche Problem löst. Stacking wird häufig auch Blending genannt.
Nach der Anordnung der Basislernenden lassen sich Ensemble-Methoden in zwei Gruppen einteilen: Parallele Ensembles erzeugen Basislernende parallel, z. B. Random Forest. Sequenzielle Ensembles erzeugen Basislernende nacheinander, z. B. AdaBoost.
Nach dem Typ der Basislernenden unterscheidet man: Homogene Ensembles nutzen in jeder Iteration denselben Lerner-Typ, heterogene Ensembles setzen unterschiedliche Lerner-Typen ein.
AdaBoost-Klassifikator
AdaBoost (Adaptive Boosting) ist ein Ensemble-Boosting-Klassifikator, vorgeschlagen von Yoav Freund und Robert Schapire im Jahr 1996. Er kombiniert mehrere Klassifikatoren, um deren Genauigkeit zu steigern. AdaBoost ist ein iteratives Ensemble-Verfahren. Der AdaBoost-Klassifikator baut einen starken Klassifikator aus mehreren schwachen auf, sodass du am Ende hohe Genauigkeit erreichst. Die Grundidee hinter AdaBoost ist, in jeder Iteration Gewichte für Klassifikatoren und Trainingsbeispiele so zu setzen, dass ungewöhnliche Beobachtungen korrekt vorhergesagt werden. Jeder ML-Algorithmus, der Beispielgewichte akzeptiert, kann als Basisklassifikator dienen. AdaBoost sollte zwei Bedingungen erfüllen:
Wie funktioniert der AdaBoost-Algorithmus?
Er arbeitet in folgenden Schritten:
Modellaufbau in Python
Benötigte Bibliotheken importieren
Lass uns zuerst die erforderlichen Bibliotheken laden.
Datensatz laden
Für den Modellaufbau verwenden wir den IRIS-Datensatz, ein sehr bekanntes Multiclass-Klassifikationsproblem. Der Datensatz umfasst 4 Merkmale (Kelchlänge, Kelchbreite, Kronblattlänge, Kronblattbreite) und ein Ziel (die Blumenart). Es gibt drei Klassen: Setosa, Versicolour und Virginica. Der Datensatz ist in der scikit-learn-Bibliothek verfügbar; alternativ kannst du ihn aus der UCI Machine Learning Library herunterladen.
Datensatz aufteilen
Um die Modellleistung zu verstehen, ist es sinnvoll, den Datensatz in Trainings- und Testsatz zu trennen.
Wir teilen den Datensatz mit der Funktion train_test_split(). Du übergibst drei Parameter: Features, Zielvariable und die Größe des Testsatzes.
AdaBoost-Modell erstellen
Erstellen wir das AdaBoost-Modell mit Scikit-learn. Standardmäßig verwendet AdaBoost den DecisionTreeClassifier als Basisklassifikator.
\"Die wichtigsten Parameter sind base_estimator, n_estimators und learning_rate.\" (Adaboost Classifier, Chris Albon)
Modell bewerten
Schätzen wir ab, wie genau der Klassifikator die Blumenarten vorhersagt.
Die Genauigkeit berechnest du, indem du echte Testwerte mit den Vorhersagen vergleichst.
Du erreichst eine Genauigkeit von 88,88 % – ein guter Wert.
Für eine weitergehende Bewertung kannst du auch unterschiedliche Basisschätzer ausprobieren.
Andere Basislernende verwenden
Hier verwende ich SVC als Basisschätzer. Du kannst jeden ML-Lerner einsetzen, der Beispielgewichte akzeptiert, zum Beispiel Decision Tree oder Support Vector Classifier.
Dies ergibt eine Klassifikationsrate von 95,56 % – ebenfalls ein sehr guter Wert.
In diesem Fall liefert der SVC als Basisschätzer eine bessere Genauigkeit als der Decision Tree.
Vorteile
AdaBoost ist leicht umzusetzen. Es korrigiert iterativ die Fehler der schwachen Klassifikatoren und steigert die Genauigkeit durch ihre Kombination. Du kannst viele verschiedene Basisklassifikatoren mit AdaBoost nutzen. AdaBoost ist tendenziell wenig anfällig für Overfitting. Das zeigen empirische Ergebnisse, auch wenn es keine harte theoretische Begründung dafür gibt.
Nachteile
AdaBoost ist empfindlich gegenüber Rauschen in den Daten. Ausreißer wirken sich stark aus, weil das Verfahren versucht, jeden Punkt perfekt zu treffen. Außerdem ist AdaBoost langsamer als XGBoost.
Fazit
Glückwunsch, du hast das Ende dieses Tutorials erreicht!
Du hast den Ensemble-Ansatz im Machine Learning, den AdaBoost-Algorithmus, seine Funktionsweise sowie den Modellaufbau und die Bewertung mit Python und Scikit-learn kennengelernt. Außerdem haben wir Vor- und Nachteile diskutiert.
Ich freue mich über Feedback oder Fragen. Stell sie gern in den Kommentaren – ich gebe mein Bestes, sie zu beantworten.
Wenn du mehr über Machine Learning mit Python lernen möchtest, schau dir DataCamps Kurs Extreme Gradient Boosting with XGBoost und das Python Machine Learning: Scikit-Learn Tutorial an.