Cómo visualizar las agrupaciones en un k-medias modelo de aprendizaje no supervisado

El conjunto de datos del iris no es fácil de graficar para análisis predictivo en su forma original. Por lo tanto usted tiene que reducir el número de dimensiones mediante la aplicación de una algoritmo de reducción de dimensionalidad que opera en todos los cuatro números y da salida a dos nuevos números (que representan los cuatro números originales) que se pueden utilizar para hacer la trama.

sépalo Longitudsépalo AnchoLongitud pétalopétalo AnchoClase de destino / de la etiqueta
5.13.51.40.2Setosa (0)
7.03.24.71.4Versicolor (1)
6.33.36.02.5Virginica (2)

El siguiente código hará la reducción de la dimensión:

Video: Cluster Analysis in Excel - PrimaXL Tutorial : k Means Clustering (sub. SPN, KOR)

gt; gt; gt; de sklearn.decomposition PCAgt importación; gt; gt; de sklearn.datasets importar load_irisgt; gt; gt; iris = load_iris () gt; gt; gt; PCA = PCA (n_components = 2) .fit (iris.data) gt; gt; gt; pca_2d = pca.transform (iris.data)

Las líneas 2 y 3 de carga del conjunto de datos del iris.

Video: Presentación: Un nuevo enfoque de trabajo para la educación básica

Después de ejecutar el código, puede escribir el pca_2d variable en el intérprete y se las matrices de salida (pensar en una formación como un contenedor de elementos de una lista) con dos elementos en lugar de cuatro. Ahora que tiene el conjunto de características reducido, puede trazar los resultados con el siguiente código:

gt; gt; gt; pylab importación como plgt; gt; gt; para i en el rango (0, pca_2d.shape [0]): gt; gt; gt; si iris.target [i] == 0: gt; gt; gt; c1 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `r`, marcador = `+`) gt; gt; gt; elif iris.target [i] == 1: gt; gt; gt; c2 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `g`, marcador = `o`) gt; gt; gt; elif iris.target [i] == 2: gt; gt; gt; c3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `b`, marcador = `*`) gt; gt; gt; pl.legend ([c1, c2, c3], [ `Setosa`, `versicolor`, `Virginica`]) gt; gt; gt; pl.title ( `conjunto de datos del iris con 3 clusters y knownoutcomes`) gt; gt; gt; pl.show ()

La salida de este código es una trama que debe ser similar a la gráfica a continuación. Este es un gráfico que representa cómo los resultados conocidos del conjunto de datos del iris debe ser similar. Es lo que le gustaría que el K-means clustering de lograr.

La imagen muestra un gráfico de dispersión, que es un gráfico de puntos trazados que representa una observación en un gráfico, de todos los 150 observaciones. Como se indica en las parcelas gráfico y leyenda:

  • Hay 50 ventajas que representan la setosa clase.

  • Hay 50 círculos que representan la clase versicolor.

  • Hay 50 estrellas que representan la clase virginica.

El siguiente gráfico muestra una representación visual de los datos que le está pidiendo K-means a agruparse: una gráfico de dispersión con 150 puntos de datos que no han sido marcados (por lo tanto todos los puntos de datos son del mismo color y forma). El algoritmo k-medias no sabe cualquier objetivo resultados- los datos reales que estamos corriendo por el algoritmo no ha tenido su dimensionalidad aún reducido.

Video: The first 20 hours -- how to learn anything | Josh Kaufman | TEDxCSU

La siguiente línea de código crea este diagrama de dispersión, utilizando los valores de X e Y de pca_2d y colorear todo el negro puntos de datos (c =’negro’ establece el color a negro).

gt; gt; gt; pl.scatter (pca_2d [:, 0], pca_2d [:, 1], c = `negro`) gt; gt; gt; pl.show ()

Si intenta ajustar los datos bidimensionales, que se redujo en un PCA, el algoritmo k-medias fallará para agrupar las clases virginica y Versicolor correctamente. El uso de PCA para preprocesar los datos destruirán demasiada información que K-means necesidades.

Después de K-means ha provisto los datos del iris, se puede hacer un gráfico de dispersión de los grupos que el algoritmo produce- basta con ejecutar el siguiente código:

gt; gt; gt; para i en el rango (0, pca_2d.shape [0]): gt; gt; gt; si kmeans.labels_ [i] == 1: gt; gt; gt; c1 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `r`, marcador = `+`) gt; gt; gt; kmeans.labels_ elif [i] == 0: gt; gt; gt; c2 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `g`, marcador = `o`) gt; gt; gt; kmeans.labels_ elif [i] == 2: gt; gt; gt; c3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `b`, marcador = `*`) gt; gt; gt; pl.legend ([c1, c2, c3], [ `Cluster 1`, `Cluster 0`, `Cluster 2`]) gt; gt; gt; pl.title ( `K-significa grupos el conjunto de datos del iris en 3clusters`) gt; gt; gt; pl.show ()

Recordemos que K-means etiquetados las primeras 50 observaciones con la etiqueta de 1, el segundo 50 con la etiqueta de 0, y el último 50 con la etiqueta de 2. En el código que acabamos de dar, las líneas con el Si, elif, y leyenda declaraciones (líneas 2, 5, 8, 11) refleja esas etiquetas. Este cambio se hizo para que sea fácil de comparar con los resultados reales.

La salida del diagrama de dispersión se muestra aquí:

Compara las K-means clustering de salida para el gráfico de dispersión original - que proporciona etiquetas porque se conocen los resultados. Se puede ver que las dos parcelas se parecen entre sí. El algoritmo K-means hizo un muy buen trabajo con la agrupación. A pesar de las predicciones no son perfectos, que se acercan. Eso es una victoria para el algoritmo.

En el aprendizaje no supervisado, que rara vez se obtiene una salida que es 100 por ciento exacta, porque los datos del mundo real rara vez es así de simple. Usted no va a saber cuántos grupos para elegir (o cualquier parámetro de inicialización para otros algoritmos de agrupamiento). Tendrá que manejar los valores extremos (puntos de datos que no parecen compatibles con otros) y conjuntos de datos complejos que son densos y no linealmente separables.

Sólo se puede llegar a este punto, si se sabe cuántos grupos tiene el conjunto de datos. No es necesario que preocuparse de qué funciones le conviene utilizar o reducir la dimensionalidad de un conjunto de datos que tiene tan pocas características (en este caso, cuatro). Este ejemplo sólo reduce las dimensiones por el bien de la visualización de los datos en un gráfico. No se ajustaba al modelo con el conjunto de datos dimensionalidad reducida.

Aquí está la lista completa del código que crea dos gráficos de dispersión y códigos de color de los puntos de datos:

gt; gt; gt; de sklearn.decomposition PCAgt importación; gt; gt; de importación sklearn.cluster KMeansgt; gt; gt; de sklearn.datasets importar load_irisgt; gt; gt; pylab importación como plgt; gt; gt; iris = load_iris () gt; gt; gt; PCA = PCA (n_components = 2) .fit (iris.data) gt; gt; gt; pca_2d = pca.transform (iris.data) gt; gt; gt; pl.figure ( `parcela de referencia`) gt; gt; gt; pl.scatter (pca_2d [:, 0], pca_2d [:, 1], c = iris.target) gt; gt; gt; kmeans = KMeans (n_clusters = 3, random_state = 111) gt; gt; gt; kmeans.fit (iris.data) gt; gt; gt; pl.figure ( `K-means con 3 racimos`) gt; gt; gt; pl.scatter (pca_2d [:, 0], pca_2d [:, 1], c = kmeans.labels_) gt; gt; gt; pl.show ()
Artículos Relacionados