So erstellen Sie einen Maschinenlernklassifizierer in Python mit Scikit-learn
Einführung
Maschinenlernen ist ein Forschungsfeld in der Informatik, künstlicher Intelligenz und Statistik. Der Fokus des Maschinenlernens liegt darauf, Algorithmen zu trainieren, Muster zu lernen und Vorhersagen aus Daten zu treffen. Maschinenlernen ist besonders wertvoll, da es uns ermöglicht, Computer zur Automatisierung von Entscheidungsprozessen zu nutzen.
Sie werden Anwendungen von maschinellem Lernen überall finden. Netflix und Amazon verwenden maschinelles Lernen, um neue Produktvorschläge zu machen. Banken nutzen maschinelles Lernen, um betrügerische Aktivitäten bei Kreditkartentransaktionen zu erkennen, und Gesundheitsunternehmen beginnen, maschinelles Lernen einzusetzen, um Patienten zu überwachen, zu bewerten und zu diagnostizieren.
In diesem Tutorial werden Sie einen einfachen Machine-Learning-Algorithmus in Python mit Scikit-learn implementieren, einem Machine-Learning-Tool für Python. Mit einer Datenbank von Informationen über Brustkrebs-Tumore werden Sie einen Naive Bayes (NB) Klassifikator verwenden, der vorhersagt, ob ein Tumor bösartig oder gutartig ist.
Am Ende dieses Tutorials werden Sie wissen, wie Sie Ihr eigenes Machine-Learning-Modell in Python erstellen.
Voraussetzungen
Um dieses Tutorial abzuschließen, benötigen Sie:
Python 3 und eine lokale Programmierumgebung, die auf Ihrem Computer eingerichtet ist. Sie können die entsprechende Installations- und Einrichtungshinweise für Ihr Betriebssystem befolgen, um dies zu konfigurieren.
- Wenn Sie neu in Python sind, können Sie sich mit "Wie man in Python 3 programmiert" vertraut machen, um die Sprache kennenzulernen.
Schritt 1 — Importieren von Scikit-learn
Lassen Sie uns damit beginnen, das Python-Modul Scikit-learn zu installieren, eine der besten und am besten dokumentierten Machine Learning-Bibliotheken für Python.
Um unser Code-Projekt zu beginnen, lassen Sie uns unsere Python 3-Programmierumgebung aktivieren. Stellen Sie sicher, dass Sie sich im Verzeichnis befinden, in dem sich Ihre Umgebung befindet, und führen Sie den folgenden Befehl aus:
- . my_env/bin/activate
Mit unserer aktivierten Programmierumgebung überprüfen Sie, ob das Sckikit-learn-Modul bereits installiert ist:
- python -c "import sklearn"
Wenn sklearn installiert ist, wird dieser Befehl ohne Fehler abgeschlossen. Wenn es nicht installiert ist, sehen Sie die folgende Fehlermeldung:
Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'
Die Fehlermeldung weist darauf hin, dass sklearn nicht installiert ist, also lade die Bibliothek mit pip herunter:
- pip install scikit-learn[alldeps]
Sobald die Installation abgeschlossen ist, starten Sie Jupyter Notebook:
- jupyter notebook
Erstellen Sie in Jupyter ein neues Python-Notebook mit dem Namen ML Tutorial. Importieren Sie in der ersten Zelle des Notebooks das sklearn-Modul:
import sklearn
Ihr Notizbuch sollte wie die folgende Abbildung aussehen:
Jetzt, wo wir sklearn in unserem Notizbuch importiert haben, können wir mit dem Datensatz für unser Machine-Learning-Modell beginnen.
Schritt 2 — Importieren des Datensatzes von Scikit-learn
Das Datenset, mit dem wir in diesem Tutorial arbeiten werden, ist die Breast Cancer Wisconsin Diagnostic Database. Das Datenset enthält verschiedene Informationen über Brustkrebs-Tumore sowie Klassifikationsbezeichnungen von bösartig oder gutartig. Das Datenset hat 569 Instanzen oder Daten zu 569 Tumoren und umfasst Informationen über 30 Attribute oder Merkmale, wie den Radius des Tumors, die Textur, die Glattheit und die Fläche.
Mit diesem Datensatz werden wir ein Machine-Learning-Modell erstellen, um Tumorinformationen zu verwenden, um vorherzusagen, ob ein Tumor bösartig oder gutartig ist.
Scikit-learn kommt mit verschiedenen Datensätzen, die wir in Python laden können, und der Datensatz, den wir wollen, ist enthalten. Importieren Sie den Datensatz und laden Sie ihn:
...
from sklearn.datasets import load_breast_cancer
Load dataset
data = load_breast_cancer()
Die data Variable repräsentiert ein Python-Objekt, das wie ein Wörterbuch funktioniert. Die wichtigen Wörterbuchschlüssel, die zu beachten sind, sind die Klassifikationsbezeichnungen (target_names), die tatsächlichen Bezeichnungen (target), die Attribut-/Merkmalsbezeichnungen (feature_names) und die Attribute (data).
Attribute sind ein kritischer Bestandteil jedes Klassifikators. Attribute erfassen wichtige Merkmale über die Beschaffenheit der Daten. Angesichts des Labels, das wir vorhersagen möchten (bösartiger im Vergleich zu gutartigem Tumor), können nützliche Attribute die Größe, den Durchmesser und die Textur des Tumors umfassen.
Erstellen Sie neue Variablen für jede wichtige Informationsgruppe und weisen Sie die Daten zu:
...
Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']
Wir haben jetzt Listen für jede Informationsgruppe. Um ein besseres Verständnis für unseren Datensatz zu bekommen, schauen wir uns unsere Daten an, indem wir unsere Klassenbezeichnungen, das Label der ersten Dateninstanz, unsere Merkmalsnamen und die Merkmalswerte für die erste Dateninstanz ausdrucken:
...
Look at our data
print(label_names)
print(labels[0])
print(feature_names[0])
print(features[0])
Sie werden die folgenden Ergebnisse sehen, wenn Sie den Code ausführen:
Wie das Bild zeigt, lauten unsere Klassennamen bösartig und gutartig, die dann auf binäre Werte von 0 und 1 abgebildet werden, wobei 0 bösartige Tumoren und 1 gutartige Tumoren darstellt. Daher ist unser erster Dateninstanz ein bösartiger Tumor, dessen mittelerer Radius 1.79900000e+01 beträgt.
Jetzt, da wir unsere Daten geladen haben, können wir mit unseren Daten arbeiten, um unseren Machine Learning-Klassifikator zu erstellen.
Schritt 3 — Daten in Sätze organisieren
Um zu bewerten, wie gut ein Klassifikator arbeitet, sollten Sie das Modell immer mit nicht gesehenen Daten testen. Daher sollten Sie Ihre Daten vor dem Erstellen eines Modells in zwei Teile aufteilen: ein Trainingssatz und ein Testdatensatz.
Sie verwenden den Trainingssatz, um das Modell während der Entwicklungsphase zu trainieren und zu evaluieren. Anschließend verwenden Sie das trainierte Modell, um Vorhersagen auf dem unsichtbaren Testdatensatz zu treffen. Dieser Ansatz gibt Ihnen ein Gefühl für die Leistung und Robustheit des Modells.
Glücklicherweise verfügt sklearn über eine Funktion namens train_test_split(), die Ihre Daten in diese Sätze aufteilt. Importieren Sie die Funktion und verwenden Sie sie dann, um die Daten aufzuteilen:
...
from sklearn.model_selection import train_test_split
Split our data
train, test, train_labels, test_labels = train_test_split(features,
labels,
test_size=0.33,
random_state=42)
Die Funktion teilt die Daten zufällig unter Verwendung des test_size Parameters. In diesem Beispiel haben wir jetzt ein Testset (test), das 33% des ursprünglichen Datensatzes repräsentiert. Die verbleibenden Daten (train) bilden dann die Trainingsdaten. Wir haben auch die entsprechenden Labels für beide Variablen train/test, d.h. train_labels und test_labels.
Jetzt können wir mit dem Training unseres ersten Modells fortfahren.
Schritt 4 — Modell erstellen und evaluieren
Es gibt viele Modelle für maschinelles Lernen, und jedes Modell hat seine eigenen Stärken und Schwächen. In diesem Tutorial werden wir uns auf einen einfachen Algorithmus konzentrieren, der in der Regel gut bei binären Klassifikationsaufgaben abschneidet, nämlich Naive Bayes (NB).
Importieren Sie zunächst das GaussianNB Modul. Initialisieren Sie dann das Modell mit der GaussianNB() Funktion und trainieren Sie das Modell, indem Sie es mit den Daten mit gnb.fit() anpassen:
...
from sklearn.naive_bayes import GaussianNB
Initialize our classifier
gnb = GaussianNB()
Train our classifier
model = gnb.fit(train, train_labels)
Nachdem wir das Modell trainiert haben, können wir das trainierte Modell verwenden, um Vorhersagen auf unserem Testdatensatz zu machen, was wir mit der Funktion predict() tun. Die Funktion predict() gibt ein Array von Vorhersagen für jede Dateninstanz im Testdatensatz zurück. Anschließend können wir unsere Vorhersagen ausdrucken, um ein Gefühl dafür zu bekommen, was das Modell bestimmt hat.
Verwenden Sie die predict() Funktion mit dem test Satz und drucken Sie die Ergebnisse aus:
...
Make predictions
preds = gnb.predict(test)
print(preds)
Führen Sie den Code aus und Sie werden die folgenden Ergebnisse sehen:
Wie Sie im Jupyter-Notebook-Ausgang sehen, hat die predict()-Funktion ein Array von 0s und 1s zurückgegeben, die unsere vorhergesagten Werte für die Tumorklasse (bösartig vs. gutartig) darstellen.
Jetzt, da wir unsere Vorhersagen haben, lassen Sie uns bewerten, wie gut unser Klassifikator funktioniert.
Schritt 5 — Bewertung der Genauigkeit des Modells
Mit dem Array der wahren Klassennamen können wir die Genauigkeit der vorhergesagten Werte unseres Modells bewerten, indem wir die beiden Arrays (test_labels vs. preds) vergleichen. Wir werden die sklearn-Funktion accuracy_score() verwenden, um die Genauigkeit unseres Maschinenlernklassifikators zu bestimmen.
...
from sklearn.metrics import accuracy_score
Evaluate accuracy
print(accuracy_score(test_labels, preds))
Sie werden die folgenden Ergebnisse sehen:
Wie Sie im Ergebnis sehen, hat der NB-Klassifikator eine Genauigkeit von 94,15 %. Das bedeutet, dass der Klassifikator in 94,15 % der Fälle in der Lage ist, die richtige Vorhersage darüber zu treffen, ob der Tumor bösartig oder gutartig ist. Diese Ergebnisse deuten darauf hin, dass unser Merkmalssatz von 30 Attributen gute Indikatoren für die Tumorklasse sind.
Sie haben erfolgreich Ihren ersten maschinellen Lernklassifikator erstellt. Lassen Sie uns den Code umorganisieren, indem wir alle import-Anweisungen an den Anfang des Notebooks oder Skripts setzen. Die endgültige Version des Codes sollte wie folgt aussehen:
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
Load dataset
data = load_breast_cancer()
Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']
Look at our data
print(label_names)
print('Class label = ', labels[0])
print(feature_names)
print(features[0])
Split our data
train, test, train_labels, test_labels = train_test_split(features,
labels,
test_size=0.33,
random_state=42)
Initialize our classifier
gnb = GaussianNB()
Train our classifier
model = gnb.fit(train, train_labels)
Make predictions
preds = gnb.predict(test)
print(preds)
Evaluate accuracy
print(accuracy_score(test_labels, preds))
Jetzt kannst du weiterhin mit deinem Code arbeiten, um zu sehen, ob du deinen Klassifizierer noch besser machen kannst. Du könntest mit verschiedenen Teilmengen von Merkmalen experimentieren oder sogar ganz andere Algorithmen ausprobieren. Schau dir die Website von Scikit-learn für weitere Ideen zum maschinellen Lernen an.
Schlussfolgerung
In diesem Tutorial haben Sie gelernt, wie man einen Machine Learning-Klassifikator in Python erstellt. Jetzt können Sie Daten laden, organisieren, trainieren, vorhersagen und Machine Learning-Klassifikatoren in Python mit Scikit-learn bewerten. Die Schritte in diesem Tutorial sollten Ihnen helfen, den Prozess der Arbeit mit Ihren eigenen Daten in Python zu erleichtern.



