Wie zu visualisieren die Cluster in einer K-Means Unüberwachte Lernmodell

Die Iris-Datensatz ist nicht leicht für Predictive Analytics in seiner ursprünglichen Form grafisch darzustellen. Deshalb müssen Sie die Anzahl der Dimensionen reduzieren, indem eine Anwendung Dimensionalität Reduktionsalgorithmus dass arbeitet auf allen vier Zahlen und gibt zwei neue Nummern (, die die ursprünglichen vier Zahlen darstellen), die Sie den Plot zu tun verwenden können.

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 folgende Code wird die Dimensionsreduktion zu tun:

>>> Von sklearn.decomposition Import PCA >>> aus sklearn.datasets importieren load_iris >>> Iris = load_iris () >>> PKA = PCA (n_components = 2) .fit (iris.data) >>> pca_2d = PKA .transform (iris.data)

Linien 2 und 3 Last der Iris-Datensatz.

Nachdem Sie den Code ausführen, können Sie den Typ pca_2d Interpreter Variable in und es wird das Ausgangsfeld (man denke an ein Feld als Container der Elemente in einer Liste) mit zwei Positionen statt vier. Nun, da Sie die reduzierte Funktionsumfang haben, können Sie die Ergebnisse mit dem folgenden Code Grundstück:

>>> Import pylab als pl >>> for i in range (0, pca_2d.shape [0]): >>> wenn iris.target [i] == 0: >>> c1 = pl.scatter (pca_2d [ i, 0], pca_2d [i, 1], c = 'r', Marker = '+') >>> Elif iris.target [i] == 1: >>> c2 = pl.scatter (pca_2d [i , 0], pca_2d [i, 1], c = 'g', Marker = 'o') >>> Elif iris.target [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.title ( "Iris-Datensatz mit drei Clustern und knownoutcomes ') >>> pl.show ()

Der Ausgang dieses Codes ist eine grafische Darstellung, die auf der Grafik unten ähnlich sein sollte. Dies ist ein Diagramm darstellt, wie die bekannten Ergebnisse der Iris-Datensatz aussehen sollte. Es ist, was würden Sie die K-Means-Clustering gerne zu erreichen.

Das Bild zeigt ein Streudiagramm, das eine grafische Darstellung der eingezeichneten Punkte ist eine Beobachtung in einem Diagramm darstellen, von allen 150 Beobachtungen. Wie auf den Graphen ist und Legende angegeben:

  • Es gibt 50 Pluspunkte, die das repräsentieren setosa Klasse.

  • Es gibt 50 Kreise, die das repräsentieren versicolor Klasse.

  • Es gibt 50 Sterne, die das repräsentieren virginica Klasse.

    bild0.jpg

Die folgende Grafik zeigt eine visuelle Darstellung der Daten, die Sie K-Mittel fragen Cluster: a Streudiagramm mit 150 Datenpunkten, die nicht markiert sind (daher die Datenpunkte alle die gleiche Farbe und Form). Der K-Means-Algorithmus kennt keine Ziel outcomes- den tatsächlichen Daten, die wir durch den Algorithmus laufen hat seine Dimensionalität noch nicht reduziert hatte.

image1.jpg

Die folgende Codezeile erstellt dieses Streudiagramm, mit den X- und Y-Werte von pca_2d und Färben alle Datenpunkte schwarz (c = 'black' setzt die Farbe auf schwarz).

>>> Pl.scatter (pca_2d [: 0], pca_2d [:, 1], c = 'black') >>> pl.show ()

Wenn Sie versuchen, die zweidimensionalen Daten passend, dass durch PCA reduziert wurde, die K-Means-Algorithmus wird scheitern die Virginica und versicolor Klassen richtig zu gruppieren. Mit PCA vorverarbeitet werden zerstören die Daten zu viele Informationen, dass K-Mittel-Bedürfnisse.

Nach dem K-Mittel, um die Iris-Daten ausgestattet ist, können Sie ein Streudiagramm der Cluster machen, dass der Algorithmus produced- nur den folgenden Code ausführen:

>>> For i in range (0, pca_2d.shape [0]): >>> wenn kmeans.labels_ [i] == 1: >>> c1 = pl.scatter (pca_2d [i, 0], pca_2d [ i, 1], c = 'r', Marker = '+') >>> Elif kmeans.labels_ [i] == 0: >>> c2 = pl.scatter (pca_2d [i, 0], pca_2d [i , 1], c = 'g', Marker = 'o') >>> Elif kmeans.labels_ [i] == 2: >>> c3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'b', Marker = '*') >>> pl.legend ([c1, c2, c3], [ 'Cluster 1 "," Cluster-0 "," Cluster 2']) >>> pl.title ( "K-Means-Cluster die Iris-Datensatz in 3clusters ') >>> pl.show ()

Daran erinnern, dass K-Mittel, um die ersten 50 Beobachtungen mit dem Etikett versehen von 1, die zweite 50 mit Etikett 0, und die letzten 50 mit dem Label 2. Im Code nur gegeben, die Linien mit der ob, Elif, und Legende Aussagen (Linien 2, 5, 8, 11) reflektiert diese Etiketten. Diese Änderung wurde vorgenommen, um es einfach mit den tatsächlichen Ergebnissen zu vergleichen.

Der Ausgang des Streudiagramm wird hier gezeigt:

image2.jpg

Vergleichen Sie die K-Mittel-Cluster-Ausgang auf den ursprünglichen Streudiagramm - die Etiketten liefert, weil die Ergebnisse bekannt sind. Sie können sehen, dass die beiden Grundstücke ähneln einander. Der K-Means-Algorithmus hat einen ziemlich guten Job mit dem Clustering. Obwohl die Prognosen nicht perfekt sind, kommen sie in der Nähe. Das ist ein Gewinn für den Algorithmus.

In unüberwachten Lernen erhalten Sie selten eine Ausgabe, die zu 100 Prozent genau ist, weil Daten der realen Welt selten so einfach. Sie wissen nicht, wie viele Cluster (oder jeder Initialisierungsparameter für andere Clustering-Algorithmen) zu wählen. Sie müssen Ausreißer (Datenpunkte, die nicht mit anderen konsistent scheinen) sie behandeln und komplexe Datenmengen, die sind dicht und nicht linear trennbar sind.

Sie können nur bis zu diesem Punkt, wenn Sie wissen, wie viele Cluster der Datensatz hat. Sie brauchen sich keine Sorgen über welche Funktionen die Dimensionalität eines Datensatzes zu verwenden oder zu reduzieren, die so wenige Funktionen (in diesem Fall vier) hat. Dieses Beispiel reduziert nur die Abmessungen aus Gründen in einem Diagramm die Daten visualisieren. Es passte das Modell nicht mit der Dimensionalität reduzierten Datensatzes.

Hier ist die vollständige Auflistung der Code, der beide Streudiagramme und Farbcodes die Datenpunkte erstellt:

>>> Von sklearn.decomposition Import PCA >>> von sklearn.cluster Import KMeans >>> aus sklearn.datasets importieren load_iris >>> import pylab als pl >>> Iris = load_iris () >>> PKA = PCA (n_components = 2) .fit (iris.data) >>> pca_2d = pca.transform (iris.data) >>> pl.figure ( "Reference Plot ') >>> pl.scatter (pca_2d [:, 0], pca_2d [:, 1], c = iris.target) >>> KMeans = KMeans (n_clusters = 3, random_state = 111) >>> kmeans.fit (iris.data) >>> pl.figure ( 'K-Mittel mit 3 Cluster ') >>> pl.scatter (pca_2d [:, 0], pca_2d [:, 1], c = kmeans.labels _) >>> pl.show ()

Menü