Ein Python-Beispiel für Lineare Regression im Machine Learning

Nachdem wir uns vorher bewusst gemacht haben, was Lineare Regression ist und wofür man dieses statistische Werkzeug verwenden kann, blicken wir in diesem Beitrag auf einen praktischen Einsatz mithilfe eines Python-Beispiels für Lineare Regression im Machine Learning. Wir beginnen zunächst mit einem Blick auf die beiden dafür notwendigen Bibliotheken: NumPy und Scikit-learn.

Die Bibliothek NumPy

NumPy ist eine Python-Bibliothek, die für die Bearbeitung von numerischen Daten verwendet wird. Es bietet Funktionen und Klassen, die es ermöglichen, große Mengen von numerischen Daten schnell und effizient zu speichern und zu bearbeiten. NumPy wird häufig in Bereichen wie wissenschaftlichem Rechnen, maschinellem Lernen und Datenanalyse verwendet, da es die Berechnungen beschleunigen und die Entwicklung von Code erleichtern kann. Einige der wichtigsten Funktionen von NumPy sind die Unterstützung für mehrdimensionale Arrays, die Bereitstellung von Funktionen zum Berechnen von mathematischen Operationen auf diesen Arrays und die Integration mit anderen Bibliotheken wie SciPy und Matplotlib.

Die Bibliothek Scikit-learn (sklearn)

Scikit-learn ist eine Open-Source-Python-Bibliothek für maschinelles Lernen. Sie bietet verschiedene Algorithmen und Werkzeuge, die es ermöglichen, maschinelles Lernen in Python zu implementieren und durchzuführen. Scikit-learn ist besonders nützlich für die Implementierung von Algorithmen wie Klassifikation, Regression, Clustering und Dimensionenreduktion. Es ist auch leicht zu bedienen und bietet eine Vielzahl von Dokumentationen und Beispielen, die es Einsteigern erleichtern, damit zu beginnen. Scikit-learn wird oft in Bereichen wie Datenanalyse, Bilderkennung und Natur Sprachverarbeitung eingesetzt und kann in Verbindung mit anderen Bibliotheken wie NumPy und Matplotlib verwendet werden.

Beispiel für Lineare Regression in Python

#!/usr/bin/python3

# Bibliotheken importieren
import numpy as np
from sklearn.linear_model import LinearRegression

# Beispieldaten erstellen
x = np.array([1, 2, 3, 4, 5]).reshape((-1, 1))
y = np.array([10, 20, 30, 40, 50])

# Das Model für die Lineare Regression erstellen
model = LinearRegression()

# Das Model den Daten anpassen
model.fit(x,y)

# Das Model prüfen, wie sicher seiner Genauigkeit ist.
r_sq = model.score(x,y)
print(f"Coefficient of determination: {r_sq}")

# Nun verwenden wir das Model, um eine Voraussage für eine neue Eingabe zu treffen.
pred = model.predict([[6]])
print(f"Predicted response: {pred}")

In diesem Beispiel definieren wir zunächst unsere Daten (x und y) und erstellen dann ein Linear-Regression-Model. Auffällig ist bei unserem ersten Array, dass darauf die Funktion reshape angewandt wird. Diese wird verwendet, um die Form eines NumPy-Arrays zu ändern. Sie nimmt zwei Argumente an: die gewünschte Form des Arrays und die Anzahl der Achsen (optional).

In dem Beispiel x = np.array([1, 2, 3, 4, 5]).reshape((-1, 1)) wird ein NumPy-Array erstellt und dann mit der reshape-Funktion in eine neue Form gebracht. Das Array x hat dann die folgende Form:

[[1]
[2]
[3]
[4]
[5]]

Die reshape-Funktion nimmt als Argumente eine gewünschte Form für das Array an. In diesem Fall haben wir die Form (-1, 1) angegeben, was bedeutet, dass das Array eine Dimension von -1 haben soll. Das sieht auf dem ersten Blick unpassend aus, bedeutet aber, dass die Dimension automatisch so gewählt wird, dass die Gesamtzahl der Elemente im Array erhalten bleibt. Die zweite Dimension wurde auf 1 gesetzt, was bedeutet, dass jedes Element des Arrays in einer eigenen Zeile angezeigt wird.

Das Array x hat damit eine Dimension von 5 und jedes Element des Arrays wird in einer eigenen Zeile angezeigt. Die Gesamtzahl der Elemente im Array bleibt die gleiche, aber die Form des Arrays wurde geändert.

Anschließend passen wir das Model an die Daten an und verwenden es dann, um den Wert von y für einen neuen x-Wert zu schätzen.

Falls bei der Ausführung dieses Skripts Fehler im Stile von
ModuleNotFoundError: No module named 'sklearn'
oder
ModuleNotFoundError: No module named 'numpy'
auftauchen, dann fehlt die Bibliothek, die hier genannt wird. Sie lässt sich mithilfe von pip installieren:

pip install -U scikit-learn
pip install -U numpy

Mit dem Parameter „-U“ teilt man pip mit, dass eine eventuell vorhandene Installation aktualisiert werden soll. Falls keine installiert ist, dann holt pip das in diesem Zuge nach.

Python-Skript ausführen

Wir speichern das Skript an den gewünschten Ort im Dateisystem, ich habe mein Skript unter dem Namen „linear_reg.py“ gesichert.

Wir navigieren im Terminal in das Verzeichnis, wo sich das Skript befindet und mit dem Aufruf
python3 -m linear_reg.py
führen wir das Skript nun aus und bekommen folgende Ausgabe:
Coefficient of determination: 1.0
Predicted response: [60.]

Unser kurzes Skript antwortet mit „60“ auf die Aufforderung, uns eine Vorhersage auf Basis der Eingabe von „6“ zu machen. Angesichts der Trainingsdaten, die wir zur Verfügung gestellt haben, ist das eine absolut passende Vorhersage.

Bekräftigt wird dies zusätzlich von der Ausgabe des „Coefficient of determination“ mit dem von uns durch den Aufruf von model.score(x,y) ermittelten Wert von „1.0“.

Ein paar Worte zu model.score(x,y)

Der Wert, der bei model.score(x,y) ermittelt wird, ist der Genauigkeitswert des Machine Learning-Modells. Dieser Wert gibt an, wie gut das Modell bei der Vorhersage von Ergebnissen auf neuen, unbekannten Daten ist.

Ein hoher Genauigkeitswert bedeutet, dass das Modell gut in der Lage ist, auf neuen Daten zu generalisieren und präzise Vorhersagen zu treffen. Ein niedriger Genauigkeitswert hingegen bedeutet, dass das Modell möglicherweise nicht gut in der Lage ist, auf neuen Daten zu generalisieren und kann daher ungenaue Vorhersagen treffen.

Um den Genauigkeitswert eines Modells zu interpretieren, sollte man ihn immer im Kontext der Anwendung und der verwendeten Daten betrachten. Ein Genauigkeitswert von 0,95 (95%) kann in einem Anwendungsbereich als sehr gut angesehen werden, während er in einem anderen Anwendungsbereich möglicherweise als unzureichend betrachtet wird. Es ist wichtig, den Genauigkeitswert immer im Kontext der spezifischen Anwendung zu interpretieren.

Der Maximalwert, der bei model.score(x,y) ermittelt werden kann, ist 1.0. Dieser Wert wird erreicht, wenn das Machine Learning-Modell perfekt in der Lage ist, die Ergebnisse auf neuen, unbekannten Daten zu generalisieren und korrekte Vorhersagen zu treffen.

Der Minimalwert, der bei model.score(x,y) ermittelt werden kann, ist 0.0. Dieser Wert wird erreicht, wenn das Modell keine Fähigkeit hat, auf neuen Daten zu generalisieren und immer falsche Vorhersagen trifft.

Es ist wichtig zu beachten, dass die tatsächlichen Werte, die bei model.score(x,y) ermittelt werden, je nach Anwendung und verwendeten Daten variieren können. Der Maximal- und Minimalwert sind lediglich die Grenzen des möglichen Wertebereichs für den Genauigkeitswert eines Machine Learning-Modells.