Einführung
Der stochastische Gradientenabstieg (Stochastic Gradient Descent, SGD) ist ein beliebtes Optimierungsalgorithmus in der Maschinellen Lernens. Es ist eine Variante des Gradientenabstiegsalgorithmus, der bei jeder Iteration eine zufällig ausgewählte Teilmenge der Trainingsdaten verwendet. Dies macht es rechnerisch effizient und geeignet für die Verarbeitung großer Datensätze. In diesem Lab werden wir die Schritte zur Implementierung von SGD in Python mit scikit-learn durchgehen.
Tipps für die virtuelle Maschine (VM)
Nachdem die VM gestartet wurde, klicken Sie in der oberen linken Ecke auf die Registerkarte Notebook, um auf Jupyter Notebook für die Übung zuzugreifen.
Manchmal müssen Sie möglicherweise einige Sekunden warten, bis Jupyter Notebook fertig geladen hat. Die Validierung von Operationen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie während des Lernens Probleme haben, können Sie sich gerne an Labby wenden. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem umgehend für Sie lösen.
Importieren von Bibliotheken
Zunächst müssen wir die für dieses Lab erforderlichen Bibliotheken importieren, einschließlich scikit-learn.
import numpy as np
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
Daten laden
Als nächstes werden wir den Iris-Datensatz aus scikit-learn laden. Dieser Datensatz ist ein klassischer Datensatz für maschinelles Lernen, der aus Messungen von Schwertlilienblumen sowie deren Artenbezeichnungen besteht.
iris = load_iris()
X = iris.data
y = iris.target
Datenvorverarbeitung
Bevor wir SGD anwenden, ist es oft vorteilhaft, die Daten vorzuverarbeiten. In diesem Fall werden wir die Merkmale (Features) mit Hilfe von scikit-learns StandardScaler standardisieren.
scaler = StandardScaler()
X = scaler.fit_transform(X)
Daten aufteilen
Wir werden den Datensatz in einen Trainingssatz und einen Testsatz aufteilen. Der Trainingssatz wird verwendet, um den SGD-Klassifikator (SGD classifier) zu trainieren, während der Testsatz zur Bewertung seiner Leistung dient.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Klassifikator trainieren
Jetzt können wir den SGD-Klassifikator (SGD classifier) mit der Klasse SGDClassifier von scikit-learn erstellen und trainieren. Wir werden die 'hinge'-Verlustfunktion (loss function) verwenden, die häufig für lineare Klassifikatoren eingesetzt wird.
clf = SGDClassifier(loss='hinge', random_state=42)
clf.fit(X_train, y_train)
Vorhersagen treffen
Sobald der Klassifikator (classifier) trainiert ist, können wir ihn verwenden, um Vorhersagen für neue Daten zu treffen. Hier werden wir ihn nutzen, um die Zielklassen (target classes) für den Testsatz vorherzusagen.
y_pred = clf.predict(X_test)
Leistung bewerten
Schließlich werden wir die Leistung des Klassifikators (classifier) bewerten, indem wir die Genauigkeit (accuracy) seiner Vorhersagen auf dem Testsatz berechnen.
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
Zusammenfassung
In diesem Lab haben wir gelernt, wie man den stochastischen Gradientenabstieg (Stochastic Gradient Descent, SGD) mit scikit-learn implementiert. Wir haben den Iris-Datensatz (iris dataset) geladen, die Daten vorverarbeitet, sie in Trainings- und Testsätze aufgeteilt, einen SGD-Klassifikator (SGD classifier) trainiert, Vorhersagen getroffen und die Leistung des Klassifikators bewertet. SGD ist ein leistungsstarkes Optimierungsalgorithmus, der in der Maschinellen Lernens (Machine Learning) für groß angelegte Probleme weit verbreitet ist.