Kurs
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
- Bagging
- Boosting
- Stacking
- AdaBoost-Klassifikator
- Wie funktioniert der AdaBoost-Algorithmus?
- Modellaufbau in Python
- Vorteile und Nachteile
- Fazit
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:
- 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 libraries
from sklearn.ensemble import AdaBoostClassifier
from sklearn import datasets
# Import train_test_split function
from sklearn.model_selection import train_test_split
#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics
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
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% test
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)
\"Die wichtigsten Parameter sind base_estimator, n_estimators und learning_rate.\" (Adaboost Classifier, Chris Albon)
- base_estimator: Schwacher Lerner zum Trainieren des Modells. Standard ist der DecisionTreeClassifier. Du kannst auch andere ML-Algorithmen angeben.
- n_estimators: Anzahl der schwachen Lerner, die iterativ trainiert werden.
- learning_rate: Steuert die Gewichte der schwachen Lerner. Standardwert ist 1.
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.
# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
Accuracy: 0.8888888888888888
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 libraries
from sklearn.ensemble import AdaBoostClassifier
# Import Support Vector Classifier
from sklearn.svm import SVC
#Import scikit-learn metrics module for accuracy calculation
from 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))
Accuracy: 0.9555555555555556
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.