[PYTHON] Support Vector Machine (für Anfänger) -Code Edition-

Dieses Mal werden wir die Implementierung von Support-Vektor-Maschinen (Klassifizierung) zusammenfassen.

■ Unterstützung der Vektormaschinenprozedur

Fahren Sie mit den nächsten 7 Schritten fort.

  1. Vorbereitung des Moduls
  2. Datenaufbereitung
  3. Datenvisualisierung
  4. Erstellen Sie ein Modell
  5. Modellplot
  6. Klassifizierung vorhersagen
  7. Modellbewertung

1. Vorbereitung des Moduls

Importieren Sie zunächst die erforderlichen Module.


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#Modul zum Lesen des Datensatzes
from sklearn.datasets import load_iris

#Modul zur Standardisierung (verteilte Normalisierung)
from sklearn.preprocessing import StandardScaler

#Modul, das Trainingsdaten und Testdaten trennt
from sklearn.model_selection import train_test_split

#Unterstützungsvektor Ein Modul, das eine Maschine ausführt
from sklearn.svm import SVC

#Modul zur Bewertung der Klassifizierung
from sklearn.metrics import classification_report

2. Datenaufbereitung

Dieses Mal werden wir den Iris-Datensatz für die binäre Klassifizierung verwenden.

Holen Sie sich zuerst die Daten, standardisieren Sie sie und teilen Sie sie dann auf.


#Laden des Iris-Datensatzes
iris = load_iris()

#Teilen Sie in objektive Variable und erklärende Variable
X, y = iris.data[:100, [0, 2]], iris.target[:100]

#Standardisierung (verteilte Normalisierung)
std = StandardScaler()
X = std.fit_transform(X)

#Teilen Sie in Trainingsdaten und Testdaten
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

Um eine binäre Klassifizierung durchzuführen, wird der Datensatz bis zur 100. Zeile angegeben (nur Setosa / Versicolor). Wir haben auch die erklärenden Variablen auf zwei eingegrenzt, um die Darstellung zu vereinfachen. (Sepal Länge / nur Blütenblattlänge)

Bei der Standardisierung beispielsweise wird der Einfluss der Merkmalsgrößen (erklärende Variablen) groß, wenn es zweistellige und vierstellige Merkmalsgrößen gibt. Die Skala wird ausgerichtet, indem der Durchschnitt für alle Merkmalsgrößen auf 0 und die Varianz auf 1 gesetzt wird.

3. Datenvisualisierung

Zeichnen wir die Daten, bevor wir sie nach SVM klassifizieren.


#Erstellen von Zeichnungsobjekten und Nebenhandlungen
fig, ax = plt.subplots()

#Setosa Handlung
ax.scatter(X_train[y_train == 0, 0], X_train[y_train == 0, 1], 
           marker = 'o', label = 'Setosa')

#Versicolor Handlung
ax.scatter(X_train[y_train == 1, 0], X_train[y_train == 1, 1],
           marker = 'x', label = 'Versicolor')

#Einstellungen für die Achsenbeschriftung
ax.set_xlabel('Sepal Length')
ax.set_ylabel('Petal Length')

#Legendeneinstellungen
ax.legend(loc = 'best')

plt.show()

Diagramm mit Merkmalen, die Setosa entsprechen (y_train == 0) (0: Sepal Länge auf der horizontalen Achse, 1: Blütenblattlänge auf der vertikalen Achse) Plot mit Merkmalen (0: Sepal Länge auf der horizontalen Achse, 1: Blütenblattlänge auf der vertikalen Achse) entsprechend Versicolor (y_train == 1)


Ausgabeergebnis
image.png

4. Erstellen Sie ein Modell

Erstellen Sie zunächst eine SVM-Ausführungsfunktion (Instanz) und wenden Sie sie auf die Trainingsdaten an.


#Erstellen Sie eine Instanz
svc = SVC(kernel = 'linear', C = 1e6)
    
#Erstellen Sie ein Modell aus Trainingsdaten
svc.fit(X_train, y_train)

Diesmal ist eine lineare Trennung bereits möglich (durch eine gerade Linie getrennt), daher wird das Argument auf kernel = 'linear' gesetzt.

C ist ein Hyperparameter, den Sie selbst anpassen, während Sie die Ausgabewerte und Diagramme betrachten.

5. Modellplot

Da konnte ich aus den Trainingsdaten ein Modell der Support-Vektor-Maschine erstellen Zeichnen und überprüfen Sie, wie die Klassifizierung erfolgt.

Die erste Hälfte entspricht genau dem Code im obigen Streudiagramm.


#Erstellen von Zeichnungsobjekten und Nebenhandlungen
fig, ax = plt.subplots()

#Setosa Handlung
ax.scatter(X_train[y_train == 0, 0], X_train[y_train == 0, 1], 
           marker = 'o', label = 'Setosa')

#Versicolor Handlung
ax.scatter(X_train[y_train == 1, 0], X_train[y_train == 1, 1],
           marker = 'x', label = 'Versicolor')

ax.set_xlabel('Sepal Length')
ax.set_ylabel('Petal Length')
    
ax.legend(loc = 'upper left')

#Von hier an können Sie es so einfügen, wie es ist, und es jedes Mal verwenden, auch wenn es sich um andere Daten handelt. (Eine Feineinstellung des Zahlenwerts ist erforderlich.)

#Geben Sie den Plotbereich der Entscheidungsgrenze an (gerade Linie).
xmin = -2.0
xmax = 2.5
ymin = -1.5
ymax = 1.8

#Zeichnen Sie Entscheidungsgrenzen und -ränder
xx, yy = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100))
xy = np.vstack([xx.ravel(), yy.ravel()]).T
p = svc.decision_function(xy).reshape(100, 100)  
ax.contour(xx, yy, p, colors = 'k', levels = [-1, 0, 1], alpha = 1, 
           linestyles = ['--', '-', '--'])

#Plotunterstützungsvektor
ax.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1],
           s = 250, facecolors = 'none', edgecolors = 'black')
    
plt.show()

Alpha: Gerade Dichte s: Größe des Stützvektors (○)


Ausgabeergebnis
image.png

6. Klassifizierung vorhersagen

Nachdem das Modell vollständig ist, lassen Sie uns die Klassifizierung vorhersagen.

#Klassifizierungsergebnisse vorhersagen
y_pred = svc.predict(X_test)

#Geben Sie den vorhergesagten Wert und den richtigen Antwortwert aus
print(y_pred)
print(y_test)


Ausgabeergebnis


#Vergleichen Sie den vorhergesagten Wert mit dem richtigen Antwortwert
y_pred: [0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 1]
y_test: [0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 1]

0:Setosa 1:Versicolor

In diesem Fall können Sie sehen, dass alle übereinstimmen (richtige Antwort).

7. Modellbewertung

Da es sich diesmal um eine Klassifizierung (binäre Klassifizierung) handelt, werden wir sie anhand der Genauigkeitsrate, der Rückrufrate und des F-Werts unter Verwendung einer Verwirrungsmatrix bewerten.


#Gibt die Genauigkeitsrate, die Rückrufrate und den F-Wert aus
print(classification_report(y_test, y_pred))


Ausgabeergebnis
image.png

Aus dem oben Gesagten konnten wir die Klassifizierung in Setosa und Versicolor bewerten.

■ Endlich

In SVM erstellen und bewerten wir das Modell basierend auf den obigen Schritten 1 bis 7.

Dieses Mal habe ich für Anfänger nur die Implementierung (Code) zusammengefasst. Mit Blick auf das Timing in der Zukunft möchte ich einen Artikel über Theorie (mathematische Formel) schreiben.

Danke fürs Lesen.

Referenzen: Neues Lehrbuch zur Datenanalyse mit Python (Hauptlehrmaterial für den Test zur Analyse der Zertifizierung von Python 3-Ingenieuren)

Recommended Posts

Support Vector Machine (für Anfänger) -Code Edition-
Entscheidungsbaum (für Anfänger) -Code Edition-
Logistic Return (für Anfänger) -Code Edition-
Lineare Regression (für Anfänger) -Code Edition-
Ridge Return (für Anfänger) -Code Edition-
Maschinelles Lernen unterstützt Vektormaschine
Maschinelles Lernen: Überwacht - Support Vector Machine
Algorithmus für maschinelles Lernen (Support Vector Machine)
Algorithmus für maschinelles Lernen (Unterstützung von Vektor-Maschinenanwendungen)
Maschinelles Lernen ① SVM-Zusammenfassung (Support Vector Machine)
<Kurs> Maschinelles Lernen Kapitel 7: Support Vector Machine
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.4. Support Vector Machine
Erste Schritte für Anfänger des maschinellen Lernens (KI)
Empfohlene Studienreihenfolge für Anfänger des maschinellen Lernens / Deep Learning
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Berechnung der Support Vector Machine (SVM) (mit cvxopt)
Alles für Anfänger, um maschinelles Lernen zu können
Spacemacs-Einstellungen (für Anfänger)
Techniken zum Testen von Code?
Python Lehrbuch für Anfänger
Maschinelles Lernen studieren-Pandas Edition-
Dikstra-Algorithmus für Anfänger
OpenCV für Python-Anfänger
PRML Kapitel 7 Verwandte Vector Machine Python-Implementierung für Regressionsprobleme