Python und Scikit-Learn

ML mit Python und Scikit-Learn

Wenn man eigene Machine Learning-Algorithmen implementieren möchte, dann wird man sehr wahrscheinlich mit Python und Scikit-Learn in Berührung kommen. Python ist die am häufigsten genutzte Programmiersprache für Data Science und Machine Learning und Scikit-Learn ist eine der bekanntesten Python-Bibliotheken mit einer großen Auswahl an Algorithmen. In diesem Post werde ich auf Python und Scikit-Learn etwas genauer eingehen und auch etwas Beispielcode zeigen.

Python

Was ist Python?

Python ist eine universelle und weit verbreitete Programmiersprache, die in vielen Anwendungsbereichen eingesetzt wird. Sie wurde in den späten 1980er Jahren von Guido van Rossum entwickelt und hat sich seitdem zu einer der beliebtesten Programmiersprachen entwickelt. Im Stack Overflow Developer Survey 2022 ist Python ganz oben mit dabei, hinter JavaScript, HTML/CSS und SQL. Unter den Programmiersprachen mit Fokus auf Data Science und Machine Learning ist Python somit auf Platz 1. Python kombiniert Einfachheit und Flexibilität und hat sich somit als bevorzugte Sprache für viele Use Cases etabliert.

Python und Machine Learning

Python hat sich als eine der bevorzugten Programmiersprachen für Machine Learning herauskristallisert. Einige der Gründe möchte ich kurz aufführen:

  • Python ist relativ einfach: Die Grundlagen von Python sind schnell zu erlernen und es gibt eine klare und lesbare Syntax.
  • Bibliotheken und Frameworks: Es existieren viele Bibliotheken und Frameworks für ML, z.B. Scikit-Learn, TensorFlow, Keras oder PyTorch.
  • Große Community: Die Python-Community ist groß und einige der wichtigsten ML-Bibliotheken wurden von Big Tech entwickelt (z.B. TensorFlow von Google Brain und PyTorch von Facebook/Meta) und anschließend Open Source gestellt.
  • Plattformunabhängigkeit: Python kann auf verschiedenen Betriebssystemen wie Windows, Linux und macOS ausgeführt werden.
  • Integration mit anderen Sprachen: Python kann problemlos mit anderen Programmiersprachen wie C, C++ oder Java kombiniert werden.
  • Cloud-Unterstützung: Viele Cloud-Services unterstützen Python. Beispielsweise kann man für AWS Lambda die Sprachen Java, Go, PowerShell, JavaScript (Node.js), C#, Python, und Ruby auswählen.

Scikit-Learn

Was ist Scikit-Learn?

Scikit-Learn ist eine der bekanntesten Python-Bibliotheken für Machine Learning. Sie ist primär in Python geschrieben, für eine höhere Performance sind einige Algorithmen mit Cython umgesetzt (Cython ist eine mit Python kompatible Programmiersprache, die es zulässt, den Code in C zu kompilieren). Scikit-Learn bietet für verschiedenste Use Cases im Maschinellen Lernen die relevanten Algorithmen: z.B. Klassifikation, Regression, Clustering und Dimensionalitätsreduktion. Die Bibliothek ist einfach zu nutzen, flexibel und gut dokumentiert – gute Voraussetzungen für die schnelle Entwicklung und Implementierung von ML-Modellen in verschiedenen Anwendungsbereichen.

Hauptmerkmale von Scikit-Learn

Einige der Hauptmerkmale der Bibliothek sind:

  • Verschiedene ML-Algorithmen wie z.B. Klassifikation, Regression, Clustering und Dimensionalitätsreduktion
  • Gut konzipierte, konsistente Schnittstellen für die Verwendung der verschiedenen Algorithmen
  • Umfangreiche Dokumentation und viele Beispiele, die den Einstieg erleichtern
  • Performante Algorithmen, sodass die Algorithmen auch für größere Datenmengen angewendet werden können
  • Funktionen bzw. Klassen für Modellevaluation und Hyperparameter-Tuning

Installation von Python und Scikit-Learn

Installation von Python

Du findest Python auf der offiziellen Website (https://www.python.org). Vor einiger Zeit gab es noch die Debatte, ob man Python 2 oder Python 3 nutzen sollte, weil viele Projekte auf Python 2 basierten, die Versionen aber nicht miteinander kompatibel sind und man sich somit für eine Version entscheiden musste. Seit 2020 gibt es aber gar keinen Support mehr für Python 2 und in vielen Organisationen wurde der Legacy-Code auf Python 3 migriert. Lade dir also am besten die neueste Python-Version herunter und installiere es auf deinem Rechner.

Als nächstes kann ein Projekt erstellt werden. Es ist empfehlenswert, eine virtuelle Umgebung (engl. „Virtual Environment“) zu nutzen, da man so für unterschiedliche Projekte unterschiedliche Paketversionen nutzen kann. Dazu kann man „venv“ verwenden, doch es gibt auch spezifische Dependency Manager wie z.B. Poetry. Um eine neue virtuelle Umgebung mit venv zu erstellen, führe folgenden Code im Projektordner aus: python -m venv mein_venv_name
Nun kann die virtuelle Umgebung aktiviert und genutzt werden:

  • Unter Windows: mein_venv_name\Scripts\activate
  • Unter Linux/Mac: source mein_venv_name/bin/activate

Installation von Scikit-Learn

Nun können wir das Paket scikit-learn installieren. Das machen wir mit dem Paketmanager pip (Akronym für „pip installs packages“), der Pakete aus PyPI (Python Package Index) herunterlädt und installiert: pip install scikit-learn. Bei der Installation von Scikit-Learn werden auch alle benötigten Abhängigkeiten mitinstalliert (z.B. NumPy und SciPy).

Clustering-Beispiel mit Scikit-Learn

Nun schauen wir uns nun ein einfaches Beispiel für Clustering an. Wir erstellen einen synthetischen Datensatz mit zwei Variablen X1 und X2. Diese könnten z.B. für Kundenmerkmale stehen und unser Ziel ist es nun, eine Kundensegmentierung vorzunehmen.

# Importe
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# Synthetische Daten erzeugen
n_samples_per_group = 100
group1 = np.random.normal(loc=[2, 30], scale=[1.5, 15], size=(n_samples_per_group, 2))
group2 = np.random.normal(loc=[5, 95], scale=[2.0, 5], size=(n_samples_per_group, 2))
group3 = np.random.normal(loc=[8, 50], scale=[1.0, 10], size=(n_samples_per_group, 2))
data = np.vstack((group1, group2, group3))

# Daten standardisieren
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)

# Modell trainieren
n_clusters = 3
kmeans = KMeans(n_clusters=n_clusters, random_state=0, n_init='auto')
kmeans.fit(data_scaled)

# Clusterzentren und Label
centers_scaled = kmeans.cluster_centers_
labels = kmeans.labels_

# Umrechnung der Clusterzentren
centers = scaler.inverse_transform(centers_scaled)

# Ergebnisse visualisieren
plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='firebrick', marker='x', s=200)
plt.xlabel('Erste Variable')
plt.ylabel('Zweite Variable')
plt.title('K-Means Clustering Beispiel')
plt.show()

In den ersten Zeilen importieren wir Bibliotheken und Klassen, die wir später nutzen. Darunter numpy für das Erstellen der synthetischen Daten, matplotlib.pyplot für die Visualisierung, KMeans als Klasse für das Clustering und StandardScaler für das Standardisieren der Daten. Die letzten beiden Importe sind aus Scikit-Learn.

In den Zeilen 8 bis 12 erstellen wir unseren synthetischen Datensatz. Wir erstellen mit Hilfe von Zufallszahlen drei Gruppen und fügen die Daten in einem Datensatz zusammen. Es braucht nur zwei weitere Zeilen (15 und 16), um die Daten zu standardisieren, damit der Clustering-Algorithmus besser funktioniert.

Das Modelltraining findet in den Zeilen 20 und 21 statt. Aufgepasst: wir geben die Anzahl der Cluster vor (n_clusters = 3). In der Realität würde man nicht unbedingt die richtige Anzahl der Cluster kennen; da würde man dann verschiedene Werte testen.

In den weiteren Zeilen werden die Clusterzentren und Label dem Modell entnommen und die Clusterzentren auf die ursprünglichen Achsen zurückgerechnet. Nun können wir die Ergebnisse visualisieren. Dazu nutzen wir das Paket matplotlib. Das Ergebnis sieht etwa so aus:

Clustering mit Scikit-Learn
K-Means Clustering mit Scikit-Learn

Wie anfangs schon erwähnt, könnten X1 und X2 für bestimmte Kundenmerkmale stehen. Über das Clustering hätten wir nun herausgefunden, wo die drei Gruppen auf diesen Merkmalen liegen. Dies kombiniert mit dem notwendigen Branchenwissen kann zu interessanten Entdeckungen führen, die man anschließend nutzen kann.

Zusammenfassung

Python und Scikit-Learn sind essenzielle Werkzeuge im Bereich Data Science und Machine Learning. Python ist eine leicht zugängliche und vielseitige Programmiersprache, hat eine große Community und bekannte ML-Bibliotheken. Aus diesen Gründen hat sie sich als die Top-Programmiersprache für ML-Lösungen etabliert. Scikit-Learn ist eine der bekanntesten Python-Bibliotheken für Machine Learning und bietet eine Vielzahl von Algorithmen für unterschiedliche Use Cases.

Im praktischen Part des Posts haben wir gesehen, wie man Python und Scikit-Learn installiert und wie man ein simples K-Means Clustering durchführt. Der synthetische Datensatz könnte dabei für zwei Kundenmerkmale stehen, die wir für eine Kundensegmentierung nutzen möchten. Das Beispiel soll verdeutlichen, dass man mit Python und Scikit-Learn schnell einen Prototypen entwickeln und wertvolle Erkenntnisse gewinnen kann, was wiederum eine gute Grundlage für datengesteuertes Entscheidungsmanagement ist.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert