Nach der Transformation können wir die beiden Klassen einfach mit nur einer einzigen Zeile abgrenzen.,
In realen Anwendungen werden wir keine einfache gerade Linie haben, aber wir werden viele Kurven und hohe Abmessungen haben. In einigen Fällen werden wir nicht zwei Hyperebenen haben, die die Daten ohne Punkte zwischen ihnen trennt, also brauchen wir einige Kompromisse, Toleranz für Ausreißer. Glücklicherweise verfügt der SVM-Algorithmus über einen sogenannten Regularisierungsparameter, um den Kompromiss zu konfigurieren und Ausreißer zu tolerieren.
Tuning Parameter
Wie wir im vorherigen Abschnitt gesehen haben, ist die Auswahl des richtigen Kernels entscheidend, denn wenn die Transformation falsch ist, kann das Modell sehr schlechte Ergebnisse haben., Überprüfen Sie als Faustregel immer, ob Sie lineare Daten haben, und verwenden Sie in diesem Fall immer lineares SVM (linearer Kernel). Linear SVM ist ein parametrisches Modell, ein RBF-Kernel-SVM jedoch nicht, sodass die Komplexität des letzteren mit der Größe des Trainingssatzes zunimmt. Das Trainieren eines RBF-Kernel-SVM ist nicht nur teurer, sondern Sie müssen auch die Kernmatrix beibehalten, und die Projektion in diesen „unendlichen“ höherdimensionalen Raum, in dem die Daten linear trennbar werden, ist auch während der Vorhersage teurer., Darüber hinaus müssen Sie mehr Hyperparameter einstellen, sodass die Modellauswahl auch teurer ist! Und schließlich ist es viel einfacher, ein komplexes Modell zu überfit!
Regularisierung
Der Regularisierungsparameter (in Python heißt er C) teilt der SVM-Optimierung mit, wie viel Sie vermeiden möchten, dass jedes Trainingsbeispiel nicht klassifiziert wird.
Wenn die C ist höher, die optimierung wird wählen kleinere marge hyperplane, so ausbildung daten verpassen klassifizierung rate wird niedriger sein.,
Auf der anderen Seite, wenn die C niedrig ist, dann wird die Marge groß sein, auch wenn es einige klassifizierte Trainingsdaten Beispiele. Dies wird in den folgenden zwei Diagrammen gezeigt:
Wie Sie im Bild sehen können, wenn das C niedrig ist, ist der Rand höher (so implizit haben wir nicht so viele Kurven, die Linie folgt nicht streng den Datenpunkten), selbst wenn zwei Äpfel als Zitronen klassifiziert wurden., Wenn das C hoch ist, ist die Grenze voller Kurven und alle Trainingsdaten wurden korrekt klassifiziert. Vergessen Sie nicht, dass selbst wenn alle Trainingsdaten korrekt klassifiziert wurden, dies nicht bedeutet, dass das Erhöhen des C immer die Genauigkeit erhöht (aufgrund von Überanpassungen).
Gamma
Die nächste wichtige parameter ist Gamma. Der Gamma-Parameter legt fest, wie weit der Einfluss eines einzelnen Trainingsbeispiels reicht. Dies bedeutet, dass High Gamma nur Punkte in der Nähe der plausiblen Hyperebene berücksichtigt und Low Gamma Punkte in größerer Entfernung berücksichtigt.,
Wie Sie sehen können, führt das Verringern des Gammas dazu, dass die richtige Hyperebene gefunden wird betrachten Sie Punkte in größeren Entfernungen, damit immer mehr Punkte verwendet werden (grüne Linien zeigen an, welche Punkte beim Finden der optimalen Hyperebene berücksichtigt wurden).
Rand
Der Letzte parameter ist der Rand. Wir haben bereits über Marge, höhere Marge, besseres Modell, also bessere Klassifizierung (oder Vorhersage) gesprochen., Die Marge sollte immer maximiert werden.
SVM-Beispiel mit Python
In diesem Beispiel verwenden wir Social_Networks_Ads.csv-Datei, die gleiche Datei wie im vorherigen Artikel, siehe KNN-Beispiel mit Python.
In diesem Beispiel werde ich nur die Unterschiede zwischen SVM und KNN aufschreiben, da ich mich nicht in jedem Artikel wiederholen möchte! Wenn Sie die gesamte Erklärung darüber wünschen, wie wir den Datensatz lesen, wie wir unsere Daten analysieren und aufteilen oder wie wir die Entscheidungsgrenzen auswerten oder darstellen können, lesen Sie bitte das Codebeispiel aus dem vorherigen Kapitel (KNN)!,
Da die Sklearn-Bibliothek eine sehr gut geschriebene und nützliche Python-Bibliothek ist, müssen wir nicht zu viel Code ändern. Der einzige Unterschied besteht darin, dass wir die SVC-Klasse (SVC = SVM in sklearn) aus sklearn importieren müssen.svm statt der Knighborsclassifier-Klasse von sklearn.benachbart.
Nach dem Import der SVC können wir unser neues Modell mit dem vordefinierten Konstruktor erstellen. Dieser Konstruktor hat viele Parameter, aber ich werde nur die wichtigsten beschreiben, meistens verwenden Sie keine anderen Parameter.,
Die wichtigsten Parameter sind:
kernel: der zu verwendende Kerneltyp. Die häufigsten Kernel sind rbf (dies ist der Standardwert), poly oder sigmoid, aber Sie können auch Ihren eigenen Kernel erstellen.,
C: Dies ist der Regularisierungsparameter, der im Abschnitt Abstimmparameter beschrieben wird
gamma: Dies wurde auch im Abschnitt Abstimmparameter beschrieben
Grad: Es wird nur verwendet, wenn der gewählte Kernel poly ist und den Grad der polinom
Wahrscheinlichkeit festlegt: Dies ist ein boolescher Parameter, und wenn es wahr ist, gibt das Modell für jede Vorhersage den Vektor der Wahrscheinlichkeiten zurück, zu jeder Klasse der Antwortvariablen zu gehören. Im Grunde gibt es Ihnen also das Vertrauen für jede Vorhersage.,
Schrumpfen: Dies zeigt an, ob eine schrumpfende Heuristik für die Optimierung des SVM verwendet werden soll oder nicht, die für die sequentielle minimale Optimierung verwendet wird. Der Standardwert ist true, und wenn Sie keinen guten Grund haben, ändern Sie diesen Wert bitte nicht in false, da das Schrumpfen Ihre Leistung erheblich verbessert, was in den meisten Fällen zu einem sehr geringen Genauigkeitsverlust führt.
Jetzt können Sie die Ausgabe dieses Codes sehen., Die Entscheidungsgrenze für den Trainingssatz sieht folgendermaßen aus:
Wie wir sehen können und wie wir in der Tuning Parameter abschnitt, weil die C hat eine kleine wert (0,1) die entscheidung grenze ist glatt.
Nun, wenn wir das C von 0 erhöhen.,1 bis 100 Wir werden mehr Kurven in der Entscheidungsgrenze haben:
Was würde passieren, wenn wir C=0.1 verwenden, aber jetzt Gamma von 0,1 auf 10 erhöhen? Mal sehen!
Was ist hier passiert? Warum haben wir so ein schlechtes Modell?, Wie Sie im Abschnitt Tuning-Parameter gesehen haben, bedeutet High Gamma, dass wir bei der Berechnung der plausiblen Hyperebene nur Punkte berücksichtigen, die nahe beieinander liegen. Da nun die Dichte der grünen Punkte nur in der ausgewählten grünen Region hoch ist, sind die Punkte in dieser Region nahe genug an der plausiblen Hyperebene, so dass diese Hyperebenen ausgewählt wurden. Seien Sie vorsichtig mit dem Gamma-Parameter, da dies einen sehr schlechten Einfluss auf die Ergebnisse Ihres Modells haben kann, wenn Sie es auf einen sehr hohen Wert einstellen (was ein „sehr hoher Wert“ ist, hängt von der Dichte der Datenpunkte ab).,
Für dieses Beispiel sind die besten Werte für C und Gamma 1.0 und 1.0. Wenn wir nun unser Modell auf dem Testset ausführen, erhalten wir das folgende Diagramm:
Und die Verwirrungsmatrix sieht so aus dies:
Wie Sie sehen können, haben wir nur 3 falsch Positive und nur 4 Falsch Negative., Die Genauigkeit dieses Modells beträgt 93%, was ein wirklich gutes Ergebnis ist, wir haben eine bessere Punktzahl erzielt als mit KNN (die eine Genauigkeit von 80% hatte).
HINWEIS: Genauigkeit ist nicht die einzige Metrik, die in ML verwendet wird, und aufgrund des Genauigkeitsparadoxons auch nicht die beste Metrik zur Bewertung eines Modells. Wir verwenden diese Metrik der Einfachheit halber, aber später werden wir im Kapitel Metriken zur Bewertung von KI-Algorithmen über das Genauigkeitsparadoxon sprechen und andere sehr beliebte Metriken zeigen, die in diesem Bereich verwendet werden.,
Schlussfolgerungen
In diesem Artikel haben wir einen sehr beliebten und leistungsstarken Algorithmus für überwachtes Lernen gesehen, die Support Vector Machine. Wir haben die Grundidee gelernt, was eine Hyperebene ist, was Unterstützungsvektoren sind und warum sie so wichtig sind. Wir haben auch viele visuelle Darstellungen gesehen, die uns geholfen haben, alle Konzepte besser zu verstehen.
Ein weiteres wichtiges Thema, das wir berührt haben, ist der Kernel-Trick, der uns geholfen hat, nichtlineare Probleme zu lösen.
Um ein besseres Modell zu haben, haben wir Techniken gesehen, um den Algorithmus abzustimmen., Am Ende des Artikels hatten wir ein Codebeispiel in Python, das uns zeigte, wie wir den KNN-Algorithmus verwenden können.
Als letzte Gedanken möchte ich einige Profis & Nachteile und einige beliebte Anwendungsfälle geben.,
<
SVN kann sehr effizient sein, da es nur eine Teilmenge der Trainingsdaten verwendet, nur die Stützvektoren
Funktioniert sehr gut auf kleineren Datensätzen, auf nichtlinearen Datensätzen und hochdimensionalen Räumen
Ist sehr effektiv in Fällen, in denen die Anzahl der Dimensionen größer ist als die Anzahl der Proben
Es kann eine hohe Genauigkeit haben, manchmal sogar besser als neuronale Netze
Nicht sehr empfindlich auf Überanpassung
/li>
Cons
Die Trainingszeit ist hoch, wenn wir große Datensätze haben
Wenn der Datensatz mehr Rauschen aufweist (i.,e. Ziel-Klassen überlappen) SVM nicht gut
Popular Use Cases
Text-Klassifizierung
Spamschutz
Sentiment-Analyse
Aspekt-basierte Erkennung
Aspekt-basierte Erkennung
Handschriftlichen digit recognition