[PYTHON] SVM (Mehrklassenklassifikation)

Was ist SVM?

Abkürzung für Support Vector Machine. Eine Methode zum Schätzen der Klassifizierung, zu der unbekannte Daten gehören, indem eine Linie erhalten wird, die mehrere Klassen mithilfe von Trainingsdaten klassifiziert (Erstellung von Lernmodellen).

Übersicht über die Klassifizierung in SVM

Die Ebene, die eine Ebene niedriger als die ursprüngliche Dimension ist, wird als Superebene bezeichnet, und es wird nach der optimalen Superebene (Trennebene) gesucht.

In der folgenden Abbildung werden beispielsweise die Linien (H1 und H2) gezeichnet, die die schwarzen und weißen Kreise trennen. (Diese Abbildung zeigt zweidimensionale Daten von X1 und X2, aber H1 und H2 sind gerade Linien und eindimensional. Wenn die dreidimensionalen Daten die Eingabe sind, suchen Sie nach einer Ebene, die in zwei Dimensionen klassifiziert werden kann. )

スクリーンショット 2016-05-05 13.31.17.png

Der beste Weg, um die Trennfläche zu finden, besteht darin, nach der Trennfläche zu suchen, die den Rand maximiert. Der Rand ist die graue Linie in der Figur, die den Abstand der senkrechten Linie vom Punkt jeder Klasse zur Trennfläche darstellt.

Beispielsweise kann gesagt werden, dass sowohl H1 als auch H2 Trennflächen sind, die schwarze und weiße Kreise klassifizieren, aber H2, das einen großen Rand aufweist, hat eine höhere Klassifizierungskraft. (H3 kann nicht einmal klassifiziert werden, daher ist es nicht gut.)

Kernel-Trick (Kernel-Methode)

Das obige Beispiel scheint ordentlich kategorisiert zu sein, ist es aber in den meisten Fällen nicht. Die Methode zum Auffinden der Trennfläche in einem solchen Fall wird als Kernel-Trick bezeichnet.

In der folgenden Abbildung ist es beispielsweise schwierig, die roten und blauen Kreise durch eine gerade Linie zu trennen.

スクリーンショット 2016-05-05 13.46.57.png

Um die Proben sauber zu trennen, wird die Probe daher einem anderen Raum [Merkmalsraum] zugeordnet (Punkte werden gemäß einer bestimmten Regel verschoben), und die Trennfläche wird in diesem Raum gesucht.

スクリーンショット 2016-05-05 13.45.05.png

Wenn die Trennfläche mit dem maximalen Rand auf diese Weise erhalten wird und unbekannte Daten eingegeben werden, werden sie gemäß den Regeln zum Zeitpunkt der Zuordnung auf den Merkmalsraum abgebildet, und die Klasse wird entsprechend bestimmt, wo die Trennfläche auf den Merkmalsraum gehört.

Das ist sehr leicht zu verstehen. → Referenzvideo zum Kernel-Trick

Datenaufbereitung

Verwenden Sie Irisdaten. Mit hier.

Datenübersicht

{describe_iris.py}


iris.head()
スクリーンショット 2016-05-04 3.45.38.png

スクリーンショット 2016-05-04 3.50.37.png  の長さと幅のデータ

Versuchen

{svm.py}


import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn import datasets
from sklearn.cross_validation import train_test_split #Zur Kreuzvalidierung

#Datenaufbereitung
iris = datasets.load_iris()    #Daten laden
X = iris.data                  #Erklärender Variablensatz
Y = iris.target                #Objektiver Variablensatz
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=0) # random_state ist ein Startwert.

#SVM-Ausführung
from sklearn.svm import SVC #Für SVM
model = SVC()               #Instanzgenerierung
model.fit(X_train, Y_train) #SVM-Ausführung

#Vorausschauende Ausführung
from sklearn import metrics       #Zur Überprüfung der Genauigkeit
predicted = model.predict(X_test) #Vorausschauende Ausführung zum Testdatum
metrics.accuracy_score(Y_test, predicted)
> 0.97368421052631582

Genauigkeit 97,4%. hoch.

Recommended Posts

SVM (Mehrklassenklassifikation)
Mehrklassen-SVM mit Scikit-Learn
Naive Buchten (Mehrklassenklassifikation)
Keras Multiklassenklassifikation Iris
K Nachbarschaftsmethode (Mehrklassenklassifikation)
ROC-Kurve für die Klassifizierung mehrerer Klassen
Multi-Class Multi-Label-Klassifizierung von Bildern mit Pytorch
Algorithmus für maschinelles Lernen (Implementierung einer Klassifizierung mit mehreren Klassen)
SVM-Experiment 1
Algorithmus für maschinelles Lernen (von der Klassifizierung in zwei Klassen bis zur Klassifizierung in mehreren Klassen)