[PYTHON] Über SVC des SVM-Moduls (ohne Mathematik)

Alles Gute, guten Abend. Ich werde den Satz vom 19.12. Schreiben. Ich hatte heute etwas zu tun und es war spät. .. ..

Heute möchte ich die Klassifizierung des linearen SVC-Modells zusammenfassen, das ich gestern studiert habe.

Zweck der Klassifizierung

2019_12_19_blog.png

Siehe das Bild oben. Bei der Klassifizierung wird automatisch die Linie gefunden, die diesen blauen Punkt vom orangefarbenen Kreuz trennt. Zweidimensional ist für Menschen sehr einfach, nicht wahr? Das SVC-Modell ist erstaunlich, da Sie anscheinend nach einem Ausdruck fragen können, der sich auch bei hohen Dimensionen teilt. Wofür ist das also nützlich? Viele Leute hätten gedacht. Wie wäre es mit dem Bild unten?

2019_12_19_picpng.png

Hast du den Unterschied gesehen? Ja, G-Mail spielt selbstverständlich Junk-Mail ab, aber das ist die Macht der KI. (Der Algorithmus ist komplizierter.) Was sie jedoch tun, ist dasselbe: Sie zeichnen eine gerade Linie (Gesicht) und analysieren, ob es sich um Spam oder gültige E-Mails handelt. Es ist wunderschön und erstaunlich, nicht wahr?

Nun, ich zeige Ihnen das Bild des heutigen Endzwecks. Es wird wie folgt sein.

Figfdsaure_1.png

⚠︎ Es gibt etwas, bei dem ich vorsichtig sein möchte. Das heißt, in diesem Beispiel kann eine unendliche Linie gezogen werden. Nachdem die Breite dieser gepunkteten Linie (Zusammenführung) am breitesten ist, wird daher in der Mitte eine durchgezogene Linie (Entscheidungsgrenze) gezeichnet.

Schauen wir uns nun den Code an, um diese Entscheidungsgrenze zu finden.

Beispielcode

import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
xmin = 0
xmax = 2
ymin = 0
ymax = 2

# 0 ~Enthält Werte gemäß einer Normalverteilung bis zu 1 (100 Zeilen und 2 Spalten (X & Y)))) Erstellen Sie eine Matrix
X0 = np.random.uniform(size=(100, 2))
y0 = np.repeat(0, 100)

X1 = np.random.uniform(low=1.0, high=2.0, size=(100, 2))
y1 = np.repeat(1, 100)

svc = SVC(kernel='linear', C=1e8)

#Lernen
# svc.fit(train_features, train_labels)
svc.fit(np.vstack((X0, X1)), np.hstack((y0, y1)))

fig, ax = plt.subplots()

# ax.scatter(x, y)Streudiagramm
ax.scatter(X0[:, 0], X0[:, 1], marker='o', label='class 0')
ax.scatter(X1[:, 0], X1[:, 1], marker='x', label='class 1')

#Bereiten Sie Gitterpunkte vor
xx, yy = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100))
# decision_In einer Funktionsmatrix.
xy = np.vstack([xx.ravel(), yy.ravel()]).T

# 100 *Eine Matrix von 100.
# z = x*2 + y*Der Teil der Höhe von z des Teils soll 2 sein.
#Z wird aus einem Gitterpunkt namens xy unter Verwendung der SVC-Entscheidungsfunktion erhalten.
z = svc.decision_function(xy).reshape((100, 100))
#Zeichnen Sie Entscheidungsgrenzen und -ränder
ax.contour(xx, yy, z, colors='k', levels=[-1, 0, 1], alpha=0.3, linestyles=['--', '-', '--'])
plt.show()

Als Fluss,

  1. Bereiten Sie die Daten vor
  2. Erstellen Sie eine SVC-Instanz
  3. Trainieren Sie die Eingabedaten, indem Sie das zugehörige Etikett in die Anpassungsfunktion einfügen.
  4. Erstellen Sie Rasterpunkte (Referenzartikel)
  5. Erstellen Sie Z mit der in fit erlernten Entscheidungsfunktion
  6. Sie können eine Entscheidungsgrenze zeichnen, indem Sie Konturlinien mit Kontur zeichnen.

Die wichtigen Funktionen sind fit und entscheidungsfunk. Ich verstehe, wie man fit verwendet, aber entscheidungsfunktion kann nur verstehen, wie man Z mit einem Klassifikator findet. Ich werde es etwas genauer studieren und einen Artikel schreiben.

Heute ist es spät in der Nacht, also ist es soweit. Gute Nacht.

Recommended Posts

Über SVC des SVM-Moduls (ohne Mathematik)
Über die Verarbeitungsgeschwindigkeit von SVM (SVC) von Scikit-Learn