K significa agrupamiento | K significa algoritmo de agrupación en clústeres en aprendizaje automático

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Introducción

k_means_clustering-1695752

La agrupación en clústeres es una técnica de aprendizaje automático no supervisada. Es el proceso de división del conjunto de datos en grupos en los que los miembros del mismo grupo poseen características similares. Los algoritmos de agrupación en clúster más utilizados son agrupación de K-medias, agrupación jerárquica, agrupación basada en densidad, agrupación basada en modelos, etc. En este artículo, vamos a discutir el agrupamiento de K-Means en detalle.

Agrupación de K-medias

Es el algoritmo de aprendizaje no supervisado de tipo iterativo más simple y de uso común. En esto, inicializamos aleatoriamente el K número de centroides en los datos (el número de k se encuentra utilizando el Codo método que se discutirá más adelante en este artículo) e itera estos centroides hasta que no ocurra ningún cambio en la posición del centroide. Repasemos los pasos involucrados en K significa agrupamiento para una mejor comprensión.

1) Seleccione la cantidad de clústeres para el conjunto de datos (K)

2) Seleccione K número de centroides

3) Al calcular la distancia euclidiana o la distancia de Manhattan, asigne los puntos a la centroide más cercano, creando así K grupos

4) Ahora encuentre el centroide original en cada grupo

5) Reasigne nuevamente todo el punto de datos basado en este nuevo centroide, luego repita el paso 4 hasta que la posición del centroide no cambie.

Encontrar el número óptimo de clústeres es una parte importante de este algoritmo. Un método comúnmente utilizado para encontrar el valor óptimo de K es Método del codo.

Método del codo

En el método del codo, en realidad estamos variando el número de conglomerados (K) de 1 a 10. Para cada valor de K, estamos calculando WCSS (Suma del cuadrado dentro del conglomerado). WCSS es la suma de la distancia al cuadrado entre cada punto y el centroide en un grupo. Cuando graficamos el WCSS con el valor K, el gráfico parece un codo. A medida que aumenta el número de clústeres, el valor WCSS comenzará a disminuir. El valor WCSS es mayor cuando K = 1. Cuando analizamos el gráfico, podemos ver que el gráfico cambiará rápidamente en un punto y, por lo tanto, creará una forma de codo. A partir de este punto, el gráfico comienza a moverse casi en paralelo al eje X. El valor de K correspondiente a este punto es el valor de K óptimo o un número óptimo de conglomerados.

43191elbow_img201-3857585

Ahora implementemos la agrupación en clústeres de K-Means usando Python.

Implementación

– El conjunto de datos que estamos usando aquí son los datos de los clientes del centro comercial (Descarga aquí). Son datos sin etiquetar que contienen los detalles de los clientes en un centro comercial (características como género, edad, ingreso anual (k $) y puntaje de gasto). Nuestro objetivo es agrupar a los clientes en función de las características relevantes del puntaje anual de ingresos y gastos.
99672screenshot20378-8250235

En primer lugar, tenemos que importar bibliotecas esenciales.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd 
import sklearn

Ahora importemos el conjunto de datos y separemos las características importantes.

dataset = pd.read_csv('Mall_Customers.csv')
X = dataset.iloc[:, [3, 4]].values

Tenemos que encontrar el valor óptimo de K para agrupar los datos. Ahora estamos usando el método del codo para encontrar el valor óptimo de K.

from sklearn.cluster import KMeans
wcss = [] for i in range(1, 11): 
    kmeans = KMeans(n_clusters = i, init="k-means++", random_state = 42)
    kmeans.fit(X) 
    wcss.append(kmeans.inertia_)

El argumento «init» es el método para inicializar el centroide. Calculamos el valor WCSS para cada valor K. Ahora tenemos que trazar el WCSS con valor K

plt.plot(range(1, 11), wcss)
plt.xlabel('Number of clusters')
plt.ylabel('WCSS') 
plt.show(

El gráfico será-

83750elbow-1759870

El punto en el que se crea la forma del codo es 5, es decir, nuestro valor K o un número óptimo de conglomerados es 5. Ahora entrenemos el modelo en el conjunto de datos con un número de conglomerados 5.

kmeans = KMeans(n_clusters = 5, init = "k-means++", random_state = 42)
y_kmeans = kmeans.fit_predict(X)

y_kmeans será:

array([3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
       3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1,
       3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 2, 1, 2, 4, 2, 4, 2,
       1, 2, 4, 2, 4, 2, 4, 2, 4, 2, 1, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2,
       4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2,
       4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2,
       4, 2])
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 60, c="red", label="Cluster1")
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 60, c="blue", label="Cluster2")
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 60, c="green", label="Cluster3)
plt.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], s = 60, c = "violet', label="Cluster4")
plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s = 60, c="yellow", label="Cluster5") 
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 100, c="black", label="Centroids")
plt.xlabel('Annual Income (k$)') plt.ylabel('Spending Score (1-100)') plt.legend() 

plt.show()

Grafico:

94062graph20cluster-2447141

Como puede ver hay 5 grupos en total los cuales se visualizan en diferentes colores y el centroide de cada grupo se visualiza en color negro.

Código completo

# Importing the libraries
import numpy as np 
import matplotlib.pyplot as plt
import pandas as pd # Importing the dataset 

X = dataset.iloc[:, [3, 4]].values
dataset = pd.read_csv('Mall_Customers.csv') 

from sklearn.cluster import KMeans

# Using the elbow method to find the optimal number of clusters wcss = [] for i in range(1, 11): 
 wcss.append(kmeans.inertia_)
 kmeans = KMeans(n_clusters = i, init="k-means++", random_state = 42) kmeans.fit(X) plt.plot(range(1, 11), wcss) plt.xlabel('Number of clusters') 

y_kmeans = kmeans.fit_predict(X)

plt.ylabel('WCSS') plt.show() # Training the K-Means model on the dataset kmeans = KMeans(n_clusters = 5, init="k-means++", random_state = 42) y_kmeans = kmeans.fit_predict(X)

# Visualising the clusters
plt.scatter( X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 60, c="blue", label="Cluster2")
plt.scatter( X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 60, c="red", label="Cluster1") plt.scatter( X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 60, c="green", label="Cluster3") 
plt.scatter( kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 100, c="black", label="Centroids")
plt.scatter( X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], s = 60, c="violet", label="Cluster4") plt.scatter( X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s = 60, c="yellow", label="Cluster5") plt.xlabel('Annual Income (k$)') plt.ylabel('Spending Score (1-100)') plt.legend() 

plt.show()

Conclusión

Se trata del concepto básico del algoritmo de agrupación en clústeres de K-medias en el aprendizaje automático. En los próximos artículos, podemos obtener más información sobre diferentes algoritmos de aprendizaje automático.

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.