Scikit-learn Lineare Regression

scikit-learnBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie die Grundlagen des Aufbaus eines Machine-Learning-Modells mit einer der beliebtesten Python-Bibliotheken, scikit-learn. Wir konzentrieren uns auf die Lineare Regression, einen einfachen, aber leistungsstarken Algorithmus zur Vorhersage eines kontinuierlichen Wertes, wie z. B. eines Preises oder einer Temperatur.

Unser Ziel ist es, ein Modell zu erstellen, das die Median-Immobilienpreise in kalifornischen Bezirken vorhersagen kann. Wir werden den kalifornischen Immobiliendatensatz verwenden, der bequem in scikit-learn enthalten ist.

In diesem Lab lernen Sie Folgendes:

  • Laden eines Datensatzes aus scikit-learn.
  • Vorbereiten und Aufteilen der Daten für Training und Test.
  • Erstellen und Trainieren eines Linearen Regressionsmodells.
  • Verwenden des trainierten Modells zur Erstellung von Vorhersagen.

Alle Aufgaben werden Sie innerhalb der WebIDE ausführen. Los geht's!

Laden des California Housing Datensatzes mit datasets.fetch_california_housing()

In diesem Schritt laden wir zunächst den Datensatz für unser Modell. scikit-learn enthält mehrere integrierte Datensätze, die sich hervorragend zum Lernen und Üben eignen. Wir werden den California Housing Datensatz verwenden.

Zuerst müssen wir ein Python-Skript erstellen. Eine Datei namens main.py wurde bereits für Sie im Verzeichnis ~/project erstellt. Sie finden sie im Dateiexplorer auf der linken Seite der WebIDE.

Öffnen Sie main.py und fügen Sie den folgenden Code hinzu. Dieser Code importiert die notwendigen Bibliotheken (fetch_california_housing aus sklearn.datasets und pandas) und lädt den Datensatz. Wir werden pandas verwenden, um die Daten in einen DataFrame zu konvertieren, eine tabellarische Datenstruktur, die leicht anzuzeigen und zu manipulieren ist.

Bitte fügen Sie den folgenden Code zu main.py hinzu:

import pandas as pd
from sklearn.datasets import fetch_california_housing

## Load the California housing dataset
california = fetch_california_housing()

## Create a DataFrame
california_df = pd.DataFrame(california.data, columns=california.feature_names)
california_df['MedHouseVal'] = california.target

## Print the first 5 rows of the DataFrame
print("California Housing Dataset:")
print(california_df.head())

Lassen Sie uns nun das Skript ausführen, um die Ausgabe zu sehen. Öffnen Sie ein Terminal in der WebIDE (Sie können das Menü "Terminal" -> "New Terminal" verwenden) und führen Sie den folgenden Befehl aus:

python3 main.py

Sie sollten die ersten fünf Zeilen des Datensatzes auf der Konsole sehen. Die Spalte MedHouseVal ist unsere Zielvariable, die den Median-Immobilienwert für kalifornische Bezirke darstellt, ausgedrückt in Hunderttausenden von Dollar (100.000 $).

California Housing Dataset:
   MedInc  HouseAge  AveRooms  AveBedrms  Population  AveOccup  Latitude  Longitude  MedHouseVal
0  8.3252      41.0  6.984127   1.023810       322.0  2.555556     37.88    -122.23        4.526
1  8.3014      21.0  6.238137   0.971880      2401.0  2.109842     37.86    -122.22        3.585
2  7.2574      52.0  8.288136   1.073446       496.0  2.802260     37.85    -122.24        3.521
3  5.6431      52.0  5.817352   1.073059       558.0  2.547945     37.85    -122.25        3.413
4  3.8462      52.0  6.281853   1.081081       565.0  2.181467     37.85    -122.25        3.422

Datenaufteilung in Trainings- und Testsets mit train_test_split aus sklearn.model_selection

In diesem Schritt bereiten wir unsere Daten für den Trainingsprozess vor. Ein entscheidender Teil des maschinellen Lernens ist die Bewertung des Modells anhand von Daten, die es noch nie zuvor gesehen hat. Dazu teilen wir unseren Datensatz in zwei Teile auf: ein Trainingsset und ein Testset. Das Modell lernt aus dem Trainingsset, und wir verwenden das Testset, um zu sehen, wie gut es abschneidet.

Zuerst müssen wir unsere Features (die Eingabevariablen, X) von unserem Ziel (dem Wert, den wir vorhersagen möchten, y) trennen. In unserem Fall wird X aus allen Spalten außer MedHouseVal bestehen, und y wird die Spalte MedHouseVal sein.

Anschließend verwenden wir die Funktion train_test_split aus sklearn.model_selection, um die Aufteilung durchzuführen.

Fügen Sie den folgenden Code zu Ihrer Datei main.py hinzu.

from sklearn.model_selection import train_test_split

## Prepare the data
X = california_df.drop('MedHouseVal', axis=1)  ## Features (input variables)
y = california_df['MedHouseVal']  ## Target variable (what we want to predict)

## Split the data into training and testing sets
## test_size=0.2: Reserve 20% of data for testing, 80% for training
## random_state=42: Ensures reproducible splits (same result every run)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

## Print the shapes of the new datasets to confirm the split
print("\n--- Data Split ---")
print("X_train shape:", X_train.shape)  ## Training features
print("X_test shape:", X_test.shape)    ## Test features
print("y_train shape:", y_train.shape)  ## Training target values
print("y_test shape:", y_test.shape)    ## Test target values

Führen Sie das Skript nun erneut im Terminal aus:

python3 main.py

Sie sehen die Formen der neu erstellten Trainings- und Testsets unter dem DataFrame ausgegeben. Dies bestätigt, dass die Daten korrekt aufgeteilt wurden.

--- Data Split ---
X_train shape: (16512, 8)
X_test shape: (4128, 8)
y_train shape: (16512,)
y_test shape: (4128,)

Initialisierung des LinearRegression-Modells aus sklearn.linear_model

In diesem Schritt erstellen wir unser Lineares Regressionsmodell. scikit-learn macht dies unglaublich einfach. Wir müssen lediglich die Klasse LinearRegression aus dem Modul sklearn.linear_model importieren und dann eine Instanz davon erstellen.

Diese Instanz ist ein Objekt, das den Algorithmus der linearen Regression enthält. Die lineare Regression findet die bestangepasste Linie durch die Datenpunkte unter Verwendung der Formel: y = mx + b, wobei m die Koeffizienten (Gewichte) für jedes Merkmal und b der Achsenabschnitt ist. Hier verwenden wir Standardparameter, die für die meisten grundlegenden Fälle gut funktionieren.

Linear Regression Formula
Abbildung 1: Formel der linearen Regression y = mx + b, wobei m die Steigung und b der Achsenabschnitt ist

Fügen Sie den folgenden Code zu Ihrer main.py-Datei hinzu. Dies importiert die Klasse LinearRegression und erstellt ein Modellobjekt.

from sklearn.linear_model import LinearRegression

## Initialisieren des Linearen Regressionsmodells
model = LinearRegression()

## Ausgabe des Modells zur Bestätigung der Erstellung
print("\n--- Model Initialized ---")
print(model)

Führen Sie Ihr main.py-Skript erneut über das Terminal aus:

python3 main.py

Die Ausgabe enthält nun eine Zeile, die das LinearRegression-Objekt anzeigt. Dies bestätigt, dass das Modell erfolgreich initialisiert wurde.

--- Model Initialized ---
LinearRegression()

Modell anpassen mit model.fit(X_train, y_train)

In diesem Schritt trainieren wir unser Modell. Dieser Prozess wird oft als "Anpassen" (Fitting) des Modells an die Daten bezeichnet. Während des Anpassens lernt das Modell die Beziehungen zwischen den Features (X_train) und der Zielvariablen (y_train). Bei der linearen Regression bedeutet dies, die optimalen Koeffizienten für jedes Feature zu finden, um das Ziel am besten vorherzusagen.

Wir verwenden die Methode fit() unseres Modellobjekts und übergeben unsere Trainingsdaten als Argumente.

Fügen Sie den folgenden Code zu Ihrer Datei main.py hinzu.

## Fit (train) the model on the training data
## The fit() method learns the relationship between features (X_train) and target (y_train)
## It calculates optimal coefficients for each feature and the intercept using least squares optimization
model.fit(X_train, y_train)

## After fitting, the model has learned the coefficients and intercept.
## The intercept represents the predicted value when all features are zero
print("\n--- Model Trained ---")
print("Intercept:", model.intercept_)

Führen Sie das Skript nun vom Terminal aus:

python3 main.py

Nachdem das Skript ausgeführt wurde, sehen Sie einen neuen Abschnitt in der Ausgabe, der den Achsenabschnitt (Intercept) des linearen Regressionsmodells anzeigt. Der Achsenabschnitt ist der Wert der Vorhersage, wenn alle Feature-Werte null sind. Das Anzeigen eines numerischen Werts hier bestätigt, dass das Modell erfolgreich auf den Daten trainiert wurde.

--- Model Trained ---
Intercept: -37.023277706064185

Vorhersagen auf Testdaten mit model.predict(X_test) treffen

In diesem letzten Schritt verwenden wir unser trainiertes Modell, um Vorhersagen zu treffen. Dies ist das ultimative Ziel beim Erstellen eines prädiktiven Modells. Wir werden die Testdaten (X_test) verwenden, die das Modell während des Trainings nicht gesehen hat, um seine Leistung zu bewerten.

Wir verwenden die Methode predict() unseres trainierten Modellobjekts und übergeben die Test-Features (X_test) als Argument. Die Methode gibt ein Array von vorhergesagten Werten für die Zielvariable zurück.

Fügen Sie den folgenden Code zu Ihrer Datei main.py hinzu.

## Make predictions on the test data
## The predict() method uses the learned coefficients and intercept to calculate predictions
## Formula: prediction = intercept + (coeff1 * feature1) + (coeff2 * feature2) + ...
predictions = model.predict(X_test)

## Print the first 5 predictions (values are in $100,000 units)
print("\n--- Predictions ---")
print(predictions[:5])

Führen Sie nun das vollständige Skript ein letztes Mal vom Terminal aus:

python3 main.py

Die Ausgabe enthält nun die ersten fünf vorhergesagten Hauspreise für den Testdatensatz. Diese Werte sind das, was unser Modell basierend auf den Features in X_test für die medianen Hauswerte hält. Sie können diese Vorhersagen konzeptionell mit den tatsächlichen Werten in y_test vergleichen, um die Genauigkeit des Modells einzuschätzen.

--- Predictions ---
[0.71912284 1.76401657 2.70965883 2.83892593 2.60465725]

Herzlichen Glückwunsch! Sie haben erfolgreich ein lineares Regressionsmodell mit scikit-learn erstellt, trainiert und verwendet.

Zusammenfassung

In diesem Lab haben Sie den gesamten Workflow für den Aufbau eines grundlegenden Machine-Learning-Modells mit scikit-learn abgeschlossen.

Sie haben mit dem Laden des California Housing Datensatzes begonnen und ihn mit pandas vorbereitet. Anschließend haben Sie die Bedeutung der Aufteilung Ihrer Daten in Trainings- und Testsets gelernt und die Aufteilung mit train_test_split durchgeführt.

Danach haben Sie ein LinearRegression-Modell initialisiert, es mit der fit()-Methode auf Ihren Trainingsdaten trainiert und schließlich das trainierte Modell verwendet, um mit der predict()-Methode Vorhersagen auf ungesehenen Testdaten zu treffen.

Dieses Lab bietet eine solide Grundlage in scikit-learn. Von hier aus können Sie fortgeschrittenere Themen erkunden, wie zum Beispiel:

  • Modellbewertung: Berechnung von Metriken wie Mean Squared Error (MSE) oder R-squared zur Messung der Modellgenauigkeit
  • Feature-Skalierung: Standardisierung oder Normalisierung von Features für eine bessere Leistung
  • Regularisierung: Verwendung von Ridge- oder Lasso-Regression zur Vermeidung von Overfitting
  • Kreuzvalidierung: Robustere Bewertung mittels k-facher Kreuzvalidierung
  • Andere Algorithmen: Ausprobieren von Random Forest, Support Vector Machines oder Neuronalen Netzen

Summary

In this lab, you have completed the entire workflow for building a basic machine learning model using scikit-learn.

You started by loading the California housing dataset and preparing it using pandas. Then, you learned the importance of splitting your data into training and testing sets and performed the split using train_test_split.

Following that, you initialized a LinearRegression model, trained it on your training data using the fit() method, used the trained model to make predictions on unseen test data with the predict() method, and finally visualized the results to understand your model's performance.

This lab provides a solid foundation in scikit-learn. From here, you can explore more advanced topics such as:

  • Model evaluation: Calculate metrics like Mean Squared Error (MSE) or R-squared to measure model accuracy
  • Data visualization: Create more advanced plots like residual plots, feature importance charts, or correlation matrices
  • Feature scaling: Standardize or normalize features for better performance
  • Regularization: Use Ridge or Lasso regression to prevent overfitting
  • Cross-validation: More robust evaluation using k-fold cross-validation
  • Other algorithms: Try Random Forest, Support Vector Machines, or Neural Networks