Wie die Classifier in einem SVM Betreute Lernmodell zu visualisieren

Die Iris-Datensatz ist nicht leicht für Predictive Analytics in seiner ursprünglichen Form grafisch darzustellen, weil man nicht alle vier Koordinaten (aus den Merkmalen) des Datensatzes auf einem zweidimensionalen Bildschirm zeichnen kann. Deshalb müssen Sie die Dimensionen reduzieren, indem eine Anwendung Dimensionsreduktion Algorithmus auf die Funktionen.

In diesem Fall wird der Algorithmus Sie die Datenumwandlung zu tun, werden (die Abmessungen der Merkmale zu reduzieren) ist Principal Component Analysis (PCA) bezeichnet.

sepal Längesepal BreitePetal LängePetal BreiteZielklasse / Label
5.13.51.40,2Setosa (0)
7.03.24.71.4Versicolor (1)
6.33.36.02.5Virginica (2)

Der PCA-Algorithmus nimmt alle vier Merkmale (Zahlen), hat einige Mathematik auf sie, und gibt zwei neue Zahlen, die Sie den Plot zu tun verwenden können. Denken Sie an PCA als zwei folgenden allgemeinen Schritte:

  1. Es nimmt als Eingabe einen Datensatz mit vielen Funktionen.

  2. Es reduziert, dass die Eingabe auf einen kleineren Satz von Funktionen (benutzerdefiniert oder Algorithmus bestimmt), indem die Komponenten des Merkmals Umwandlung gesetzt in das, was sie der Auffassung ist als die Haupt (Haupt-) Komponenten.

Diese Transformation des Feature-Set auch genannt wird Merkmalsextraktion. Der folgende Code funktioniert die Dimensionsreduktion:

>>> Von sklearn.decomposition Import PCA >>> PKA = PCA (n_components = 2) .fit (X_train) >>> pca_2d = pca.transform (X_train)

Wenn Sie bereits alle Bibliotheken oder Datensätze importiert haben, ist es nicht notwendig, erneut zu importieren oder laden Sie sie in Ihrem aktuellen Python-Sitzung. Wenn Sie dies tun, aber sollte es nicht Ihr Programm auswirken.

Nachdem Sie den Code ausführen, können Sie den Typ pca_2d Variable im Interpreter und sehen, dass es Arrays mit zwei Elementen statt vier Ausgänge. Diese beiden neuen Zahlen sind mathematische Darstellungen der vier alten Nummern. Wenn die reduzierte Funktion eingestellt haben, können Sie die Ergebnisse des Grundstückes durch den folgenden Code:

bild0.jpg
>>> Import pylab als pl >>> for i in range (0, pca_2d.shape [0]): >>> wenn y_train [i] == 0: >>> c1 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'r', Marker = '+') >>> Elif y_train [i] == 1: >>> c2 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'g', Marker = 'o') >>> Elif y_train [i] == 2: >>> c3 = pl.scatter (pca_2d [i, 0], pca_2d [i , 1], c = 'b', Marker = '*') >>> pl.legend ([c1, c2, c3], [ 'Setosa', 'versicolor', 'Virginica']) >>> pl. Titel ( "Iris Trainingsdaten mit drei Klassen andknown Ergebnisse") >>> pl.show ()

Das ist ein Streudiagramm - eine Visualisierung der gezeichneten Punkte Beobachtungen in einem Diagramm darstellen. Diese besondere Streudiagramm stellt die bekannten Ergebnisse der Iris Trainingsdaten. Es gibt 135 eingetragenen Punkte (Beobachtungen) aus unserem Trainingsdaten. Die Ausbildung Datensatz besteht aus

  • 45 Pluspunkte, die die Setosa Klasse darstellen.

  • 48 Kreise, die die versicolor Klasse darstellen.

  • 42 Sterne, die die Virginica Klasse darstellen.

Sie können durch Eingabe folgenden Code der angegebenen Anzahl von Klassen bestätigen:

>>> Summe (y_train == 0) 45 >>> Summe (y_train == 1) 48 >>> Summe (y_train == 2) 42

Aus diesem Diagramm kann man deutlich sagen, dass die Setosa Klasse von den anderen beiden Klassen linear trennbar ist. Während die versicolor und Virginica Klassen durch eine gerade Linie nicht vollständig trennbar sind, sind sie von sehr viel nicht überlappen. Von einer einfachen visuellen Perspektive sollten die Klassifizierer ziemlich gut tun.

Das Bild unten zeigt eine Darstellung der Support Vector Machine (SVM) Modell mit einem Datensatz trainiert, die zwei Funktionen dimensions reduziert wurde. Vier Merkmale ist ein kleines Feature Set-in diesem Fall möchten Sie alle vier so zu halten, dass die Daten die meisten seiner nützlichen Informationen behalten können. Das Grundstück ist hier als visuelle Hilfe gezeigt.

Dieses Grundstück umfasst die Entscheidungsfläche für den Klassifikator - Bereich in der grafischen Darstellung, die die Entscheidungsfunktion, die SVM verwendet repräsentiert das Ergebnis der neuen Dateneingabe zu bestimmen. Die Linien trennen die Bereiche, in denen das Modell die besondere Klasse vorhergesagt werden, dass ein Datenpunkt gehört.

Der linke Teil der Handlung wird die Setosa Klasse vorhersagen, wird der mittlere Abschnitt der versicolor Klasse vorhersagen, und der rechte Teil die Virginica Klasse vorhersagen.

Das SVM-Modell, das Sie erstellt habe nicht mit dem dimensions reduziert Feature-Set. Dieses Modell verwendet nur Dimensionsreduktion hier eine Darstellung der Entscheidungsfläche des SVM-Modell zu erzeugen - als visuelle Hilfe.

Die vollständige Auflistung der Code, der die Handlung erzeugt wird als Referenz zur Verfügung gestellt. Es sollte nicht mit unserem aktuellen Beispiel in der Reihenfolge ausgeführt werden, wenn Sie folgende entlang. Es kann einige der Variablen zu überschreiben, die Sie bereits in der Sitzung haben können.

Der Code, um diese Handlung zu erzeugen, basiert auf dem Beispielcode auf die zur Verfügung gestellten scikit erlern Webseite. Sie können erfahren Sie mehr über Plots wie diese bei der Erstellung Scikit-Learn Webseite.

image1.jpg

Hier ist die vollständige Auflistung der Code, der das Grundstück erstellt:

>>> Von sklearn.decomposition Import PCA >>> aus sklearn.datasets importieren load_iris >>> aus sklearn Import SVM >>> von sklearn Import cross_validation >>> import pylab als pl >>> import numpy als np >>> Iris = load_iris () >>> X_train, X_test, y_train, y_test = cross_validation.train_test_split (iris.data, iris.target, test_size = 0,10, random_state = 111) >>> PKA = PCA (n_components = 2) .fit (X_train ) >>> pca_2d = pca.transform (X_train) >>> svmClassifier_2d = svm.LinearSVC (random_state = 111) .fit (pca_2d, y_train) >>> for i in range (0, pca_2d.shape [0]): >>> wenn y_train [i] == 0: >>> c1 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'r', s = 50, marker = '+' ) >>> Elif y_train [i] == 1: >>> c2 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'g', s = 50, Marker = 'o ') >>> Elif y_train [i] == 2: >>> c3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c =' b ', s = 50, Marker =' * ') >>> pl.legend ([c1, c2, c3], [' Setosa ',' versicolor ',' Virginica ']) >>> x_min, x_max = pca_2d [:, 0] · min () - 1, pca_2d [: 0] .max () + 1 >>> y_min, Y_MAX = pca_2d [:, 1] · min () - 1, pca_2d [:, 1] .max () + 1 >>> xx , yy = np.meshgrid (np.arange (x_min, x_max, .01), np.arange (y_min, Y_MAX, .01)) >>> Z = svmClassifier_2d.predict (np.c_ [xx.ravel (), yy.ravel ()]) >>> Z = Z.reshape (xx.shape) >>> pl.contour (xx, yy, Z) >>> pl.title ( "Support Vector Machine Entscheidung Surface ') >> > pl.axis ( 'off') >>> pl.show ()

Menü