Bevor wir dir ihre nützlichen Funktionen zeigen, wollen wir uns daran erinnern, was Scikit-Learn ist und wofür es verwendet werden kann. Scikit-Learn ist eine Python-Bibliothek für Machine Learning, sowohl für überwachtes als auch für unüberwachtes Lernen. Sie bietet auch die Möglichkeit, Modelle mit statistischen Mitteln zu analysieren.
Die Installation erfolgt mit conda :
conda install scikit-learn
Oder mit pip :
pip install -U scikit-learn
In diesem Artikel untersuchen wir fünf Funktionen von Scikit-learn (oft abgekürzt als „Scikit“ oder einfach „sklearn“), die deinen Ansatz zum Lernen von Daten verändern könnten.
1. Erhalte Datensätze
Eine sehr nützliche Funktion (vor allem für Anfänger) ist die Möglichkeit, mit mehreren Datensätzen zu arbeiten, die automatisch in Scikit-learn integriert sind.
Zu den am häufigsten verwendeten Datenbanken gehören: der Iris-Datensatz, der Hauspreis-Datensatz, der Diabetes-Datensatz. Diese Datensätze sind so konzipiert, dass sie leicht verständlich sind, was eine direkte Umsetzung von Modellen des maschinellen Lernens ermöglicht.
Du kannst den iris-Datensatz mit dem folgenden Code importieren:
from sklearn.datasets import load_iris
Auf ähnliche Weise kannst du auch andere Datensätze importieren, die in der Scikit-learn-Bibliothek verfügbar sind.
2. Teile deine Daten auf
Der erste Schritt vor dem Training eines maschinellen Lernalgorithmus besteht darin, den Datensatz in zwei Teile aufzuteilen: die Daten zum Trainieren des Modells und die Daten zum Testen des Modells (80% vs. 20% in den meisten Fällen).
Diese Aufteilung ist für den weiteren Verlauf der Arbeit entscheidend, denn sie ermöglicht es, :
- Eine Schätzung der Leistung des Modells bei neuen Daten zu erhalten;
- Erkennung von Overfitting – wenn ein Modell zu genau auf die Trainingsdaten abgestimmt ist, kann es möglicherweise nicht richtig auf neue Daten verallgemeinern;
- Optimierung der Hyperparameter – durch Anpassung der Modellparameter und Bewertung der Leistung im Testsatz;
- Überprüfen der Robustheit des Modells gegenüber unbekannten Daten in Situationen der realen Welt.
Die Funktion von Scikit-learn, die den Trainingssatz und den Testsatz in einer Zeile Code erstellt, heißt train_test_split :
from sklearn.model_selection import train_test_split
3. Verwende fortgeschrittene Techniken
Es ist möglich, das Niveau des Datenlernens zu erhöhen, indem man den Ansatz verwendet, bei dem mehrere Modelle zur Vorhersage der Zielvariable eingesetzt werden (anstatt sich auf ein einziges Modell zu verlassen). Das Hauptziel dieser Ensembletechnik ist es, den Kompromiss zwischen Varianz und Bias zu mildern.
Wir teilen den Datensatz nach dem Zufallsprinzip in Teilmengen auf, die dann verschiedenen Modellen zum Training vorgelegt werden. Wenn es an der Zeit ist, eine Vorhersage zu treffen, wird der Durchschnitt aller Vorhersagen, die von diesen Modellen erzeugt wurden, betrachtet.
Es gibt zwei Haupttechniken: Bagging (oder Bootstrap Aggregating) und Boosting.
Das Besondere am Bagging ist, dass die Eingaben für die verschiedenen Modelle unabhängig voneinander sind, wodurch eine Überanpassung vermieden wird.
In Scikit-learn kann die Klasse BaggingClassifier verwendet werden, um die Bagging-Technik auf verschiedene Algorithmen des maschinellen Lernens anzuwenden:
from sklearn.ensemble import BaggingClassifier
Diese Technik war eine Inspiration für die Schaffung von Random Forest (Zufallswald), denn eines der häufigsten Beispiele für Bagging ist die Verwendung mehrerer Entscheidungsbäume für die Vorhersage.
Boosting ist ein Ansatz, bei dem mehrere Modelle so trainiert werden, dass die Ausgabe eines Modells die Eingabe des nächsten Modells beeinflusst, wobei besonderes Augenmerk auf Daten gelegt wird, die falsch vorhergesagt wurden.
Um diese Technik nutzen zu können, kannst du die Klasse GradientBoostingClassifier für Klassifikationsprobleme importieren :
from sklearn.ensemble import GradientBoostingClassifier
oder GradientBoostingRegressor für Regressionsprobleme :
from sklearn.ensemble import GradientBoostingRegressor
4. Bewerte die Leistung deines Modells
Nach der Anwendung des Machine-Learning-Algorithmus ist es unerlässlich, die Leistung eines Modells zu bewerten. Die Funktion, um dies auf robustere und zuverlässigere Weise zu tun, heißt cross_val_score.
Der Hauptzweck dieser Funktion ist es, eine Kreuzvalidierung durchzuführen. Dabei wird die Nutzung der Trainingsdaten maximiert, indem sie in mehrere Teilmengen (Plis) aufgeteilt werden. Jedes dieser Falten wird dann abwechselnd als Validierungsset verwendet, während die anderen für das Training übrig bleiben.
Dies hilft, Verzerrungen durch eine einzelne Datenteilung zu vermeiden und ermöglicht (durch die durchschnittlichen Leistungswerte) eine realistischere Einschätzung der Robustheit des Modells über verschiedene Datenuntergruppen hinweg.
Hier ist der Code, um diese Funktion aus Scikit-learn zu importieren:
from sklearn.model_selection import cross_val_score
5. Bereinige deinen Code, indem du ihn eleganter und weniger verbraucherorientiert machst.
Die Pipeline-Funktion ermöglicht es, mehrere Vorverarbeitungs- und Modellierungsschritte in einer einzigen Sequenz zu kombinieren.
Dies erleichtert die Wiederholbarkeit des Prozesses und die konsistente Anwendung von Transformationen auf Trainings- und Testsets.
Hier ist ein Beispielcode, in dem wir die Daten standardisieren, die Dimensionsreduktion durchführen und ein Modell trainieren:
#Wir importieren die benötigten Funktionen.
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.metrics import mean_squared_error
#Wir führen das Splitting der Daten durch.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
#Wir normalisieren die Daten.
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
#Wir verkleinern die Dimension.
pca = PCA(n_components=3)
X_train_pca = pca.fit_transform(X_train_scaled)
X_test_pca = pca.transform(X_test_scaled)
#Wir trainieren das Modell.
regressor = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
regressor.fit(X_train_pca, y_train)
#Schließlich bewerten wir das Modell.
predictions = regressor.predict(X_test_pca)
mse = mean_squared_error(y_test, predictions)
Wir können denselben Code mit Pipeline wiederholen:
#Wir importieren die benötigten Funktionen.
from sklearn.pipeline import Pipeline
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.metrics import mean_squared_error
#Wir führen das Splitting der Daten durch.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42).
#Wir erstellen eine Pipeline.
pipeline = Pipeline([
(’scaler‘, StandardScaler()), #Wir normalisieren die Daten.
(‚pca‘, PCA(n_components=3)), #Wir reduzieren die Größe.
(‚regressor‘, GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42))
#Wir trainieren das Modell.
])
#Wir trainieren das Modell mithilfe der Pipeline.
pipeline.fit(X_train, y_train)
#Schließlich schätzen wir das Modell ab.
predictions = pipeline.predict(X_test)
mse = mean_squared_error(y_test, predictions)
print(„Mittlerer quadratischer Fehler:“, mse)
Die Verwendung von Pipeline, ermöglicht es uns, jeden Schritt mit einem spezifischen Namen zu definieren (z. B. ’scaler‘, ‚pca‘, ‚regressor‘), wodurch der Trainings- und Auswertungsprozess für das Modell vereinfacht wird.
Sie verringert die Notwendigkeit, ähnliche Schritte mehrmals zu wiederholen, was die Lesbarkeit des Codes verbessert. Im oberen Beispiel ist die Version mit Pipeline um etwa 4 Zeilen kürzer, was eine deutliche Reduzierung darstellt, vor allem, wenn die Anzahl der Vorverarbeitungs- und Modellierungsschritte zunimmt.
Fazit
Scikit-learn bietet eine Reihe von leistungsstarken Funktionen, die die Entwicklung deiner Modelle für maschinelles Lernen erheblich vereinfachen können.
Wenn du dich mit diesen fünf Funktionen beschäftigst, kannst du deine Effizienz steigern und robustere Ergebnisse erzielen. Du solltest diese Funktionen also noch heute in deine Machine-Learning-Toolbox aufnehmen!