Aprender los conceptos clave

1

Procesamiento de Datos con Scikit-Learn para Machine Learning

2

Aprendizaje Supervisado: Datos y Observación

3

Modelos de Clasificación y Regresión con Scikit-learn

4

Matemáticas clave para dominar Machine Learning

Iniciar un proyecto con sklearn

5

Configuración Avanzada de Entornos de Desarrollo en Visual Studio Code

6

Verificación de Librerías para Desarrollo en Python

7

Análisis de Datos para la Felicidad y Salud Cardiaca

Optimización de features

8

Elementos Clave para Mejorar Modelos de Machine Learning

9

Reducción de Dimensionalidad: Análisis de Componentes Principales

10

Optimización de Modelos en Python: Uso de PCA y Regresión Logística

11

Clasificación Binaria con PCA y Regresión Logística

12

Análisis de Kernel: Modelos de Clasificación Avanzada

13

Regularización en Machine Learning: Lasso y Ridge

14

Regularización: Lasso y Ridge para predicción efectiva

15

Regresión Lineal: Minimización de Pérdidas y Coeficientes

16

Regularización ElasticNet: Combinando Lasso y Ridge en Scikit-learn

Regresiones robustas

17

Identificación de datos atípicos en análisis estadístico

18

Regresiones robustas: técnicas para manejar valores atípicos

19

Regresión Lineal y Máquinas de Soporte: Lidando con Datos Corruptos

20

Automatización de Código para Modelos Predictivos en Python

Métodos de ensamble aplicados a clasificación

21

Esamblaje de Modelos de Machine Learning: Bagging y Boosting

22

Clasificación Binaria con Bagging Classifier en Scikit-Learn

23

Implementación de métodos de ensamble en Python

24

Clasificación con Gradient Boosting en Datos de Enfermedades Cardíacas

Clustering

25

Agrupamiento de Datos: Clustering No Supervisado

26

"Algoritmos de Clustering: Agrupación de Datos con K-Means"

27

Agrupamiento de Datos Usando MeanShift en Python

Optimización paramétrica

28

Validación Cruzada en Modelos de Aprendizaje Automático

29

Validación Cruzada con Scikit-learn y Árboles de Decisión

30

Optimización de Modelos con Grid Search y Random Search

31

Optimización de Modelos con Random Forest en Python

32

Auto-sklearn: Optimización Automática de Modelos de Machine Learning

Salida a producción

33

Estructura de Proyecto en Python: Organiza y Optimiza tu Código

34

Programación Orientada a Objetos con Python Avanzado

35

Creación de Servidor Web con Flask en Python

36

Modelos de Machine Learning: Selección y Optimización

37

Python para Análisis de Datos Financieros

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Agrupamiento de Datos Usando MeanShift en Python

27/37
Recursos

¿Cómo utilizar MeanShift para agrupar datos de forma eficiente?

Los algoritmos de clustering son una herramienta poderosa en el análisis de datos, permitiendo agrupar elementos con características similares sin requerir una clasificación previa. Uno de los métodos populares para este tipo de problemas es MeanShift, especialmente útil cuando la cantidad de clústeres no es previamente conocida.

¿Cómo se lleva a cabo la importación y preparación de los datos?

Para comenzar con el uso de MeanShift, la importación y la preparación del conjunto de datos es crucial:

  1. Importar librerías necesarias: Se requiere de las librerías pandas para manejar los datos y sklearn.cluster para el algoritmo MeanShift.

    import pandas as pd
    from sklearn.cluster import MeanShift
    
  2. Carga del conjunto de datos: Utiliza pandas para leer datos desde un archivo CSV.

    data = pd.read_csv('caramelos.csv')
    
  3. Preparación de los datos: Es importante eliminar las columnas categóricas que no pueden ser utilizadas por algoritmos de clustering. Aquí se elimina la columna competitorname.

    data.drop('competitorname', axis=1, inplace=True)
    

¿Cómo configurar y ejecutar el algoritmo MeanShift?

La configuración del algoritmo MeanShift es sencilla debido a que, en muchos casos, no es necesario especificar detalles técnicos complejos como el ancho de banda:

  1. Configurar el modelo: Se crea una instancia de MeanShift sin parámetros específicos para permitir al algoritmo determinar automáticamente el mejor ancho de banda.

    model = MeanShift()
    
  2. Entrenar el modelo: Se ajusta el modelo a los datos preparados.

    model.fit(data)
    
  3. Evaluación inicial de etiquetas: Se imprimen las etiquetas asignadas para entender cómo se han agrupado los datos.

    labels = model.labels_
    print(labels)
    

¿Cómo identificar y analizar los resultados del clustering?

Ahora que el algoritmo ha ejecutado el agrupamiento, es vital evaluar los resultados para integrarlos en futuras aplicaciones o análisis:

  1. Identificación del número de clústeres: Usando la función max() de Python, puede determinarse el número total de clústeres.

    num_clusters = labels.max() + 1
    print(f"Number of clusters: {num_clusters}")
    
  2. Centroide de cada clúster: Los centros de los clústeres proporcionan una idea de la distribución de entradas. Estos datos suelen tener las mismas dimensiones que los datos originales.

    centers = model.cluster_centers_
    print(centers)
    
  3. Integración de resultados en el dataset: Agregar las etiquetas de clústeres al dataset para facilitar su análisis posterior.

    data['cluster'] = labels
    

¿Qué considerar al comparar MeanShift con otros algoritmos?

Cuando se utilizan múltiples algoritmos de clustering, es normal que los resultados varíen. Aquí algunos aspectos a tener en cuenta:

  • Diferencias en resultados: Los algoritmos como K-means y MeanShift pueden arrojar diferentes agrupaciones debido a sus enfoques y cálculos matemáticos subyacentes.
  • Consideraciones computacionales: Uno de los algoritmos puede ser más eficiente en términos de tiempo y recursos que otro.
  • Relevancia práctica: La utilidad real y la interpretación de los resultados en un contexto empresarial o científico determinarán cuál es el algoritmo más adecuado.

Finalmente, en algunos casos se puede implementar un método semi-automático que combine los mejores aspectos de diferentes enfoques para una mejor toma de decisiones. ¡Atrévete a experimentar con MeanShift y descubre sus aplicaciones prácticas en tus proyectos de análisis de datos!

Aportes 16

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Quiero agregar una manera de ver graficamente estos algoritmos de clustering
Adjunto el codigo, explico
Utilize PCA para tener mi dataset en 2 dimensiones para que me sea facil graficarlo,
y con meanshift.cluster_centers_ me devuelven las coordenadas de un centroide, al final bota el grafico de los puntos y como se dividen
NOTA: como baje mi dataset a 2 dimensiones supongo que perdi mucha informacion, por eso esto es mas algo ludico para entender mejor lo que hacemos

pca = PCA(n_components=2)
pca.fit(X)
pca_data = pca.transform(X)
    
meanshift = MeanShift().fit(pca_data)
plt.scatter(pca_data[:, 0], pca_data[:, 1], c=meanshift.predict(pca_data))
plt.scatter(meanshift.cluster_centers_[:, 0], meanshift.cluster_centers_[:, 1], c='black', s=200)
plt.show()

como funciona mean-shift

Piensa que cada punto tiene un peso y todo el espacio se curva con ese peso, por lo que lugares con muchos puntos tienen se hunden mas haciendo un hueco, después lanzas un monton de bolitas en lugares aleatorios y en donde se acumulen ahi estarán los clusters.

gift que ilustra el proceso

para entender mas a fondo este video te explica como las bolitas funcionana y este articulo te explica el metodo de clustering

Si es una cantidad “moderada” de datos para implementar MeanShift, se refiere a que tamaño de la fuente? numero de Filas por número de Columnas, cantidad de registros, tamaño del archivo en Kb, Mb, Gb?

Otra pregunta es, si la restricción para usar es únicamente al tamaño de la fuente de datos ,o deben considerarse más elementos para usarlos?

Código:

import pandas as pd 

from sklearn.cluster import MeanShift 

if __name__ == "__main__":

   # Cargamos el dataset 
    dataset = pd.read_csv('./data/candy.csv') 
    #print(dataset.head(5))  

    # Vamos a eliminar la columna
    X = dataset.drop('competitorname', axis=1)

    meanshift = MeanShift().fit(X)
    # Aquí el algoritmo nos devolvio 3 clusters, porque le pareció que esa era la cantidad 
    # correcta teniendo en cuenta como se distrubuye la densidad de nuestros datos 
    print(max(meanshift.labels_))
    print("="*64)
    # Imprimamos la ubicación de los centros que puso sobre nuestros datos. Hay que recordar que estos algoritmos 
    # crean un centro y a partir de ahí se ajuztan a todos los datos que lo rodean  
    print(meanshift.cluster_centers_)
    
    # Los arreglos lo integramos a nuestros datasets 
    dataset['meanshift'] = meanshift.labels_  
    print("="*64)
    print(dataset)  
``

Si ambos modelos tienen K-3 clusters. Entonces podemos comparar sus predicciones

(df['KMeans'] == df['MeanShift']).sum() / df.shape[0]

#output = 0.5058823529411764

Y vemos que solo coinciden con el 50% de los datos

El algoritmo Mean-Shift es un algoritmo de agrupamiento que busca automáticamente el número de clústeres en un conjunto de datos y asigna los puntos de datos a los clústeres en función de la densidad de puntos. El algoritmo funciona moviendo de manera iterativa los centroides de los clústeres hacia las regiones de mayor densidad de puntos hasta que converja a los máximos locales.

La clase se centró en la implementación del algoritmo Mean-Shift para clustering con scikit-learn. Se explicó cómo cargar datos, eliminar columnas no entrenables, y configurar el ancho de banda. Mean-Shift identifica automáticamente el número de clusters en los datos, lo que se demostró imprimiendo las etiquetas generadas y los centros de cada cluster. También se discutió cómo validar los resultados y compararlos con otros algoritmos. La importancia de la densidad en la distribución de los datos fue clave para entender su funcionamiento.

Hola a todos, me ayudarían mucho si me resolvieran esta duda que surgió de esta clase. Al usar Mean-Shift o K-Means puedo tener variables dummy y continuas?. En la clase al parecer la tenemos pero vi un articulo que decía que no se podía. Gracias

Otra forma de identificar cuantos clusters creó MeanShift es usando el constructor set()

print(set(meanshift.labels_))

Para ver las etiquetas:
Se tiene que importar la librería de numpy.

np.unique(meanshift.labels_)

[0 1 2]
Me hice un scatterplot para poder ver la relación entre el precio y las preferencias de público. Dejo el código para que puedan jugar con él: ```python import pandas as pd from sklearn.cluster import MeanShift import matplotlib.pyplot as plt import seaborn as sns if __name__ == "__main__": data = pd.read_csv('./data/candy.csv') X = data.drop(['competitorname'], axis=1) meanshift = MeanShift().fit(X) data['group'] = meanshift.predict(X) plt.figure(figsize=(10,6)) scatter = sns.scatterplot(x=data['pricepercent'], y=data['winpercent'], hue=data['group'], palette="Set1", s=100) plt.title('Relationship between price percentage, public preference, and MeanShift groups') plt.xlabel('Price Percentage') plt.ylabel('Public Preference Percentage') plt.legend(title='Groups (MeanShift)', bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() plt.show() ``` ![](https://static.platzi.com/media/user_upload/image-f89adde2-80db-450e-99ea-9cf0cfa3c646.jpg)
![](https://i.makeagif.com/media/4-07-2015/zOZVui.gif)
Mean Shift es un algoritmo de agrupamiento que no requiere la especificación previa del número de clústeres y puede encontrar automáticamente los centroides de los clústeres en función de la densidad de los datos. Aquí tienes una explicación más detallada: * **Funcionamiento**: * Mean Shift es un algoritmo de agrupamiento basado en la densidad que busca los modos locales de densidad de los datos. * Comienza seleccionando aleatoriamente puntos de datos como centroides iniciales (semillas). * Luego, para cada punto de semilla, calcula el centro de masa ponderado de los puntos de datos vecinos dentro de un radio especificado (bandwidth) alrededor del punto de semilla. * Desplaza el centro de masa al nuevo punto calculado y repite el proceso hasta que converja a un punto donde ya no hay cambios significativos. * Los puntos de datos que convergen a los mismos centroides se asignan al mismo clúster. * **Parámetro Bandwidth**: * El parámetro de ancho de banda (bandwidth) determina la influencia de los puntos de datos vecinos en el cálculo del centro de masa. * Un ancho de banda más pequeño significa que se considerarán menos puntos de datos en el cálculo del centro de masa, lo que puede conducir a clústeres más pequeños y detallados. * Por el contrario, un ancho de banda más grande agrupará más puntos de datos y puede producir clústeres más grandes y difusos. * **Ventajas**: * No requiere la especificación previa del número de clústeres, lo que lo hace adecuado para conjuntos de datos donde el número de clústeres no es conocido de antemano. * Puede manejar clústeres de cualquier forma y tamaño y es resistente a la inicialización aleatoria, lo que lo hace más robusto que K-Means en algunos casos. * **Desventajas**: * Puede ser computacionalmente costoso en conjuntos de datos grandes, ya que calcula la densidad para todos los puntos de datos en cada iteración. * Sensible al parámetro de ancho de banda, y la selección incorrecta del mismo puede conducir a resultados subóptimos. En resumen, Mean Shift es una técnica de agrupamiento versátil que puede encontrar automáticamente clústeres de cualquier forma y tamaño en función de la densidad de los datos. Es útil cuando no se conoce el número de clústeres de antemano y se desea una mayor flexibilidad en la forma y el tamaño de los clústeres identificados. Sin embargo, puede ser más lento en conjuntos de datos grandes y sensibles a la selección del parámetro de ancho de banda.
Aquí les dejo un artículo en caso de que quieran profundizar un poco más en el algoritmo <https://www.geeksforgeeks.org/ml-mean-shift-clustering/>

Agregué el resultado de los grupos creados en una nueva columna en el data frame original:

    meanshift_group_vector = meanshift.labels_

    dataset['meanshift_groups'] = meanshift_group_vector