Implementación de agrupaciones de K-medias en el conjunto de datos sobre delitos



Implementación del agrupamiento de Kmeans en el conjunto de datos sobre delitos de EE. UU.

En este blog, comprenderá qué es la agrupación de K-means y cómo se puede implementar en los datos criminales recopilados en varios estados de EE. UU. Los datos contienen delitos cometidos como: asalto, asesinato y violación en arrestos por cada 100,000 residentes en cada uno de los 50 estados de EE. UU. En 1973. Además de analizar los datos, también aprenderá sobre:

    • Encontrar el número óptimo de clústeres.
    • Minimizar la distorsión
    • Creación y análisis de la curva del codo.
  • Comprender el mecanismo del algoritmo k-means.

Empecemos por el análisis. Los datos se ven como:





dataset

Haga clic en la imagen para descargar este conjunto de datos

¿Necesitas este conjunto de datos? Haga clic en la imagen de arriba para descargarla.



Primero, preparemos los datos para el análisis. Para hacerlo, debemos eliminar cualquier valor de NA que pueda estar presente en los datos y convertir los datos en una matriz.

> crime0 crime str (crime) num [1:50, 1: 4] 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ... - attr (*, 'dimnames') = Lista de 2 .. $: chr [1 : 50] 'Alabama' 'Alaska' 'Arizona' 'Arkansas' ... .. $: chr [1: 4] 'Asesinato' 'Asalto' 'UrbanPop' 'Violación'

Supongamos que el número de clústeres es 5. La función Kmeans () toma los datos de entrada y el número de clústeres en los que se agruparán los datos. La sintaxis es: kmeans (datos, k) donde k es el número de centros de conglomerados.

> cl class (cl) [1] 'kmeans'

Analizando la agrupación en clústeres:



> str (cl) Lista de 9 $ cluster: Nombrado int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'nombres') = chr [1:50] ' Alabama '' Alaska '' Arizona '' Arkansas '... $ centros: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*,' dimnames ') = Lista de 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Asesinato' 'Asalto' 'UrbanPop' 'Violación '$ totss: num 355808 $ withinss: num [1: 5] 4548 2286 16272 1480 3653 $ tot.withinss: num 28240 $ betweeninss: num 327568 $ size: int [1: 5] 10 9 14 10 7 $ iter: int 3 $ ifault: int 0 - atributo (*, 'clase') = chr 'kmeans'

La función str () da la estructura de los kmeans que incluye varios parámetros como withinss, between, etc, analizando los cuales puedes averiguar el rendimiento de kmeans.

between: Entre la suma de cuadrados, es decir, similitud intralúster

withinss: Dentro de la suma del cuadrado, es decir, similitud entre grupos

totwithinss: suma de todos los dentro de todos los grupos, es decir, similitud total intra-grupo

Un buen agrupamiento tendrá un valor más bajo de dentro y un valor más alto de intermedio, que depende del número de grupos 'k' elegidos inicialmente. Veamos cómo podemos encontrar el valor óptimo de 'k'.

Encontrar el valor óptimo de 'k'

Un valor óptimo de 'k' es el valor que nos da un conjunto convergente de grupos con una distorsión mínima. Cuanto mayor sea la distorsión, peor serán las agrupaciones formadas.

Distorsión:

La distorsión se puede calcular en términos de 'dentro' de cada uno de los grupos. Cuanto menor sea el valor de 'dentro' de un grupo en particular, más densamente poblado estará, por lo tanto, mínima distorsión.

Una de las principales diferencias entre un hacker y un hacker ético es:
kmeans.wss.k<- function(crime, k){ km = kmeans(crime, k) return (km$tot.withinss) }

Esta función toma los datos y el valor de k y devuelve el 'km $ totwithinss' para ello. 'Km $ totwithinss' es la suma total de cuadrados dentro del grupo, por lo que se incluye dentro de los 5 grupos creados, es decir.suma (sin). Cuanto mayor sea el valor de 'km $ totwithinss', mayor será la distorsión.

Para k = 5, withinss es 24417.02

> kmeans.wss.k (delito, 5) [1] 24417.02

Aumentemos el valor de k de 5 a 10 y observemos la diferencia.

> kmeans.wss.k (delito, 10) [1] 11083.04

Puede verse que a medida que aumenta el valor de K, la distorsión disminuye.

Podemos sacar los diferentes valores de 'km $ totwithinss' y trazarlos en un gráfico para encontrar la relación entre la distorsión y el valor de k. La siguiente función lo hace por nosotros:

> kmeans.dis maxk = 10> dis = kmeans.dis (crime, maxk)> plot (1: maxk, dis, type = 'b', xlab = 'Number of Clusters', + ylab = 'Distortion', + col = 'azul')

Ta Da !!! Así tenemos la famosa curva de codo con nosotros.

Curva del codo:

Este es el gráfico entre 'k', el número de grupos y el 'totwithinss' (o distorsión) para cada valor de k. Puede ver que cuando el número de grupos es menor, hay una disminución gradual de la distorsión, pero a medida que seguimos aumentando el valor de k, la tasa de reducción de los valores de distorsión se vuelve constante.

Este valor de k más allá del cual la tasa de distorsión se vuelve constante es el valor óptimo. Aquí k = 4.

Apliquemos algo de animación para entender cómo R nos dio los resultados agrupados.

> biblioteca (animación)> cl<- kmeans.ani(crime, 4)

Algoritmo de agrupación Kmeans:

Entendamos el algoritmo en el que funciona la agrupación de k-means:

java util logging logger example

Paso 1. Si k = 4, seleccionamos 4 puntos aleatorios y asumimos que son centros de conglomerados para los conglomerados que se crearán.

Paso 2. Tomamos un punto de datos aleatorio del espacio y averiguamos su distancia de los 4 centros de los conglomerados. Si el punto de datos está más cerca del centro del grupo verde, es de color verde y, de manera similar, todos los puntos se clasifican entre los 4 grupos.

Paso 3. Ahora calculamos el centroide de todos los puntos verdes y asignamos ese punto como el centro del grupo para ese grupo.

De manera similar, calculamos los centroides para los 4 puntos coloreados (agrupados) y asignamos los nuevos centroides como centros de los grupos.

Etapa 4. El paso 2 y el paso 3 se ejecutan de forma iterativa, a menos que los centros del clúster converjan en un punto y ya no se muevan.


Así, llegamos a los centros de los clusters convergentes.

Se puede ver que los datos se dividen en 4 grupos. Los centros de clúster son:

> cl $ centros Asesinato Asalto UrbanPop Violación Texas 4.740741 104.8519 62.96296 16.10 Luisiana 10.907143 219.9286 71.71429 25.95 Carolina del Sur 13.375000 284.5000 46.25000 25.05 Nuevo México 11.040000 298.0000 77.60000 32.68

El grupo 4 con 'Nuevo México' como centro del grupo tiene una tasa de criminalidad enorme y también tiene la población más alta.

Seguimiento del Grupo 3 y del Grupo 2.

A cada estado se le asigna un grupo, según el cual ahora podemos predecir su clasificación de delitos. La salida se ve como:

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios y nos pondremos en contacto con usted.

Artículos Relacionados: