La búsqueda global no está activada.
Salta al contenido principal
Foro

Foro de debate módulo 6

Pregunta tus dudas / Ask your questions

Pregunta tus dudas / Ask your questions

de Jesús Alcalá Fernández - Número de respuestas: 2

Buenos días.

Creamos este segundo hilo en el foro para todas las dudas que tengáis sobre el módulo 6. Por favor, escribir en este hilo todas las cuestiones y dudas que os asalten relacionadas con el contenido, tanto a nivel de temas de concepto como de aplicación. El tenerlo todo concentrado en este hilo facilitará a todos poder encontrar respuestas a preguntas similares que pueden tener.


Muchas gracias!


------------------------


Good morning.


We create this second thread in the forum for all the doubts you may have about module 6. Please, write in this thread all the questions and doubts you may have related to the content of this module, both at the concept and application level. Having everything concentrated in this thread will make it easier for everyone to find answers to similar questions they may have.


Thank you very much!

En respuesta a Jesús Alcalá Fernández

Re: Pregunta tus dudas / Ask your questions

de Mar Isabel Reyes Alcalde -
¡Buenas! Tengo una duda con el particionamiento de K-medias, particularmente sobre la determinación de K. Entiendo que se prueba con varias Ks y se estima cuál es el mejor particionamiento con el índice de Silhouette y Calinski-Harabasz, pero cada vez que ejecuto el programa me aparece un resultado diferente de K. Se que el centroide pueda cambiar porque se inicia con valores aleatorios, pero ¿es normal que también cambien los índices de las particiones? Si es así no entiendo muy bien la utilidad puesto que debes fiarte de un valor que cambia con aleatoriedad en cada ejecución.

¡Muchas gracias de antemano!
En respuesta a Mar Isabel Reyes Alcalde

Re: Pregunta tus dudas / Ask your questions

de Carlos Cano Gutiérrez -
Hola Mar Isabel,

muchas gracias por tu pregunta. Efectivamente, el resultado del algoritmo de K-medias depende de la situación inicial de los centroides, y, por tanto, si iniciamos los centroides aleatoriamente podemos obtener distintos resultados en distintas ejecuciones. Los índices Silueta, Calinski-Harabasz y otros se calculan sobre los clusters obtenidos, así que si los resultados de los algoritmos de clustering cambian a cada ejecución, el valor de estos índices también cambiará.
Como bien has comentado, esto se observa si ejecutas varias veces las celdas asociadas en el Google Colaboratory: https://colab.research.google.com/drive/1N2EED-cdliQilaKdIRYkoKFd05ZXWOjr?usp=sharing#scrollTo=YhVB9lPHxTPj . Bien es cierto que aunque los valores concretos de los índices de calidad cambien a cada ejecución del k-medias, el método del codo (Elbow) que calcula el valor óptimo de K ofrece en muchas ocasiones el mismo óptimo, aunque depende de la ejecución concreta. En este notebook, el valor óptimo varía entre 2 y 3 en la mayoría de las ejecuciones de KElbowVisualizer.

Con el código de esta celda del notebook:
from math import floor
# 1- Hacemos el clustering
k_means = KMeans(n_clusters=3)
datos = mexpr_toy.transpose()
cluster_predict = k_means.fit_predict(datos)
# 2- Con el resultado del cluster (cluster_predict) calculamos los índices Silueta y Calinski-Harabasz para ese resultado indice_Silueta = metrics.silhouette_score(datos, cluster_predict) print("Índice Silueta: "+str(indice_Silueta)) indice_CH = metrics.calinski_harabasz_score(datos, cluster_predict) print("Índice Calinski-Harabasz: "+ str(indice_CH))

Puedes calcular los índices de calidad de un resultado concreto de clustering. La recomendación general es que ejecutes primero KElbowVisualizer para identificar los potenciales valores óptimos de K y que luego realices varias ejecuciones probando esos valores de K y quedándote con la ejecución concreta para la que obtengas mejores métricas de calidad. 

Ten en cuenta que el problema de determinar el número óptimo de clusters puede ser muy complejo en función de los datos de partida y que también hay algoritmos de clustering más sofisticados que estiman el número de clusters, de forma que no es necesario proporcionar un valor de K como entrada. Utilizando el mismo código del notebook anterior, o realizando cambios mínimos, puedes utilizar otros algoritmos de clustering disponibles en la biblioteca scikit-learn de python: https://scikit-learn.org/stable/modules/clustering.html

Un saludo

---

Hello Mar Isabel,

Thank you very much for your question. Indeed, the result of the K-means algorithm depends on the initial placement of the centroids. Therefore, if we initialize the centroids randomly, we can obtain different results in different runs. The Silhouette index, Calinski-Harabasz index, and others are calculated based on the resulting clusters, so if the clustering results change with each run, the values of these indices will also vary.

As you correctly pointed out, this can be observed by running the associated cells multiple times in the Google Colaboratory notebook: https://colab.research.google.com/drive/1N2EED-cdliQilaKdIRYkoKFd05ZXWOjr?usp=sharing#scrollTo=YhVB9lPHxTPj. It is true that although the specific values of the quality indices may change with each execution of K-means, the Elbow method, which estimates the optimal value of K, often yields the same optimum. However, this also depends on the specific run. In this notebook, the optimal value varies between 2 and 3 in most executions of KElbowVisualizer.

Using the code from this notebook cell:

from math import floor
# 1- Hacemos el clustering
k_means = KMeans(n_clusters=3)
datos = mexpr_toy.transpose()
cluster_predict = k_means.fit_predict(datos)
# 2- Con el resultado del cluster (cluster_predict) calculamos los índices Silueta y Calinski-Harabasz para ese resultado indice_Silueta = metrics.silhouette_score(datos, cluster_predict) print("Índice Silueta: "+str(indice_Silueta)) indice_CH = metrics.calinski_harabasz_score(datos, cluster_predict) print("Índice Calinski-Harabasz: "+ str(indice_CH))

You can compute the quality indices for a specific clustering result. The general recommendation is to first use KElbowVisualizer to identify potential optimal values for K, and then perform several runs using those values, selecting the specific run that yields the best quality metrics.

Keep in mind that determining the optimal number of clusters can be a complex task depending on the input data, and that there are also more sophisticated clustering algorithms that estimate the number of clusters automatically, so you don't need to provide a K value as input. Using the same code from the notebook above, or with minimal changes, you can try out other clustering algorithms available in Python’s scikit-learn library: https://scikit-learn.org/stable/modules/clustering.html

Best regards.