No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Implementando K-means

7/27
Recursos

Aportes 8

Preguntas 1

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

Detallen bien su escogencia del n√ļmero de clusters cuando eval√ļen el rendimiento del modelo con el silhouette score. Aqu√≠ por ejemplo gener√© los datos con cuatro centroides como en la clase, e hice el entrenamiento del modelo con tres clusters y obtuve lo siguiente:

También realicé el entrenamiento con cuatro clusters y obtuve lo siguiente:

Observen que el silhouette score fue mejor (m√°s cercano a 1) con tres clusters, pero de entrada sabemos que en realidad en los datos hay cuatro clusters diferentes, as√≠ que s√≠, no se conf√≠en solo en la primera m√©trica que saquen, hay que detallar m√°s los resultados ūüėÉ

Es necesario hacer la instalación de:
!pip install yellowbrick

Si obtienes el error:

AttributeError: 'NoneType' object has no attribute 'split'

Soluciona con:

!pip install threadpoolctl==3.1.0
## ***<u>Es necesario estandarizar en Kmeans?</u>*** ![ūüöÄ](https://fonts.gstatic.com/s/e/notoemoji/latest/1f680/emoji.svg) No es obligatorio estandarizar en Kmeans, pero se recomienda en la mayor√≠a de los casos. La estandarizaci√≥n, tambi√©n llamada normalizaci√≥n, consiste en transformar las variables para que tengan una media de 0 y una desviaci√≥n est√°ndar de 1. Esto tiene varias ventajas: **Mejora la precisi√≥n de Kmeans:** * Kmeans se basa en la distancia entre los puntos de datos y los centroides de los clusters. * Si las variables tienen diferentes escalas, la distancia no se calcular√° de forma precisa. * La estandarizaci√≥n asegura que todas las variables tengan la misma importancia en el c√°lculo de la distancia. **Acelera la convergencia de Kmeans:** * Kmeans es un algoritmo iterativo que busca encontrar la mejor asignaci√≥n de puntos a clusters. * La estandarizaci√≥n puede ayudar a que el algoritmo converja m√°s r√°pido, ya que las variables estar√°n en la misma escala. **Facilita la interpretaci√≥n de los resultados:** * Si las variables no est√°n estandarizadas, puede ser dif√≠cil interpretar los centroides de los clusters. * La estandarizaci√≥n permite comparar los centroides de forma m√°s sencilla. **En resumen:** * La estandarizaci√≥n no es obligatoria en Kmeans, pero se recomienda para mejorar la precisi√≥n, la velocidad de convergencia y la interpretabilidad de los resultados. **Excepciones:** * En algunos casos, la estandarizaci√≥n puede no ser necesaria o incluso puede ser perjudicial. * Por ejemplo, si las variables ya tienen una distribuci√≥n normal, la estandarizaci√≥n puede no tener un impacto significativo. * Si las variables son categ√≥ricas, la estandarizaci√≥n no es aplicable. **En caso de duda, es recomendable estandarizar las variables antes de aplicar Kmeans.**

Alternativa al codigo de visualizacion usado.

    fig1 = go.Figure()



    fig1.add_traces(data=
                    go.Scatter(x=df_blobs["x1"], y=df_blobs["x2"],    
                               marker=dict(
                               size=10,
                               color=df_blobs['cluster'],
                                colorscale=px.colors.diverging.RdBu[::-1]
                                ), mode='markers', name='Data')
                   )

    fig1.add_traces(data=
                    go.Scatter(x=df_centers["x1"], y=df_centers["x2"], mode='markers', name='Centers', marker=dict(color='#ff6602', size=20, symbol="x-dot"))
                   )

    fig1.add_traces(data=
                    go.Scatter(x=df_k_means_center["x1"], y=df_k_means_center["x2"], mode='markers', name='k_means_centers', marker=dict(color='yellow', size=20, symbol="circle-x"))
                   )


    fig1.update_layout(showlegend=True)
    fig1.show()
Para encontrar el k adecuado se implementa the ***<u>Elbow Method</u>***
## ***<u>En la clusterization es necesaria entrenar el modelo?</u>*** No, no siempre es necesario entrenar un modelo para la clusterizaci√≥n. Existen dos tipos principales de algoritmos de clusterizaci√≥n: **1. Algoritmos no supervisados:** * Estos algoritmos no requieren un conjunto de datos de entrenamiento con etiquetas predefinidas. * En cambio, agrupan los datos en funci√≥n de sus similitudes intr√≠nsecas. * Algunos ejemplos comunes son: * K-means: Divide los datos en un n√ļmero predefinido de clusters. * Algoritmo de jerarqu√≠a ascendente (HAC): Crea una jerarqu√≠a de clusters a partir de los datos. * DBSCAN: Encuentra clusters de densidad variable. **2. Algoritmos supervisados:** * Estos algoritmos s√≠ requieren un conjunto de datos de entrenamiento con etiquetas de cluster predefinidas. * A partir del conjunto de entrenamiento, aprenden a agrupar nuevos datos en clusters similares. * Algunos ejemplos son: * K-nearest neighbors (KNN): Clasifica los datos en funci√≥n de sus vecinos m√°s cercanos en el espacio de caracter√≠sticas. * Redes neuronales convolucionales (CNN): Agrupan im√°genes en funci√≥n de caracter√≠sticas visuales. **¬ŅCu√°ndo es necesario entrenar un modelo?** * Si tiene un conjunto de datos con etiquetas de cluster predefinidas, puede utilizar un algoritmo supervisado para obtener una mayor precisi√≥n en la clusterizaci√≥n. * Si no tiene etiquetas de cluster predefinidas, o si desea explorar diferentes tipos de clusters, puede utilizar un algoritmo no supervisado. **En resumen:** * La necesidad de entrenar un modelo depende del tipo de algoritmo de clusterizaci√≥n que se utilice y de la disponibilidad de un conjunto de datos de entrenamiento con etiquetas predefinidas. * Los algoritmos no supervisados son una buena opci√≥n cuando no se tiene un conjunto de datos de entrenamiento con etiquetas predefinidas. * Los algoritmos supervisados pueden ofrecer una mayor precisi√≥n, pero requieren un conjunto de datos de entrenamiento con etiquetas predefinidas.

El código:

sns.scatterplot (data= df_blobs, x= "X1", y= "X2")
sns.scatterplot (data= df_centers, x= "X1", y= "X2", marker= "X", s= 100)
plt.show()

Aplicar KMeans:

kmeans = KMeans (n_clusters = 4)
df_cluster = kmeans.fit_predict(X)
df_blobs['cluster'] = df_cluster 
k_means_centers = kmeans.cluster_centers_
df_k_means_center = pd.DataFrame ({
     'X1': k_means_centers [:,0],
     'X2': k_means_centers [:,1],                              

}) 
fig = plt.figure(figsize=(9,9))
sns.scatterplot(data=df_blobs,  x='X1', y='X2', hue= 'cluster', palette='coolwarm')
sns.scatterplot(data=df_centers,  x='X1', y='X2', marker='X', s=150 , color='red')
sns.scatterplot(data=df_k_means_center,  x='X1', y='X2', marker='o', s=150 , color='yellow')
plt.show()