Wenn Sie maschinelles Lernen ausprobieren möchten, kann jeder Scicit-Learn usw. verwenden, um es relativ einfach zu implementieren. Um jedoch Ergebnisse bei der Arbeit zu erzielen oder Ihr Niveau zu verbessern Sie können sehen, dass es in der Erklärung von "Ich kenne den Hintergrund nicht, aber ich habe dieses Ergebnis erhalten." Deutlich schwach ist.
Der Zweck dieses Artikels ist es, "zuerst zu versuchen, scicit-learn zu verwenden, weil die Theorie gut ist" in 2-3 und "den Hintergrund aus der Mathematik zu verstehen" in 4 und später.
Ich komme aus einer privaten Literaturschule, daher bin ich nicht gut in Mathematik. Ich habe versucht, es so zu erklären, dass es selbst für diejenigen, die nicht so gut wie möglich in Mathematik sind, leicht zu verstehen ist.
Ähnliche Artikel wurden für Linear Simple Regression und Logistic Regression Ver veröffentlicht. Bitte lesen Sie sie auch. [Maschinelles Lernen] Verstehen der linearen einfachen Regression aus Scikit-Learn und Mathematik Maschinelles Lernen Verstehen der logistischen Regression sowohl durch Scikit-Lernen als auch durch Mathematik (https://qiita.com/Hawaii/items/ee2a0687ca451fe213be)
SVM ist ein Modell, das zur Klassifizierung und Regression als überwachtes Lernen verwendet werden kann. Und da es ein Gerät gibt, mit dem eine hohe Unterscheidungsleistung für nicht gelernte Daten erzielt werden kann, weist es eine hervorragende Erkennungsleistung auf. Quelle: [Wikipedia] (https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%83%99%E3%82%AF%E3%82%BF%E3%83%BC%E3%83%9E%E3%82%B7%E3%83%B3)
Grob gesagt ist ** es tendenziell ein sehr genaues Modell, wenn neue Daten erhalten werden **.
Angenommen, Sie sind Präsident einer Eventplanungsfirma. Angenommen, Sie planen eine Tour, um "seltene Katzen" als Reaktion auf den jüngsten Katzenboom (eine fiktive Kulisse) zu sehen.
Da es zu viele Kandidaten für den Tourort gibt, haben Sie Daten für seltene Katzen (= A) und sogenannte normale Katzen (= B) gesammelt. Basierend auf diesen Daten werden wir ein Modell erstellen, das bestimmen kann, ob es sich um eine seltene Katze handelt, indem wir zukünftig Daten zu "Körpergröße" und "Bartlänge" eingeben, und uns auf den Ort konzentrieren, an dem festgestellt wurde, dass es eine seltene Katze gibt. Ich werde einen Plan machen.
Die Verteilung der Daten ist wie folgt.
Welche Art von Grenze wird in der oben gezeigten Verteilung wahrscheinlich zwischen Blau und Orange gezogen? Wie unten gezeigt, können die vorliegenden Daten rote und grüne Ränder enthalten.
Nachdem ich nun neue Daten habe, habe ich versucht, diese zusätzlich zu zeichnen. (Daten im orangefarbenen Rahmen)
In diesem Fall wird der rote Rand korrekt identifiziert, aber der grüne Rand ist eine seltene Katze (ursprünglich eine normale Katze), sodass es sich um eine falsche Identifizierung handelt.
Um solche Fehleinschätzungen zu vermeiden und den richtigen Klassifizierungsstandard zu finden, verwendet SVM das Konzept ** "Marge maximieren" **. Der Rand bezieht sich auf den Abstand zwischen dem oberen Rand (z. B. rot oder grün) und den tatsächlichen Daten. Die Idee ist, dass bei einem großen Spielraum ** "Fehleinschätzungen aufgrund geringfügiger Datenänderungen" so klein wie möglich gemacht werden können **.
Die Daten in der Nähe der Grenze sind sozusagen Daten, die es schwierig machen, zwischen "seltenen Katzen" und "normalen Katzen" zu unterscheiden. Es wäre ein Problem, wenn es viele subtile Daten gäbe. Wenn Sie also die Grenze so festlegen, dass der Abstand zwischen der Grenze und den Daten so weit wie möglich ist, kann das Risiko einer Fehleinschätzung minimiert werden.
Es gibt jedoch nicht viele Grenzen, die alles zu 100% perfekt klassifizieren können. In der realen Welt kommen manchmal Daten wie Ausreißer herein, wie unten gezeigt.
Wenn Sie versuchen, eine Grenze zu zeichnen, die diesen neuen orangefarbenen Punkt genau klassifiziert, können Sie sich vorstellen, dass es sich wahrscheinlich um eine Grenze handelt, die nicht der tatsächlichen Situation entspricht. (Sog. Overlearning)
Um ein Urteil zu fällen, das der tatsächlichen Situation entspricht, erlaubt SVM ** "eine Fehleinschätzung" **.
Es wird im nächsten Scikit-Lernabschnitt erscheinen, aber wie viel Fehlidentifikation ist erlaubt? Tatsächlich müssen wir uns entscheiden, das Modell zu bauen, das wir als "Strafe" bezeichnen.
Man kann sagen, dass SVM ein Modell ist, das die folgenden zwei ** "gutes Gefühl" ** realisiert.
・ Um Fehleinschätzungen so weit wie möglich zu vermeiden, versuchen Sie, eine Grenze zu zeichnen, die den Abstand zwischen der Grenze und den Daten, dh dem Rand, maximiert. ・ Es ist jedoch eine Fehleinschätzung zulässig, um eine Grenze zu ziehen, die der tatsächlichen Situation entspricht.
Importieren Sie Folgendes, um SVM auszuführen.
from sklearn.svm import SVC
#Unten finden Sie eine Bibliothek für Illustrationen, Pandas und Numpy
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
Stellen Sie die Längen- und Bartdaten sowie die seltene, normale Klassifizierung (Richtig für seltene Katzen, Falsch für normale Katzen) als Daten wie unten gezeigt ein.
data = pd.DataFrame({
"rare":[True,True,True,True,True,False,False,False,False,False,False,False,False],
"scale":[20, 25, 30, 24, 28, 35, 40, 38, 55, 50, 60,32,25],
"hige":[10, 20, 40, 18, 30, 10, 20, 30, 25, 28, 30,18,25],
})
Ich werde die Länge des Körpers, die Länge des Bartes und die seltene und gewöhnliche Klassifizierung veranschaulichen. Verwenden Sie Scicit-Learn nicht plötzlich, um die Merkmale zu erfassen, sondern versuchen Sie, Daten zu veranschaulichen.
y = data["rare"].values
x1, x2 = data["scale"].values, data["hige"].values
#Plotdaten
plt.grid(which='major',color='black',linestyle=':')
plt.grid(which='minor',color='black',linestyle=':')
plt.plot(x1[y], x2[y], 'o', color='C0', label='rare')#Blauer Punkt: y ist wahr(=Selten)
plt.plot(x1[~y], x2[~y], '^', color='C1', label='normal')#Orange Punkt: y ist falsch(=Gewöhnliche)
plt.xlabel("scale")
plt.ylabel("hige")
plt.legend(loc='best')
plt.show()
Irgendwie scheint die Grenze geschlossen zu sein.
Zunächst werden wir die Form der Daten anordnen, um das Modell zu erstellen.
y = data["rare"].values#Es ist das gleiche wie das oben gezeigte, also können Sie es weglassen.
X = data[["scale", "hige"]].values
Dieses Mal ist es kein Artikel über Python-Grammatik, daher werde ich die Details weglassen, aber ich werde x und y in einer Form für SVM mit Scikit-Learn anordnen.
Es ist endlich die Modellbauordnung.
C = 10
clf = SVC(C=C,kernel="linear")
clf.fit(X, y)
Das war's für ein einfaches Modell. Wir werden ein SVM-Modell in einer Variablen namens clf erstellen! Das Bild ist, dass das clf mit dem vorbereiteten X und y in der nächsten Zeile angepasst (= gelernt) wird.
Die Hauptargumente beim Erstellen eines SVM-Modells sind $ C $ und Kernel. ** <Über $ C $> ** Ich werde es vorerst versuchen, also werde ich die Details weglassen, aber wenn Sie den Wert von $ C $ reduzieren, wird es ein Modell sein, das eine falsche Identifizierung ermöglicht.
** <Über den Kernel> ** Die Arten von Kerenel sind "linear", "poly", "rbf", "sigmoid" und "vorberechnet". [Offizielle Referenz für Details] (https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html)
Hier werden wir "linear" und "rbf" vorstellen. Verwenden Sie linear, um die Grenze linear (Ebene) zu zeichnen, und verwenden Sie rbf (nichtlineare Kernelfunktion), um die Grenze nicht linear zu zeichnen. Das Ergebnis ändert sich je nachdem, welches Sie auswählen.
Lassen Sie uns nun diese Grenze im obigen Streudiagramm veranschaulichen.
fig,ax = plt.subplots(figsize=(6,4))
#Datenpunkte anzeigen
ax.scatter(X[:,0], X[:,1], c=y)
#Ordnen Sie 100 Werte in x-Koordinatenrichtung an
x = np.linspace(np.min(X[:,0]), np.max(X[:,0]), 10)
#Ordnen Sie 100 Werte in y-Koordinatenrichtung an
y = np.linspace(np.min(X[:,1]), np.max(X[:,1]), 10)
#x,Mit der x-Koordinate von 10000 Punkten, die y kombinieren,Array von y-Koordinaten
x_g, y_g = np.meshgrid(x, y)
#np,c_Verbinden Sie die beiden Koordinaten mit,Weitergabe an SVM
z_g = clf.predict(np.c_[x_g.ravel(), y_g.ravel()])
#z_g ist eine Spalte des Arrays, dient jedoch zur Anzeige im Diagramm(100, 100)Kehren Sie zur Form von zurück
z_g = z_g.reshape(x_g.shape)
#Randfärbung
ax.contourf(x_g,y_g,z_g,cmap=plt.cm.coolwarm, alpha=0.8);
#Anzeige am Ende
plt.show()
Infolge der Modellkonstruktion wurde die Grenze wie oben gezeigt geschlossen. Wenn danach neue Daten eingehen, werden sie als normale Katze klassifiziert, wenn sie im blauen Bereich dargestellt werden, und wenn sie im roten Bereich dargestellt werden, werden sie als seltene Katze klassifiziert.
Übrigens, wenn der in (4) ◆ Argumente eingeführte Kernel rbf ist, ist die Grenze wie folgt.
Es ist eine ganz andere Grenze! In diesem Fall habe ich das Gefühl, dass linear die Grenzen der Daten besser zeichnet. Verwenden wir also linear für den Kernel.
Es macht keinen Sinn, ein Modell fertig zu stellen. In der realen Welt ist es wichtig, dieses Vorhersagemodell zu verwenden, um bei der Erfassung neuer Katzendaten zwischen selten und normal zu unterscheiden.
Sie haben zwei andere Arten von Informationen erhalten und die Daten aufgeschrieben. Speichern Sie es in einer Variablen namens z, wie unten gezeigt.
z = pd.DataFrame({
"scale":[28, 45],
"hige":[25, 20],
})
z2 = z[["scale", "hige"]].values
Vergleicht man diese Daten mit der Abbildung mit der linearen Grenze, so scheint es, dass das erste Tier wahrscheinlich als rot (selten = wahr) und das zweite Tier als blau (normal = falsch) klassifiziert ist. Lassen Sie uns eine Vorhersage machen.
y_est = clf.predict(z2)
Auf diese Weise zeigt y_est das Ergebnis als ([True, False]) an, sodass Sie sehen können, dass es gemäß der Grenzlinie klassifiziert ist.
Übrigens habe ich bis zu 3 versucht, den Ablauf des Aufbaus eines SVM-Modells mithilfe von Scicit-Learn → Illustration → Vorhersage der Seltenheit und Normalität von zwei anderen Katzen zu implementieren. Hier möchte ich klarstellen, wie das SVM-Modell dieses Flusses mathematisch berechnet wird.
Ich werde auf die unter "2. Was ist SVM (Support Vector Machine)" beschriebene Randmaximierung eingehen. Ich erklärte, dass der Teil, in dem der Abstand zwischen dem Punkt und der Grenze der einzelnen Daten am größten ist, die optimale Grenzlinie ist, aber was für einen Zustand bedeutet das?
Das Folgende ist eine leicht dreidimensionale Neufassung des bisher gezeigten Streudiagramms.
Wenn Sie sich die grüne Ebene, die durch den roten Rand oben verläuft, als Rand vorstellen, können Sie sich vorstellen, dass durch Ändern der ** "Neigung" ** dieser Ebene der Rand (= Abstand zwischen den Daten und dem Rand) geändert wird. Ist es?
Wenn beispielsweise die Neigung dieser Ebene steil ist, ist der Rand kleiner, wie unten gezeigt.
Im Gegenteil, wenn die Neigung der Ebene sanft gemacht wird, wird der Rand groß, wie unten gezeigt.
Mit anderen Worten, ** "die Daten können sauber klassifiziert werden" und "die Steigung der Ebene, die durch die Entscheidungsgrenze verläuft, ist so gering wie möglich" ist die optimale Randbedingung **.
Was bedeutet dann ** "die Neigung der Ebene, die die Entscheidungsgrenze passiert, so sanft wie möglich" **? Ich werde es weiter veranschaulichen.
Ich habe versucht, den Blick auf die Grenzfläche von der Seite zu zeigen. Diese Formel wird ausgedrückt als $ w_1x_1 + w_2x_2 $.
Wie bereits erwähnt, bedeutet der maximale Spielraum, dass die Steigung (= Steigung) der Ebene, die durch die Entscheidungsgrenze verläuft, so sanft wie möglich wird. Die Tatsache, dass die Steigung (= Steigung) am sanftesten ist, bedeutet, dass selbst wenn Sie $ x_1 $ oder $ x_2 $ ein wenig bewegen, der Effekt auf $ w_1x_1 + w_2x_2 $ gering ist (= die Steigung ist sanft, sodass sich der Wert von $ x $ geringfügig ändert. Selbst wenn Sie es verschieben, ändert sich der Wert des gesamten Ausdrucks nicht wesentlich. Das heißt, "** $ w_1, w_2 $ sind klein **".
Wenn dies in eine Formel umgewandelt wird, ist es wie folgt, aber da das Verstehen der Norm notwendig und kompliziert ist, um die Bedeutung dieser Formel zu verstehen, sind an diesem Punkt "$ w_1 $ und $ w_2 $ der Grenzlinienformel so klein wie möglich. Es wird so berechnet, dass es wird. "
Die Grundidee endet mit (1), aber wie unter "◆ Strafe" in "2. Was ist SVM (Support Vector Machine)" erwähnt, werden einige Missverständnisse gemacht, damit die Klassifizierung entsprechend der tatsächlichen Situation durchgeführt werden kann. Erlaube einem anderen.
Wie viel Fehleinschätzung ist erlaubt? Der Grad wird Strafe genannt.
Die Strafformel wird wie folgt ausgedrückt, und $ ξ $ wird als Scharnierverlustfunktion bezeichnet.
$ C $ hat die gleiche Bedeutung wie das in (ii) Modellkonstruktion beschriebene Argument, aber je größer dieses $ C $ ist, desto fehlerhafter wird der Ausdruck (= wenn er zu groß ist, ist es leichter zu überlernen). Wenn Sie diese Formel gründlich verstehen möchten, müssen Sie sie gründlich verstehen, daher werde ich sie diesmal diesem Punkt überlassen. (Es kann später separat gebaut werden, aber ich möchte es auch hier zusammenfassen)
Aus (1) und (2) wird SVM berechnet, um die folgenden Zielfunktionen so klein wie möglich zu machen. Intuitiv ** versuche ich, die Neigung der Grenzfläche so klein wie möglich zu halten, "um den Rand zu maximieren", aber wie viel Fehleinschätzung ist zulässig, um entsprechend der tatsächlichen Situation zu klassifizieren? Zusätzlich zum Strafzeitraum von wird die Grenzflächenformel so eingestellt, dass sich die Gesamtbalance gut anfühlt. ** ** **
||w||_2^2 +
C(\sum_{i=1}^n ξi)
Was haben Sie gedacht. SVM erfordert ein mathematisches Verständnis des Hintergrunds mehr als einfache Regression und logistische Regression, daher kann ich es nicht so tief beschreiben, aber ich hoffe, dass das bisherige Verständnis dazu beitragen wird, das Verständnis zu vertiefen als zuvor. ..
Recommended Posts