El clustering o agrupamiento es una técnica que nos permite encontrar grupos de objetos similares, objetos que están más relacionados entre sí que con objetos de otros grupos. Ejemplos de aplicaciones de clustering orientadas al negocio incluyen la agrupación de documentos, música y películas por diferentes temas, o la búsqueda de clientes que compartan intereses similares basados en comportamientos de compra comunes como base para los motores de recomendación.
El algoritmo K Means es extremadamente fácil de implementar y también es computacionalmente muy eficiente comparado con otros algoritmos de clustering, lo que podría explicar su popularidad. El algoritmo K Means pertenece a la categoría de clustering basado en prototipos.
El clustering basado en prototipos significa que cada agrupación está representada por un prototipo, que puede ser el centroide, el promedio de puntos similares con características continuas, o el punto más representativo o más frecuente en el caso de rasgos categóricos.
Mientras que K Means es muy bueno para identificar clústeres con forma esférica, una de las desventajas de este algoritmo de clustering es que tenemos que especificar el número de clústeres, K, a priori. Una elección inapropiada para K puede resultar en un pobre desempeño de clustering.
Veamos cómo implementar este algoritmo utilizando una de las librerías más importante de Machine Learning en Python, como lo es Scikit Learn.
Veamos primeros los métodos que podemos utilizar para posterior ver detalladamente los parámetros que podemos utilizar para configurar el algoritmo y obtener mejores resultados.
El primer paso que tienes que hacer es importar el modulo Kmeans desde sklearn.cluster. Recuerda que este es un algoritmo de agrupamiento por lo que es normal que se encuentre dentro del módulo “cluster”.
Realizado esto analizamos los parámetros que podemos implementar junto con el algoritmo Kmeans, estos no son muy distintos a los que se aplican dentro de los algoritmos de Aprendizaje Supervisado, pero la forma de implementarlos es un poco distinta.
El primero será fit(), con el cual puedes entrenar el modelo. Acá solamente debes utilizar los datos correspondientes a X, que vendrían siendo los datos de entrenamiento. Para los algoritmos de Aprendizaje no Supervisado no se utiliza valores de “y” o lo que vendría siendo los datos dependiente ya que acá nos enfocamos básicamente en entender los datos más que predecir un valor específico como se hace en el Aprendizaje Supervisado.
El siguiente método será predict(), con el cual podemos realizar una predicción, determinando los clústeres más cercanos al que pertenece cada muestra en X. En este caso podemos seleccionar unas muestras o en todo caso nueva data, para determinar a que clúster pertenece de acuerdo al modelo que se ha entrenado previamente.
El resultado que tenemos al implementar este algoritmo será el número de clúster asociado a cada dato que realicemos una predicción.
Estos serán los métodos que se usan generalmente al momento de implementar el algoritmo de Aprendizaje no Supervisado K Means.
Expliquemos ahora los parámetros que podemos configurar para el algoritmo. Recuerda que estos parámetros lo que harán es que tengas un mejor control sobre el algoritmo K Means y podamos mejor los resultados del modelo.
El primer parámetro a definir por supuesto será el número de clústeres. Acá debemos escribir el número de clústeres a formar y por supuesto el número de centroides. Por defecto este valor es de 8 en caso de que no sea definido. Recuerda que antes de definir este valor deberías haberlo calculado previamente con cualquiera de los métodos que fueron explicados anteriormente.
El siguiente parámetro a definir será init y se refiere al método de inicialización. Este parámetro puede tomar uno de estos 3 métodos, k-means++, random o ndarray, por defecto el que se encuentra configurado es k-means++. Expliquemos cada uno de estos métodos:
- k-means++: selecciona los centroides iniciales de los clústeres de forma inteligente para acelerar la convergencia.
- Random: elige k observaciones o filas al azar a partir de los datos de los centroides iniciales.
- Ndarray: en caso de se elija este método se debe indicar la forma de n_clusters y n_características y estos serán los centroides iniciales.
Por lo general se utiliza k-means++ como método a utilizar, aunque en ocasiones puedes utilizar random para verficar si cambio los resultados obtenidos previamente.
El siguiente parámetro a configurar para el algoritmo K Means será n_init, este se refiere al número de veces que el algoritmo se ejecutará con diferentes centroides. Este parámetro tiene como valor por defecto de 10 pero tu puedes configurarlo para verificar como mejora o empeora el modelo.
De todas formas, el resultado final será la mejor salida de n_init consecutivos en términos de inercia.
El último parámetro que es importante configurar será max_iter, este es el número máximo de iteraciones del algoritmo K Means para una sola ejecución. Este vendría siendo el criterio de parada que explicamos en la teoría de este algoritmo. Por defecto el valor de este parámetro es de 300 pero tu lo puedes disminuir e inclusive aumentar si así te parezca.
Estos serán parámetros más importantes y que debes considerar al momento de configurar el algoritmo K Means.
Hasta ahora hemos explicado los métodos y los parámetros que puedes utilizar en el algoritmo K Means, por lo que ahora explicaremos los atributos que puedes obtener una vez que hayas creado el modelo con este algoritmo.
Contamos con dos atributos muy importantes que debe verificar una vez que hayamos obtenido el modelo, sobretodo si queremos representar los resultados en una gráfica o tabla.
El primer atributo que podemos obtener será cluster_centers_, fíjate en las underline o piso que debes escribir exactamente para evitar que el código te de error al momento de ejecutar la línea de código. Como su nombre lo indica este atributo lo que devuelve son las coordenadas de los centroides de los clústeres. La cantidad de coordenadas deben coincidir con el número de clústeres que definimos previamente, obviamente si detenemos la ejecución del código antes de que converja completamente las iteraciones este valor no coincidirán.
Otro atributo importante será el de labels_, de igual forma ten cuidado con el underline o piso en el atributo. Acá se obtiene las etiquetas de los clústeres que fueron calculados.
Finalmente tenemos inertia_, que devuelve la suma al cuadrado de las distancias de las muestras al centro del clúster más cercano.
Con toda esta información podemos configurar correctamente el algoritmo K Means y desarrollar un buen modelo junto a los datos con que se este trabajando. De igual forma, una vez construido el modelo se puede obtener la información necesaria para ser presentada posteriormente alas personas interesadas.