Erstellen eines Klassifikators für maschinelles Lernen in Python mit Scikit-learn

Einführung

Maschinelles Lernen ist ein Forschungsgebiet in den Bereichen Informatik, Künstliche Intelligenz und Statistik. Der Schwerpunkt des maschinellen Lernens besteht darin, Algorithmen zu trainieren, um Muster zu lernen und Vorhersagen aus Daten zu treffen. Maschinelles Lernen ist besonders wertvoll, da wir damit Computer zur Automatisierung von Entscheidungsprozessen einsetzen können.

Anwendungen für maschinelles Lernen finden Sie überall. Netflix und Amazon verwenden maschinelles Lernen, um neue Produktempfehlungen abzugeben. Banken verwenden maschinelles Lernen, um betrügerische Aktivitäten bei Kreditkartentransaktionen zu erkennen, und Gesundheitsunternehmen beginnen, maschinelles Lernen zu verwenden, um Patienten zu überwachen, zu bewerten und zu diagnostizieren.

In diesem Lernprogramm implementieren Sie einen einfachen Algorithmus für maschinelles Lernen in Python mit Scikit-learn, einem Tool für maschinelles Lernen in Python. Unter Verwendung einer Datenbank mit Informationen zu Brustkrebstumoren verwenden Sie einen Klassifikator Naive Bayes (NB), der vorhersagt, ob ein Tumor bösartig oder gutartig ist .

Am Ende dieses Lernprogramms erfahren Sie, wie Sie in Python Ihr eigenes Modell für maschinelles Lernen 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 der https://www.digitalocean.com/community/tutorial_series/ Anleitung zum Installieren und Einrichten einer lokalen Programmierumgebung für Python-3 folgen für Ihr Betriebssystem], um dies zu konfigurieren.

  • Wenn Sie neu in Python sind, können Sie So codieren Sie in Python 3, um sich mit der Sprache vertraut zu machen.

  • Jupyter Notebook, das in der virtuellen Umgebung für dieses Tutorial installiert ist. Jupyter-Notebooks sind äußerst nützlich, wenn Sie Experimente zum maschinellen Lernen durchführen. Sie können kurze Codeblöcke ausführen und die Ergebnisse schnell anzeigen, sodass Sie Ihren Code problemlos testen und debuggen können.

Schritt 1 - Scikit-learn importieren

Beginnen wir mit der Installation des Python-Moduls Scikit-learn, einer der besten und am besten dokumentierten maschinellen Lernbibliotheken für Python.

Aktivieren Sie zunächst unsere Python 3-Programmierumgebung. Stellen Sie sicher, dass Sie sich in dem Verzeichnis befinden, in dem sich Ihre Umgebung befindet, und führen Sie den folgenden Befehl aus:

. /bin/activate

Überprüfen Sie bei aktivierter Programmierumgebung, ob das Scikit-Lernmodul bereits installiert ist:

python -c "import sklearn"

Wenn "+ sklearn +" installiert ist, wird dieser Befehl fehlerfrei ausgeführt. Wenn es nicht installiert ist, wird die folgende Fehlermeldung angezeigt:

OutputTraceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'

Die Fehlermeldung zeigt an, dass "+ sklearn" nicht installiert ist. Laden Sie die Bibliothek daher mit "+ pip" herunter:

pip install scikit-learn[alldeps]

Starten Sie nach Abschluss der Installation Jupyter Notebook:

jupyter notebook

Erstellen Sie in Jupyter ein neues Python-Notizbuch mit dem Namen * ML Tutorial *. In der ersten Zelle des Notizbuchs unter import das Modul + sklearn +:

ML Tutorial

import sklearn

Ihr Notizbuch sollte wie folgt aussehen:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/2vp91eL.png [Jupyter Notebook mit einer Python-Zelle, die sklearn importiert]

Nachdem wir "+ sklearn +" in unser Notizbuch importiert haben, können wir mit dem Datensatz für unser maschinelles Lernmodell arbeiten.

Schritt 2 - Importieren des Scikit-learn-Datensatzes

Der Datensatz, mit dem wir in diesem Tutorial arbeiten werden, ist die Breast Cancer Wisconsin Diagnostic Database. Der Datensatz enthält verschiedene Informationen zu Brustkrebstumoren sowie Klassifizierungsetiketten für * bösartig * oder * gutartig *. Der Datensatz enthält 569 Instanzen oder Daten zu 569 Tumoren und enthält Informationen zu 30 Attributen oder Merkmalen wie dem Radius des Tumors, der Textur, der Glätte und der Fläche.

Anhand dieses Datensatzes erstellen wir ein maschinelles Lernmodell, mit dem anhand von Tumorinformationen vorhergesagt werden kann, ob ein Tumor bösartig oder gutartig ist.

Scikit-learn wird mit verschiedenen Datensätzen geliefert, die wir in Python laden können, und der gewünschte Datensatz ist enthalten. Importieren und laden Sie den Datensatz:

ML Tutorial

...
from sklearn.datasets import load_breast_cancer


# Load dataset
data = load_breast_cancer()

Das + data + variable repräsentiert ein Python-Objekt, das wie ein https: //www.digitalocean funktioniert .com / community / tutorials / verständnis-wörterbücher-in-python-3 [wörterbuch]. Die wichtigsten zu berücksichtigenden Wörterbuchschlüssel sind die Klassifizierungsbezeichnungen (+ target_names +), die tatsächlichen Bezeichnungen (+ target +), die Attribut- / Merkmalsnamen (+ feature_names +) und die Attribute (+ data +).

Attribute sind ein kritischer Bestandteil jedes Klassifikators. Attribute erfassen wichtige Merkmale über die Art der Daten. In Anbetracht der Bezeichnung, die wir vorhersagen möchten (maligner versus benigner Tumor), umfassen mögliche nützliche Attribute Größe, Radius und Textur des Tumors.

Legen Sie für jeden wichtigen Informationssatz neue Variablen an und ordnen Sie die Daten zu:

ML Tutorial

...
# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

Wir haben jetzt lists für jeden Informationssatz. Zum besseren Verständnis unseres Datasets werfen wir einen Blick auf unsere Daten, indem wir unsere Klassenbeschriftungen, die Beschriftung der ersten Dateninstanz, unsere Feature-Namen und die Feature-Werte für die erste Dateninstanz drucken:

ML Tutorial

...
# Look at our data
print(label_names)
print(labels[0])
print(feature_names[0])
print(features[0])

Wenn Sie den Code ausführen, werden die folgenden Ergebnisse angezeigt:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/ezmZX0c.png [Alt Jupyter-Notizbuch mit drei Python-Zellen, das die erste Instanz in unserem Datensatz druckt]

Wie das Bild zeigt, sind unsere Klassennamen * bösartig * und * gutartig *, die dann auf die Binärwerte "+ 0 " und " 1 " abgebildet werden, wobei " 0 " bösartige Tumore und "+1" darstellen + `steht für gutartige Tumoren. Daher ist unsere erste Dateninstanz ein bösartiger Tumor, dessen mittlerer Radius " 1.79900000e + 01 +" ist.

Nachdem wir unsere Daten geladen haben, können wir mit unseren Daten arbeiten, um unseren Klassifikator für maschinelles Lernen zu erstellen.

Schritt 3 - Daten in Gruppen organisieren

Um zu bewerten, wie gut ein Klassifikator arbeitet, sollten Sie das Modell immer an unsichtbaren Daten testen. Teilen Sie daher Ihre Daten vor dem Erstellen eines Modells in zwei Teile auf: einen Trainingssatz und einen Testsatz.

Mit dem Trainingsset trainieren und evaluieren Sie das Modell in der Entwicklungsphase. Anschließend verwenden Sie das trainierte Modell, um Vorhersagen für den unsichtbaren Testsatz zu treffen. Dieser Ansatz vermittelt Ihnen einen Eindruck von der Leistung und Robustheit des Modells.

Glücklicherweise hat + sklearn + eine Funktion namens + train_test_split () +, die Ihre Daten in diese Mengen aufteilt. Importieren Sie die Funktion und verwenden Sie sie dann zum Teilen der Daten:

ML Tutorial

...
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 mit dem Parameter + test_size + auf. In diesem Beispiel haben wir jetzt einen Testsatz (+ test +), der 33% des ursprünglichen Datensatzes darstellt. Die restlichen Daten ("+ train ") bilden dann die Trainingsdaten. Wir haben auch die entsprechenden Bezeichnungen für beide Zug- / Testvariablen, d.h. ` train_labels ` und ` test_labels +`.

Wir können jetzt mit dem Training unseres ersten Modells fortfahren.

Schritt 4 - Erstellen und Bewerten des Modells

Es gibt viele Modelle für maschinelles Lernen, und jedes Modell hat seine eigenen Stärken und Schwächen. In diesem Tutorial konzentrieren wir uns auf einen einfachen Algorithmus, der normalerweise bei binären Klassifizierungsaufgaben gut funktioniert, nämlich Naive Bayes (NB).

Importieren Sie zuerst das + GaussianNB + - Modul. Initialisieren Sie dann das Modell mit der Funktion + GaussianNB () + und trainieren Sie das Modell, indem Sie es mit + gnb.fit () + an die Daten anpassen:

ML Tutorial

...
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 für unser Test-Set zu machen, was wir mit der Funktion "+ predict () " tun. Die Funktion ` predict () +` gibt ein Array von Vorhersagen für jede Dateninstanz im Testsatz zurück. Wir können dann unsere Vorhersagen ausdrucken, um ein Gefühl dafür zu bekommen, was das Modell bestimmt hat.

Verwenden Sie die Funktion + predict () + mit dem Set + test + und drucken Sie die Ergebnisse aus:

ML Tutorial

...
# Make predictions
preds = gnb.predict(test)
print(preds)

Führen Sie den Code aus und Sie werden die folgenden Ergebnisse sehen:

Wie Sie in der Jupyter Notebook-Ausgabe sehen, hat die Funktion + predict () + ein Array von + 0 + s und + 1 + s zurückgegeben, die unsere vorhergesagten Werte für die Tumorklasse darstellen (maligne vs. gutartig).

Nachdem wir unsere Vorhersagen getroffen haben, können wir bewerten, wie gut unser Klassifikator funktioniert.

Schritt 5 - Bewertung der Modellgenauigkeit

Mithilfe des Arrays mit echten Klassenbeschriftungen können wir die Genauigkeit der vorhergesagten Werte unseres Modells bewerten, indem wir die beiden Arrays vergleichen (+ test_labels + vs. + preds +). Wir werden die + sklearn + Funktion + precision_score () + verwenden, um die Genauigkeit unseres Klassifikators für maschinelles Lernen zu bestimmen.

ML Tutorial

...
from sklearn.metrics import accuracy_score


# Evaluate accuracy
print(accuracy_score(test_labels, preds))

Sie sehen die folgenden Ergebnisse:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/wsLAaEE.png [Alt Jupyter-Notizbuch mit Python-Zelle, die die Genauigkeit unseres NB-Klassifikators ausgibt]

Wie Sie in der Ausgabe sehen, ist der NB-Klassifikator zu 94,15% genau. Dies bedeutet, dass der Klassifikator in 94,15 Prozent der Fälle die korrekte Vorhersage treffen kann, ob der Tumor bösartig oder gutartig ist oder nicht. Diese Ergebnisse legen nahe, dass unser Feature-Set von 30 Attributen ein guter Indikator für die Tumorklasse ist.

Sie haben erfolgreich Ihren ersten Klassifikator für maschinelles Lernen erstellt. Lassen Sie uns den Code organisieren, indem Sie alle "+ import" -Anweisungen am oberen Rand des Notizbuchs oder Skripts platzieren. Die endgültige Version des Codes sollte folgendermaßen aussehen:

ML Tutorial

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 können Sie weiter mit Ihrem Code arbeiten, um zu prüfen, ob Sie die Leistung Ihres Klassifikators noch verbessern können. Sie können mit verschiedenen Untergruppen von Funktionen experimentieren oder sogar ganz andere Algorithmen ausprobieren. Weitere Ideen zum maschinellen Lernen finden Sie auf Scikit-learns Website.

Fazit

In diesem Lernprogramm haben Sie gelernt, wie Sie einen Klassifikator für maschinelles Lernen in Python erstellen. Jetzt können Sie mit Scikit-learn Daten laden, Daten organisieren, Klassifikatoren für maschinelles Lernen in Python trainieren, vorhersagen und auswerten. Die Schritte in diesem Lernprogramm sollen Ihnen dabei helfen, mit Ihren eigenen Daten in Python zu arbeiten.