Entendamos los k-means usando el pequeño ejemplo usando los 4 objetos, y cada objeto tiene 2 atributos.
Nombre de objeto | Attribute_x | Atributo_y |
---|---|---|
M1 | 1 | 1 |
M2 | 2 | 1 |
M3 | 4 | 3 |
M4 | 5 | 4 |
K-means para resolver un ejemplo numérico:
Para resolver el problema numérico anterior a través de K-means, tenemos que seguir los siguientes pasos:
El algoritmo K-means es muy simple. Primero, tenemos que elegir cualquier número aleatorio de k y luego elegir los centroides o el centro de los grupos. Para elegir los centroides, podemos elegir cualquier número aleatorio de objetos para la inicialización (depende del valor de k).
Los pasos básicos del algoritmo K-means son los siguientes:
Entonces, cada objeto tiene dos puntos como X e Y, y representan en el espacio de gráficos como lo sigue:
Por lo tanto, inicialmente elegimos el valor de k = 2 como aleatorio para resolver nuestro problema anterior.
Paso 1: Inicialmente, elegimos los dos primeros objetos (1, 1) y (2, 1) como nuestros centroides. El siguiente gráfico muestra lo mismo. Llamamos a estos centroides C1 (1, 1) y C2 (2,1). Aquí, podemos decir que C1 es Group_1 y C2 es Group_2.
Paso 2: Ahora, calcularemos cada punto de datos del objeto a centroides utilizando la fórmula de distancia euclidiana.
Para calcular la distancia, usamos la siguiente fórmula.
Calculamos la distancia de los objetos a los centroides, como se muestra en la imagen a continuación.
Entonces, calculamos cada distancia de punto de datos del objeto a través del método de distancia anterior, finalmente obtuvimos la matriz de distancia como se indica a continuación:
Dm_0 =
0 | 1 | 3.61 | 5 | C1 = (1,1) clúster | grupo 1 |
1 | 0 | 2.83 | 4.24 | C2 = (2,1) clúster | Grupo 2 |
A | B | C | D | |
---|---|---|---|---|
1 | 2 | 4 | 5 | X |
1 | 1 | 3 | 4 | Y |
Ahora, calculamos el valor de distancia de cada objeto para cada centroide. Por ejemplo, los puntos de objeto (1,1) tienen un valor de distancia a C1 es 0 y C2 es 1.
Como, desde la matriz de distancia anterior, descubrimos que el objeto (1, 1) tiene una distancia al clúster1 (C1) es 0 y el clúster2 (C2) es 1. Entonces el objeto uno está cerca del cluster1 en sí.
Del mismo modo, si verificamos el objeto (4, 3), la distancia al clúster1 es 3.61 y cluster2 es 2.83. Entonces, el objeto (4, 3) cambiará a clúster2.
Del mismo modo, si verifica el objeto (2, 1), la distancia al clúster1 es 1 y el clúster2 es 0. Entonces, este objeto cambiará a Cluster2.
Ahora, de acuerdo con su valor de distancia, agrupamos los puntos (agrupación de objetos).
G_0 =
A | B | C | D | |
---|---|---|---|---|
1 | 0 | 0 | 0 | grupo 1 |
0 | 1 | 1 | 1 | Grupo 2 |
Ahora, de acuerdo con su valor de distancia, agrupamos los puntos (agrupación de objetos).
Y finalmente, el gráfico se verá a continuación después de hacer la agrupación (G_0).
Iteración_1: Ahora, calcularemos nuevos centroides a medida que los grupos iniciales cambiaran debido a la fórmula de distancia como se muestra en el G_0. Entonces, el Group_1 tiene solo un objeto, por lo que su valor sigue siendo C1 (1,1), pero el Group_2 tiene 3 objetos, por lo que su nuevo valor centralide es
Entonces, nuevo C1 (1,1) y C2 (3.66, 2.66)
Ahora, nuevamente tenemos que calcular toda la distancia a nuevos centroides como calculamos antes.
Dm_1 =
0 | 1 | 3.61 | 5 | C1 = (1,1) clúster | grupo 1 |
3.14 | 2.36 | 0.47 | 1.89 | C2 = (3.66,2.66) clúster | Grupo 2 |
A | B | C | D | |
---|---|---|---|---|
1 | 2 | 4 | 5 | X |
1 | 1 | 3 | 4 | Y |
Iteration_1 (agrupación de objetos): Ahora, en nombre del nuevo cálculo de la matriz de distancia (DM_1), lo agrupamos de acuerdo con eso. Entonces, cambiamos el objeto M2 de Group_2 a Group_1 como la regla de distancia mínima a los centroides, y el resto del objeto será el mismo. Así que la nueva agrupación será como a continuación.
G_1 =
A | B | C | D | |
---|---|---|---|---|
1 | 1 | 0 | 0 | grupo 1 |
0 | 0 | 1 | 1 | Grupo 2 |
Ahora, tenemos que calcular los nuevos centroides nuevamente, ya que ambos objetos tienen dos valores.
Entonces, los nuevos centroides serán
Entonces, después de obtener los nuevos centroides, la agrupación se verá a continuación:
C1 = (1.5, 1)
C2 = (4.5, 3.5)
Iteración_2: Repetimos el paso donde calculamos la nueva distancia de cada objeto a nuevos centroides calculados. Entonces, después del cálculo, obtendremos la siguiente matriz de distancia para iteración_2.
Dm_2 =
0.5 | 0.5 | 3.20 | 4.61 | C1 = (1.5, 1) clúster | grupo 1 |
4.30 | 3.54 | 0.71 | 0.71 | C2 = (4.5, 3.5) clúster | Grupo 2 |
A B C D
A | B | C | D | |
---|---|---|---|---|
1 | 2 | 4 | 5 | X |
1 | 1 | 3 | 4 | Y |
Nuevamente, hacemos las tareas de agrupación en función de la distancia mínima como lo hicimos antes. Entonces, después de hacer eso, obtuvimos la matriz de agrupación que es lo mismo que G_1.
G_2 =
A | B | C | D | |
---|---|---|---|---|
1 | 1 | 0 | 0 | grupo 1 |
0 | 0 | 1 | 1 | Grupo 2 |
Como aquí, G_2 == G_1, Por lo tanto, no se requiere más iteración, y podemos detenernos aquí.
Implementación de K-means usando Python:
Ahora, vamos a implementar el algoritmo K-means en Python. Para implementar los k-means, vamos a utilizar el famoso conjunto de datos de iris, que es de código abierto. Este conjunto de datos tiene tres clases diferentes. Este conjunto de datos tiene básicamente cuatro características: Longitud sepal, ancho sepal, longitud del pétalos y ancho del pétalo. La última columna dirá el nombre de la clase de esa fila como setosa.
El conjunto de datos se parece al siguiente:
Para la implementación de Python K-Means, necesitamos importar las bibliotecas requeridas. Entonces importamos pandas, numpy, matplotlib y también kmeans de sklearn.Clutser como se da a continuación:
Estamos leyendo el iris.conjunto de datos CSV utilizando el método de Panda Read_CSV y mostrará los 10 resultados principales utilizando el método Head.
Ahora, estamos leyendo solo las características del conjunto de datos que requerimos para entrenar el modelo. Así que estamos leyendo las cuatro características de los conjuntos de datos (longitud sepal, ancho de sepal, longitud del pétalos, ancho del pétalos). Para eso, pasamos los cuatro valores de índice [0, 1, 2, 3] en la función ILOC del marco de datos del panda (DF) como se muestra a continuación:
Ahora, elegimos el número de grupos al azar (k = 5). Creamos el objeto de la clase K-Means y luego ajustamos nuestro conjunto de datos X a eso para el entrenamiento y la predicción como se muestra a continuación:
Ahora, vamos a visualizar nuestro modelo con el valor aleatorio de K = 5. Podemos ver claramente cinco grupos, pero parece que no es exacto, como se muestra a continuación.
Entonces, nuestro siguiente paso es averiguar el número de grupos fue preciso o no. Y para eso, usamos el método del codo. El método del codo se utiliza para averiguar el número óptimo del clúster para un conjunto de datos en particular. Este método se utilizará para averiguar si el valor de k = 5 era correcto o no, ya que no estamos obteniendo una agrupación clara. Entonces, después de eso, vamos al siguiente gráfico, que muestra que el valor de k = 5 no es correcto porque el valor óptimo cae entre 3 o 4.
Ahora, volveremos a ejecutar el código anterior con el número de grupos K = 4 como se muestra a continuación:
Ahora, vamos a visualizar la nueva agrupación de construcción K = 4. La pantalla a continuación muestra que ahora la agrupación se realiza a través de K-means.
Conclusión
Entonces, estudiamos el algoritmo K-means en el código numérico y de Python. También hemos visto cómo podemos descubrir la cantidad de grupos para un conjunto de datos en particular. A veces, el método del codo no puede dar el número correcto de grupos, por lo que en ese caso, hay varios métodos que podemos elegir.
El código para este blog, junto con el conjunto de datos, está disponible en el siguiente enlace https: // github.com/shekharpandey89/k-means