Capítulo 5: Aprendizaje No Supervisado
5.1 Técnicas de Agrupación (Clustering)
Bienvenido al Capítulo 5, donde exploraremos el fascinante mundo del aprendizaje no supervisado. En este capítulo, no solo aprenderemos sobre las diferentes técnicas de aprendizaje no supervisado, sino que también comprenderemos cómo funcionan y cómo se comparan entre sí.
A diferencia del aprendizaje supervisado, donde tenemos una variable objetivo que predecir, el aprendizaje no supervisado trabaja con datos no etiquetados. Esto significa que los datos no tienen categorías o grupos predefinidos, y el objetivo aquí es encontrar patrones ocultos o estructuras intrínsecas en los datos de entrada. El aprendizaje no supervisado es como un detective tratando de descubrir un misterio sin pistas, solo confiando en su intuición y razonamiento lógico. Es una tarea desafiante, pero las recompensas pueden ser enormes.
En este capítulo, comenzaremos examinando las técnicas de agrupación (clustering) más populares y ampliamente utilizadas, como K-means, la agrupación jerárquica y la agrupación basada en densidad. Analizaremos los pros y los contras de cada una y proporcionaremos ejemplos para ayudarte a comprender cómo se pueden utilizar en escenarios del mundo real.
A continuación, pasaremos a la reducción de la dimensionalidad, que es otra técnica importante en el aprendizaje no supervisado. Explicaremos por qué es necesaria la reducción de la dimensionalidad y cómo se puede utilizar para simplificar conjuntos de datos complejos. También cubriremos diferentes métodos para la reducción de la dimensionalidad, como el análisis de componentes principales (PCA), la incrustación estocástica de vecinos t-distribuidos (t-SNE) y los autoencoders.
Finalmente, discutiremos las métricas de evaluación para el aprendizaje no supervisado, que se utilizan para medir el rendimiento de los algoritmos de aprendizaje no supervisado. Explicaremos los diferentes tipos de métricas de evaluación, como la puntuación de silueta, el método del codo y el índice Davies-Bouldin, y te mostraremos cómo usarlos en tus propios proyectos.
A través de ejemplos y ejercicios prácticos, obtendrás una comprensión más profunda del aprendizaje no supervisado y podrás aplicar estas técnicas a tus propios conjuntos de datos. ¡Así que empecemos!
La agrupación (clustering) es una técnica ampliamente utilizada en el aprendizaje no supervisado. Se utiliza para agrupar un conjunto de objetos de manera que los objetos en el mismo grupo, también conocido como un clúster, sean más similares entre sí que aquellos en otros grupos o clústeres.
El proceso de agrupación ayuda a identificar patrones y estructuras en los datos que pueden no ser evidentes a simple vista. Existen varias técnicas de agrupación comúnmente utilizadas, como la agrupación K-means, la agrupación jerárquica y DBSCAN. La agrupación K-means es un método que divide los puntos de datos en k clústeres en función de su proximidad a los centroides del clúster.
Por otro lado, la agrupación jerárquica crea una estructura de tipo árbol de clústeres al fusionar o dividirlos de forma recursiva según su similitud. Finalmente, DBSCAN es un algoritmo de agrupación basado en densidad que agrupa puntos en regiones de alta densidad mientras ignora puntos en regiones de baja densidad. Cada una de estas técnicas tiene sus fortalezas y debilidades, y la elección de qué técnica utilizar depende del problema específico y de los datos disponibles.
5.1.1 Agrupación K-Means
K-Means es un algoritmo de agrupación ampliamente utilizado debido a su simplicidad y facilidad de implementación. El algoritmo busca agrupar n observaciones en k clústeres de manera que cada observación se asigne al clúster con la media más cercana. Este método puede ser especialmente útil cuando se intenta identificar patrones o relaciones entre conjuntos de datos grandes. Sin embargo, es importante tener en cuenta que la efectividad del algoritmo depende en gran medida de la calidad de los centroides iniciales.
K-Means no siempre es el método de agrupación óptimo para ciertos conjuntos de datos, ya que otros métodos pueden ser más adecuados para manejar estructuras de datos más complejas o clústeres con límites no lineales. A pesar de estas limitaciones, K-Means sigue siendo una opción popular para muchos analistas de datos y profesionales del aprendizaje automático debido a su simplicidad y facilidad de uso.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar la agrupación K-Means utilizando Scikit-learn:
from sklearn.cluster import KMeans
import numpy as np
# Create a random dataset
X = np.random.rand(100, 2)
# Create a KMeans instance with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=0)
# Fit the model to the data
kmeans.fit(X)
# Get the cluster assignments for each data point
labels = kmeans.labels_
# Get the coordinates of the cluster centers
cluster_centers = kmeans.cluster_centers_
print("Cluster labels:", labels)
print("Cluster centers:", cluster_centers)
Salida:
El código crea un conjunto de datos aleatorio de 100 puntos de datos con 2 características, crea una instancia de KMeans con 3 clústeres, ajusta el modelo a los datos, obtiene las asignaciones de clúster para cada punto de datos y obtiene las coordenadas de los centros de clúster.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente. La salida también será una lista de 3 matrices NumPy, donde cada matriz representa las coordenadas del centro de clúster para el clúster correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
cluster_centers = [[0.5, 0.5], [0.75, 0.75], [1.0, 1.0]]
La matriz de etiquetas muestra que los primeros 5 puntos de datos se asignan al clúster 0, los siguientes 5 puntos de datos se asignan al clúster 1 y los últimos 5 puntos de datos se asignan al clúster 2. La matriz de cluster_centers
muestra que las coordenadas de los centros de clúster son (0.5, 0.5), (0.75, 0.75) y (1.0, 1.0).
En resumen, en este ejemplo, primero importamos las bibliotecas necesarias y creamos un conjunto de datos aleatorio con 100 muestras y 2 características. Luego creamos una instancia de KMeans con 3 clústeres y ajustamos el modelo a nuestros datos. El atributo labels_
nos proporciona las asignaciones de clúster para cada punto de datos y el atributo cluster_centers_
nos proporciona las coordenadas de los centros de clúster.
5.1.2 Agrupación Jerárquica
La agrupación jerárquica es un método poderoso y ampliamente utilizado en el análisis de agrupamiento en la ciencia de datos. Es particularmente útil cuando se trata de conjuntos de datos complejos que tienen múltiples variables o dimensiones. En lugar de dividir el conjunto de datos en clústeres distintos en un solo paso, la agrupación jerárquica nos permite visualizar la formación de clústeres a través de un diagrama similar a un árbol conocido como dendrograma.
Esto puede ser especialmente útil cuando se intenta identificar patrones o relaciones dentro de los datos que pueden no ser inmediatamente evidentes. La agrupación jerárquica se puede utilizar para explorar los datos a diferentes niveles de granularidad, desde clústeres amplios que agrupan puntos de datos similares hasta clústeres más específicos que resaltan diferencias sutiles entre ellos.
En general, la agrupación jerárquica proporciona un enfoque flexible e intuitivo para el análisis de agrupamiento que se puede adaptar a una amplia variedad de problemas basados en datos.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar la agrupación jerárquica utilizando Scikit-learn:
import numpy as np
from sklearn.cluster import AgglomerativeClustering
# Create a random dataset
X = np.random.rand(100, 2)
# Create an AgglomerativeClustering instance with 3 clusters
agg_clustering = AgglomerativeClustering(n_clusters=3)
# Fit the model to the data
agg_clustering.fit(X)
# Get the cluster assignments for each data point
labels = agg_clustering.labels_
Salida:
Este código crea una instancia de AgglomerativeClustering con 3 clústeres, ajusta el modelo a los datos y obtiene las asignaciones de clúster para cada punto de datos.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 0, 0, 1, 1, 1, 2, 2, 2]
La matriz de etiquetas muestra que todos los puntos de datos se asignan al mismo clúster. Esto se debe a que el método de enlace predeterminado para AgglomerativeClustering es 'single', que fusiona los dos clústeres más cercanos en cada paso. Dado que todos los puntos de datos están igualmente cerca entre sí, se fusionan en un solo clúster.
Puedes cambiar el método de enlace a 'ward', que minimiza la varianza dentro del clúster, para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con linkage='ward':
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
La matriz de etiquetas muestra que los puntos de datos ahora están divididos en 3 grupos. Esto se debe a que el método de enlace de Ward minimiza la varianza dentro del clúster, lo que significa que los clústeres están más estrechamente agrupados.
5.1.3 DBSCAN (Agrupación Espacial Basada en Densidad de Aplicaciones con Ruido)
DBSCAN (Agrupación Espacial Basada en Densidad de Aplicaciones con Ruido) es un poderoso algoritmo de aprendizaje automático no supervisado que forma clústeres de puntos de datos densamente agrupados. Este algoritmo tiene una ventaja distintiva sobre otros algoritmos de agrupación como K-means y la agrupación jerárquica porque puede identificar clústeres con formas arbitrarias y no requiere que el usuario especifique previamente el número de clústeres.
DBSCAN funciona identificando un punto o puntos centrales que tienen un número mínimo de puntos dentro de un radio especificado, conocido como el radio epsilon. Estos puntos centrales se utilizan luego para formar un clúster, y se agregan cualquier punto dentro del radio epsilon de un punto central al clúster. Este proceso continúa hasta que todos los puntos de datos han sido asignados a un clúster.
Además de su capacidad única para identificar formas arbitrarias, DBSCAN también cuenta con una función de reducción de ruido que puede identificar y excluir valores atípicos del proceso de agrupación. Esto garantiza que solo se incluyan en los clústeres los puntos de datos relevantes, lo que mejora la precisión general del algoritmo.
En general, DBSCAN es un algoritmo de agrupación potente y versátil que se puede utilizar en una amplia gama de aplicaciones, como segmentación de imágenes, detección de anomalías y segmentación de clientes. Su flexibilidad y precisión lo convierten en una herramienta valiosa en el campo del aprendizaje automático y la ciencia de datos.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar DBSCAN utilizando Scikit-learn:
import numpy as np
from sklearn.cluster import DBSCAN
# Create a random dataset
X = np.random.rand(100, 2)
# Create a DBSCAN instance
dbscan = DBSCAN(eps=0.3, min_samples=5)
# Fit the model to the data
dbscan.fit(X)
# Get the cluster assignments for each data point
labels = dbscan.labels_
En este ejemplo, eps
es la distancia máxima entre dos muestras para que se consideren en el mismo vecindario, y min_samples
es el número de muestras en un vecindario para que un punto se considere como un punto central.
Salida:
El código crea una instancia de DBSCAN con un valor epsilon de 0,3 y un mínimo de 5 muestras por clúster, ajusta el modelo a los datos y obtiene las asignaciones de clúster para cada punto de datos.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 0, 0, 1, 1, 1, 2, 2, 2, 2]
El array de etiquetas muestra que todos los puntos de datos se asignan a uno de los tres clústeres. Esto se debe a que el valor predeterminado para min_samples es 5, lo que significa que un punto de datos debe estar a una distancia de 0,3 o menos de al menos 5 otros puntos de datos para poder ser asignado a un clúster. Dado que no hay puntos de datos que estén a una distancia de 0,3 o menos de al menos 5 otros puntos de datos, todos los puntos de datos se asignan al clúster de ruido.
Puedes cambiar el valor de min_samples a 1 para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con min_samples=1:
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
El array de etiquetas muestra que los puntos de datos ahora se dividen en 3 clústeres. Esto se debe a que el valor de min_samples de 1 significa que cualquier punto de datos que esté dentro de una distancia de 0.3 de otro punto de datos se asignará a un clúster.
También puedes cambiar el valor de epsilon para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con eps=0.5:
labels = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
El array de etiquetas muestra que todos los puntos de datos ahora se asignan al mismo clúster. Esto se debe a que el valor de epsilon de 0.5 es demasiado grande, por lo que no hay puntos de datos que estén dentro de una distancia de 0.5 entre sí.
5.1.4 La Importancia de Comprender las Técnicas de Agrupamiento
Comprender las técnicas de agrupamiento es crucial para interpretar las estructuras ocultas dentro de tus datos y mejorar tu toma de decisiones. Estas técnicas no solo ofrecen diferentes enfoques para agrupar datos, sino que también tienen diferentes aplicaciones y limitaciones que es importante tener en cuenta.
Por ejemplo, K-Means es una técnica de agrupamiento popular debido a su simplicidad y eficiencia, lo que la convierte en una buena elección para conjuntos de datos grandes. Sin embargo, su suposición de que los clústeres son esféricos y de tamaño uniforme puede no ser siempre válida en escenarios del mundo real. El agrupamiento jerárquico, por otro lado, no requiere que especifiquemos el número de clústeres de antemano y proporciona un dendrograma que nos permite visualizar el proceso de agrupamiento. Sin embargo, puede ser más intensivo en cuanto a recursos computacionales que K-Means y puede no ser adecuado para conjuntos de datos muy grandes.
DBSCAN es otra potente técnica de agrupamiento que puede manejar conjuntos de datos con ruido y clústeres de diferentes densidades. Sin embargo, seleccionar los parámetros adecuados puede ser complicado y el rendimiento de DBSCAN puede verse afectado por la elección de la métrica de distancia y las técnicas de preprocesamiento de datos.
Vale la pena señalar que comprender estas técnicas es solo el primer paso para implementarlas con éxito. Para aplicar estas técnicas a tus datos, deberás aprender a utilizar herramientas como Scikit-learn e interpretar los resultados. Esto incluye comprender la salida de estos algoritmos, como las asignaciones de clústeres y los centros de clústeres para K-Means.
5.1 Técnicas de Agrupación (Clustering)
Bienvenido al Capítulo 5, donde exploraremos el fascinante mundo del aprendizaje no supervisado. En este capítulo, no solo aprenderemos sobre las diferentes técnicas de aprendizaje no supervisado, sino que también comprenderemos cómo funcionan y cómo se comparan entre sí.
A diferencia del aprendizaje supervisado, donde tenemos una variable objetivo que predecir, el aprendizaje no supervisado trabaja con datos no etiquetados. Esto significa que los datos no tienen categorías o grupos predefinidos, y el objetivo aquí es encontrar patrones ocultos o estructuras intrínsecas en los datos de entrada. El aprendizaje no supervisado es como un detective tratando de descubrir un misterio sin pistas, solo confiando en su intuición y razonamiento lógico. Es una tarea desafiante, pero las recompensas pueden ser enormes.
En este capítulo, comenzaremos examinando las técnicas de agrupación (clustering) más populares y ampliamente utilizadas, como K-means, la agrupación jerárquica y la agrupación basada en densidad. Analizaremos los pros y los contras de cada una y proporcionaremos ejemplos para ayudarte a comprender cómo se pueden utilizar en escenarios del mundo real.
A continuación, pasaremos a la reducción de la dimensionalidad, que es otra técnica importante en el aprendizaje no supervisado. Explicaremos por qué es necesaria la reducción de la dimensionalidad y cómo se puede utilizar para simplificar conjuntos de datos complejos. También cubriremos diferentes métodos para la reducción de la dimensionalidad, como el análisis de componentes principales (PCA), la incrustación estocástica de vecinos t-distribuidos (t-SNE) y los autoencoders.
Finalmente, discutiremos las métricas de evaluación para el aprendizaje no supervisado, que se utilizan para medir el rendimiento de los algoritmos de aprendizaje no supervisado. Explicaremos los diferentes tipos de métricas de evaluación, como la puntuación de silueta, el método del codo y el índice Davies-Bouldin, y te mostraremos cómo usarlos en tus propios proyectos.
A través de ejemplos y ejercicios prácticos, obtendrás una comprensión más profunda del aprendizaje no supervisado y podrás aplicar estas técnicas a tus propios conjuntos de datos. ¡Así que empecemos!
La agrupación (clustering) es una técnica ampliamente utilizada en el aprendizaje no supervisado. Se utiliza para agrupar un conjunto de objetos de manera que los objetos en el mismo grupo, también conocido como un clúster, sean más similares entre sí que aquellos en otros grupos o clústeres.
El proceso de agrupación ayuda a identificar patrones y estructuras en los datos que pueden no ser evidentes a simple vista. Existen varias técnicas de agrupación comúnmente utilizadas, como la agrupación K-means, la agrupación jerárquica y DBSCAN. La agrupación K-means es un método que divide los puntos de datos en k clústeres en función de su proximidad a los centroides del clúster.
Por otro lado, la agrupación jerárquica crea una estructura de tipo árbol de clústeres al fusionar o dividirlos de forma recursiva según su similitud. Finalmente, DBSCAN es un algoritmo de agrupación basado en densidad que agrupa puntos en regiones de alta densidad mientras ignora puntos en regiones de baja densidad. Cada una de estas técnicas tiene sus fortalezas y debilidades, y la elección de qué técnica utilizar depende del problema específico y de los datos disponibles.
5.1.1 Agrupación K-Means
K-Means es un algoritmo de agrupación ampliamente utilizado debido a su simplicidad y facilidad de implementación. El algoritmo busca agrupar n observaciones en k clústeres de manera que cada observación se asigne al clúster con la media más cercana. Este método puede ser especialmente útil cuando se intenta identificar patrones o relaciones entre conjuntos de datos grandes. Sin embargo, es importante tener en cuenta que la efectividad del algoritmo depende en gran medida de la calidad de los centroides iniciales.
K-Means no siempre es el método de agrupación óptimo para ciertos conjuntos de datos, ya que otros métodos pueden ser más adecuados para manejar estructuras de datos más complejas o clústeres con límites no lineales. A pesar de estas limitaciones, K-Means sigue siendo una opción popular para muchos analistas de datos y profesionales del aprendizaje automático debido a su simplicidad y facilidad de uso.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar la agrupación K-Means utilizando Scikit-learn:
from sklearn.cluster import KMeans
import numpy as np
# Create a random dataset
X = np.random.rand(100, 2)
# Create a KMeans instance with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=0)
# Fit the model to the data
kmeans.fit(X)
# Get the cluster assignments for each data point
labels = kmeans.labels_
# Get the coordinates of the cluster centers
cluster_centers = kmeans.cluster_centers_
print("Cluster labels:", labels)
print("Cluster centers:", cluster_centers)
Salida:
El código crea un conjunto de datos aleatorio de 100 puntos de datos con 2 características, crea una instancia de KMeans con 3 clústeres, ajusta el modelo a los datos, obtiene las asignaciones de clúster para cada punto de datos y obtiene las coordenadas de los centros de clúster.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente. La salida también será una lista de 3 matrices NumPy, donde cada matriz representa las coordenadas del centro de clúster para el clúster correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
cluster_centers = [[0.5, 0.5], [0.75, 0.75], [1.0, 1.0]]
La matriz de etiquetas muestra que los primeros 5 puntos de datos se asignan al clúster 0, los siguientes 5 puntos de datos se asignan al clúster 1 y los últimos 5 puntos de datos se asignan al clúster 2. La matriz de cluster_centers
muestra que las coordenadas de los centros de clúster son (0.5, 0.5), (0.75, 0.75) y (1.0, 1.0).
En resumen, en este ejemplo, primero importamos las bibliotecas necesarias y creamos un conjunto de datos aleatorio con 100 muestras y 2 características. Luego creamos una instancia de KMeans con 3 clústeres y ajustamos el modelo a nuestros datos. El atributo labels_
nos proporciona las asignaciones de clúster para cada punto de datos y el atributo cluster_centers_
nos proporciona las coordenadas de los centros de clúster.
5.1.2 Agrupación Jerárquica
La agrupación jerárquica es un método poderoso y ampliamente utilizado en el análisis de agrupamiento en la ciencia de datos. Es particularmente útil cuando se trata de conjuntos de datos complejos que tienen múltiples variables o dimensiones. En lugar de dividir el conjunto de datos en clústeres distintos en un solo paso, la agrupación jerárquica nos permite visualizar la formación de clústeres a través de un diagrama similar a un árbol conocido como dendrograma.
Esto puede ser especialmente útil cuando se intenta identificar patrones o relaciones dentro de los datos que pueden no ser inmediatamente evidentes. La agrupación jerárquica se puede utilizar para explorar los datos a diferentes niveles de granularidad, desde clústeres amplios que agrupan puntos de datos similares hasta clústeres más específicos que resaltan diferencias sutiles entre ellos.
En general, la agrupación jerárquica proporciona un enfoque flexible e intuitivo para el análisis de agrupamiento que se puede adaptar a una amplia variedad de problemas basados en datos.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar la agrupación jerárquica utilizando Scikit-learn:
import numpy as np
from sklearn.cluster import AgglomerativeClustering
# Create a random dataset
X = np.random.rand(100, 2)
# Create an AgglomerativeClustering instance with 3 clusters
agg_clustering = AgglomerativeClustering(n_clusters=3)
# Fit the model to the data
agg_clustering.fit(X)
# Get the cluster assignments for each data point
labels = agg_clustering.labels_
Salida:
Este código crea una instancia de AgglomerativeClustering con 3 clústeres, ajusta el modelo a los datos y obtiene las asignaciones de clúster para cada punto de datos.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 0, 0, 1, 1, 1, 2, 2, 2]
La matriz de etiquetas muestra que todos los puntos de datos se asignan al mismo clúster. Esto se debe a que el método de enlace predeterminado para AgglomerativeClustering es 'single', que fusiona los dos clústeres más cercanos en cada paso. Dado que todos los puntos de datos están igualmente cerca entre sí, se fusionan en un solo clúster.
Puedes cambiar el método de enlace a 'ward', que minimiza la varianza dentro del clúster, para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con linkage='ward':
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
La matriz de etiquetas muestra que los puntos de datos ahora están divididos en 3 grupos. Esto se debe a que el método de enlace de Ward minimiza la varianza dentro del clúster, lo que significa que los clústeres están más estrechamente agrupados.
5.1.3 DBSCAN (Agrupación Espacial Basada en Densidad de Aplicaciones con Ruido)
DBSCAN (Agrupación Espacial Basada en Densidad de Aplicaciones con Ruido) es un poderoso algoritmo de aprendizaje automático no supervisado que forma clústeres de puntos de datos densamente agrupados. Este algoritmo tiene una ventaja distintiva sobre otros algoritmos de agrupación como K-means y la agrupación jerárquica porque puede identificar clústeres con formas arbitrarias y no requiere que el usuario especifique previamente el número de clústeres.
DBSCAN funciona identificando un punto o puntos centrales que tienen un número mínimo de puntos dentro de un radio especificado, conocido como el radio epsilon. Estos puntos centrales se utilizan luego para formar un clúster, y se agregan cualquier punto dentro del radio epsilon de un punto central al clúster. Este proceso continúa hasta que todos los puntos de datos han sido asignados a un clúster.
Además de su capacidad única para identificar formas arbitrarias, DBSCAN también cuenta con una función de reducción de ruido que puede identificar y excluir valores atípicos del proceso de agrupación. Esto garantiza que solo se incluyan en los clústeres los puntos de datos relevantes, lo que mejora la precisión general del algoritmo.
En general, DBSCAN es un algoritmo de agrupación potente y versátil que se puede utilizar en una amplia gama de aplicaciones, como segmentación de imágenes, detección de anomalías y segmentación de clientes. Su flexibilidad y precisión lo convierten en una herramienta valiosa en el campo del aprendizaje automático y la ciencia de datos.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar DBSCAN utilizando Scikit-learn:
import numpy as np
from sklearn.cluster import DBSCAN
# Create a random dataset
X = np.random.rand(100, 2)
# Create a DBSCAN instance
dbscan = DBSCAN(eps=0.3, min_samples=5)
# Fit the model to the data
dbscan.fit(X)
# Get the cluster assignments for each data point
labels = dbscan.labels_
En este ejemplo, eps
es la distancia máxima entre dos muestras para que se consideren en el mismo vecindario, y min_samples
es el número de muestras en un vecindario para que un punto se considere como un punto central.
Salida:
El código crea una instancia de DBSCAN con un valor epsilon de 0,3 y un mínimo de 5 muestras por clúster, ajusta el modelo a los datos y obtiene las asignaciones de clúster para cada punto de datos.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 0, 0, 1, 1, 1, 2, 2, 2, 2]
El array de etiquetas muestra que todos los puntos de datos se asignan a uno de los tres clústeres. Esto se debe a que el valor predeterminado para min_samples es 5, lo que significa que un punto de datos debe estar a una distancia de 0,3 o menos de al menos 5 otros puntos de datos para poder ser asignado a un clúster. Dado que no hay puntos de datos que estén a una distancia de 0,3 o menos de al menos 5 otros puntos de datos, todos los puntos de datos se asignan al clúster de ruido.
Puedes cambiar el valor de min_samples a 1 para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con min_samples=1:
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
El array de etiquetas muestra que los puntos de datos ahora se dividen en 3 clústeres. Esto se debe a que el valor de min_samples de 1 significa que cualquier punto de datos que esté dentro de una distancia de 0.3 de otro punto de datos se asignará a un clúster.
También puedes cambiar el valor de epsilon para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con eps=0.5:
labels = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
El array de etiquetas muestra que todos los puntos de datos ahora se asignan al mismo clúster. Esto se debe a que el valor de epsilon de 0.5 es demasiado grande, por lo que no hay puntos de datos que estén dentro de una distancia de 0.5 entre sí.
5.1.4 La Importancia de Comprender las Técnicas de Agrupamiento
Comprender las técnicas de agrupamiento es crucial para interpretar las estructuras ocultas dentro de tus datos y mejorar tu toma de decisiones. Estas técnicas no solo ofrecen diferentes enfoques para agrupar datos, sino que también tienen diferentes aplicaciones y limitaciones que es importante tener en cuenta.
Por ejemplo, K-Means es una técnica de agrupamiento popular debido a su simplicidad y eficiencia, lo que la convierte en una buena elección para conjuntos de datos grandes. Sin embargo, su suposición de que los clústeres son esféricos y de tamaño uniforme puede no ser siempre válida en escenarios del mundo real. El agrupamiento jerárquico, por otro lado, no requiere que especifiquemos el número de clústeres de antemano y proporciona un dendrograma que nos permite visualizar el proceso de agrupamiento. Sin embargo, puede ser más intensivo en cuanto a recursos computacionales que K-Means y puede no ser adecuado para conjuntos de datos muy grandes.
DBSCAN es otra potente técnica de agrupamiento que puede manejar conjuntos de datos con ruido y clústeres de diferentes densidades. Sin embargo, seleccionar los parámetros adecuados puede ser complicado y el rendimiento de DBSCAN puede verse afectado por la elección de la métrica de distancia y las técnicas de preprocesamiento de datos.
Vale la pena señalar que comprender estas técnicas es solo el primer paso para implementarlas con éxito. Para aplicar estas técnicas a tus datos, deberás aprender a utilizar herramientas como Scikit-learn e interpretar los resultados. Esto incluye comprender la salida de estos algoritmos, como las asignaciones de clústeres y los centros de clústeres para K-Means.
5.1 Técnicas de Agrupación (Clustering)
Bienvenido al Capítulo 5, donde exploraremos el fascinante mundo del aprendizaje no supervisado. En este capítulo, no solo aprenderemos sobre las diferentes técnicas de aprendizaje no supervisado, sino que también comprenderemos cómo funcionan y cómo se comparan entre sí.
A diferencia del aprendizaje supervisado, donde tenemos una variable objetivo que predecir, el aprendizaje no supervisado trabaja con datos no etiquetados. Esto significa que los datos no tienen categorías o grupos predefinidos, y el objetivo aquí es encontrar patrones ocultos o estructuras intrínsecas en los datos de entrada. El aprendizaje no supervisado es como un detective tratando de descubrir un misterio sin pistas, solo confiando en su intuición y razonamiento lógico. Es una tarea desafiante, pero las recompensas pueden ser enormes.
En este capítulo, comenzaremos examinando las técnicas de agrupación (clustering) más populares y ampliamente utilizadas, como K-means, la agrupación jerárquica y la agrupación basada en densidad. Analizaremos los pros y los contras de cada una y proporcionaremos ejemplos para ayudarte a comprender cómo se pueden utilizar en escenarios del mundo real.
A continuación, pasaremos a la reducción de la dimensionalidad, que es otra técnica importante en el aprendizaje no supervisado. Explicaremos por qué es necesaria la reducción de la dimensionalidad y cómo se puede utilizar para simplificar conjuntos de datos complejos. También cubriremos diferentes métodos para la reducción de la dimensionalidad, como el análisis de componentes principales (PCA), la incrustación estocástica de vecinos t-distribuidos (t-SNE) y los autoencoders.
Finalmente, discutiremos las métricas de evaluación para el aprendizaje no supervisado, que se utilizan para medir el rendimiento de los algoritmos de aprendizaje no supervisado. Explicaremos los diferentes tipos de métricas de evaluación, como la puntuación de silueta, el método del codo y el índice Davies-Bouldin, y te mostraremos cómo usarlos en tus propios proyectos.
A través de ejemplos y ejercicios prácticos, obtendrás una comprensión más profunda del aprendizaje no supervisado y podrás aplicar estas técnicas a tus propios conjuntos de datos. ¡Así que empecemos!
La agrupación (clustering) es una técnica ampliamente utilizada en el aprendizaje no supervisado. Se utiliza para agrupar un conjunto de objetos de manera que los objetos en el mismo grupo, también conocido como un clúster, sean más similares entre sí que aquellos en otros grupos o clústeres.
El proceso de agrupación ayuda a identificar patrones y estructuras en los datos que pueden no ser evidentes a simple vista. Existen varias técnicas de agrupación comúnmente utilizadas, como la agrupación K-means, la agrupación jerárquica y DBSCAN. La agrupación K-means es un método que divide los puntos de datos en k clústeres en función de su proximidad a los centroides del clúster.
Por otro lado, la agrupación jerárquica crea una estructura de tipo árbol de clústeres al fusionar o dividirlos de forma recursiva según su similitud. Finalmente, DBSCAN es un algoritmo de agrupación basado en densidad que agrupa puntos en regiones de alta densidad mientras ignora puntos en regiones de baja densidad. Cada una de estas técnicas tiene sus fortalezas y debilidades, y la elección de qué técnica utilizar depende del problema específico y de los datos disponibles.
5.1.1 Agrupación K-Means
K-Means es un algoritmo de agrupación ampliamente utilizado debido a su simplicidad y facilidad de implementación. El algoritmo busca agrupar n observaciones en k clústeres de manera que cada observación se asigne al clúster con la media más cercana. Este método puede ser especialmente útil cuando se intenta identificar patrones o relaciones entre conjuntos de datos grandes. Sin embargo, es importante tener en cuenta que la efectividad del algoritmo depende en gran medida de la calidad de los centroides iniciales.
K-Means no siempre es el método de agrupación óptimo para ciertos conjuntos de datos, ya que otros métodos pueden ser más adecuados para manejar estructuras de datos más complejas o clústeres con límites no lineales. A pesar de estas limitaciones, K-Means sigue siendo una opción popular para muchos analistas de datos y profesionales del aprendizaje automático debido a su simplicidad y facilidad de uso.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar la agrupación K-Means utilizando Scikit-learn:
from sklearn.cluster import KMeans
import numpy as np
# Create a random dataset
X = np.random.rand(100, 2)
# Create a KMeans instance with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=0)
# Fit the model to the data
kmeans.fit(X)
# Get the cluster assignments for each data point
labels = kmeans.labels_
# Get the coordinates of the cluster centers
cluster_centers = kmeans.cluster_centers_
print("Cluster labels:", labels)
print("Cluster centers:", cluster_centers)
Salida:
El código crea un conjunto de datos aleatorio de 100 puntos de datos con 2 características, crea una instancia de KMeans con 3 clústeres, ajusta el modelo a los datos, obtiene las asignaciones de clúster para cada punto de datos y obtiene las coordenadas de los centros de clúster.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente. La salida también será una lista de 3 matrices NumPy, donde cada matriz representa las coordenadas del centro de clúster para el clúster correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
cluster_centers = [[0.5, 0.5], [0.75, 0.75], [1.0, 1.0]]
La matriz de etiquetas muestra que los primeros 5 puntos de datos se asignan al clúster 0, los siguientes 5 puntos de datos se asignan al clúster 1 y los últimos 5 puntos de datos se asignan al clúster 2. La matriz de cluster_centers
muestra que las coordenadas de los centros de clúster son (0.5, 0.5), (0.75, 0.75) y (1.0, 1.0).
En resumen, en este ejemplo, primero importamos las bibliotecas necesarias y creamos un conjunto de datos aleatorio con 100 muestras y 2 características. Luego creamos una instancia de KMeans con 3 clústeres y ajustamos el modelo a nuestros datos. El atributo labels_
nos proporciona las asignaciones de clúster para cada punto de datos y el atributo cluster_centers_
nos proporciona las coordenadas de los centros de clúster.
5.1.2 Agrupación Jerárquica
La agrupación jerárquica es un método poderoso y ampliamente utilizado en el análisis de agrupamiento en la ciencia de datos. Es particularmente útil cuando se trata de conjuntos de datos complejos que tienen múltiples variables o dimensiones. En lugar de dividir el conjunto de datos en clústeres distintos en un solo paso, la agrupación jerárquica nos permite visualizar la formación de clústeres a través de un diagrama similar a un árbol conocido como dendrograma.
Esto puede ser especialmente útil cuando se intenta identificar patrones o relaciones dentro de los datos que pueden no ser inmediatamente evidentes. La agrupación jerárquica se puede utilizar para explorar los datos a diferentes niveles de granularidad, desde clústeres amplios que agrupan puntos de datos similares hasta clústeres más específicos que resaltan diferencias sutiles entre ellos.
En general, la agrupación jerárquica proporciona un enfoque flexible e intuitivo para el análisis de agrupamiento que se puede adaptar a una amplia variedad de problemas basados en datos.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar la agrupación jerárquica utilizando Scikit-learn:
import numpy as np
from sklearn.cluster import AgglomerativeClustering
# Create a random dataset
X = np.random.rand(100, 2)
# Create an AgglomerativeClustering instance with 3 clusters
agg_clustering = AgglomerativeClustering(n_clusters=3)
# Fit the model to the data
agg_clustering.fit(X)
# Get the cluster assignments for each data point
labels = agg_clustering.labels_
Salida:
Este código crea una instancia de AgglomerativeClustering con 3 clústeres, ajusta el modelo a los datos y obtiene las asignaciones de clúster para cada punto de datos.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 0, 0, 1, 1, 1, 2, 2, 2]
La matriz de etiquetas muestra que todos los puntos de datos se asignan al mismo clúster. Esto se debe a que el método de enlace predeterminado para AgglomerativeClustering es 'single', que fusiona los dos clústeres más cercanos en cada paso. Dado que todos los puntos de datos están igualmente cerca entre sí, se fusionan en un solo clúster.
Puedes cambiar el método de enlace a 'ward', que minimiza la varianza dentro del clúster, para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con linkage='ward':
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
La matriz de etiquetas muestra que los puntos de datos ahora están divididos en 3 grupos. Esto se debe a que el método de enlace de Ward minimiza la varianza dentro del clúster, lo que significa que los clústeres están más estrechamente agrupados.
5.1.3 DBSCAN (Agrupación Espacial Basada en Densidad de Aplicaciones con Ruido)
DBSCAN (Agrupación Espacial Basada en Densidad de Aplicaciones con Ruido) es un poderoso algoritmo de aprendizaje automático no supervisado que forma clústeres de puntos de datos densamente agrupados. Este algoritmo tiene una ventaja distintiva sobre otros algoritmos de agrupación como K-means y la agrupación jerárquica porque puede identificar clústeres con formas arbitrarias y no requiere que el usuario especifique previamente el número de clústeres.
DBSCAN funciona identificando un punto o puntos centrales que tienen un número mínimo de puntos dentro de un radio especificado, conocido como el radio epsilon. Estos puntos centrales se utilizan luego para formar un clúster, y se agregan cualquier punto dentro del radio epsilon de un punto central al clúster. Este proceso continúa hasta que todos los puntos de datos han sido asignados a un clúster.
Además de su capacidad única para identificar formas arbitrarias, DBSCAN también cuenta con una función de reducción de ruido que puede identificar y excluir valores atípicos del proceso de agrupación. Esto garantiza que solo se incluyan en los clústeres los puntos de datos relevantes, lo que mejora la precisión general del algoritmo.
En general, DBSCAN es un algoritmo de agrupación potente y versátil que se puede utilizar en una amplia gama de aplicaciones, como segmentación de imágenes, detección de anomalías y segmentación de clientes. Su flexibilidad y precisión lo convierten en una herramienta valiosa en el campo del aprendizaje automático y la ciencia de datos.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar DBSCAN utilizando Scikit-learn:
import numpy as np
from sklearn.cluster import DBSCAN
# Create a random dataset
X = np.random.rand(100, 2)
# Create a DBSCAN instance
dbscan = DBSCAN(eps=0.3, min_samples=5)
# Fit the model to the data
dbscan.fit(X)
# Get the cluster assignments for each data point
labels = dbscan.labels_
En este ejemplo, eps
es la distancia máxima entre dos muestras para que se consideren en el mismo vecindario, y min_samples
es el número de muestras en un vecindario para que un punto se considere como un punto central.
Salida:
El código crea una instancia de DBSCAN con un valor epsilon de 0,3 y un mínimo de 5 muestras por clúster, ajusta el modelo a los datos y obtiene las asignaciones de clúster para cada punto de datos.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 0, 0, 1, 1, 1, 2, 2, 2, 2]
El array de etiquetas muestra que todos los puntos de datos se asignan a uno de los tres clústeres. Esto se debe a que el valor predeterminado para min_samples es 5, lo que significa que un punto de datos debe estar a una distancia de 0,3 o menos de al menos 5 otros puntos de datos para poder ser asignado a un clúster. Dado que no hay puntos de datos que estén a una distancia de 0,3 o menos de al menos 5 otros puntos de datos, todos los puntos de datos se asignan al clúster de ruido.
Puedes cambiar el valor de min_samples a 1 para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con min_samples=1:
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
El array de etiquetas muestra que los puntos de datos ahora se dividen en 3 clústeres. Esto se debe a que el valor de min_samples de 1 significa que cualquier punto de datos que esté dentro de una distancia de 0.3 de otro punto de datos se asignará a un clúster.
También puedes cambiar el valor de epsilon para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con eps=0.5:
labels = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
El array de etiquetas muestra que todos los puntos de datos ahora se asignan al mismo clúster. Esto se debe a que el valor de epsilon de 0.5 es demasiado grande, por lo que no hay puntos de datos que estén dentro de una distancia de 0.5 entre sí.
5.1.4 La Importancia de Comprender las Técnicas de Agrupamiento
Comprender las técnicas de agrupamiento es crucial para interpretar las estructuras ocultas dentro de tus datos y mejorar tu toma de decisiones. Estas técnicas no solo ofrecen diferentes enfoques para agrupar datos, sino que también tienen diferentes aplicaciones y limitaciones que es importante tener en cuenta.
Por ejemplo, K-Means es una técnica de agrupamiento popular debido a su simplicidad y eficiencia, lo que la convierte en una buena elección para conjuntos de datos grandes. Sin embargo, su suposición de que los clústeres son esféricos y de tamaño uniforme puede no ser siempre válida en escenarios del mundo real. El agrupamiento jerárquico, por otro lado, no requiere que especifiquemos el número de clústeres de antemano y proporciona un dendrograma que nos permite visualizar el proceso de agrupamiento. Sin embargo, puede ser más intensivo en cuanto a recursos computacionales que K-Means y puede no ser adecuado para conjuntos de datos muy grandes.
DBSCAN es otra potente técnica de agrupamiento que puede manejar conjuntos de datos con ruido y clústeres de diferentes densidades. Sin embargo, seleccionar los parámetros adecuados puede ser complicado y el rendimiento de DBSCAN puede verse afectado por la elección de la métrica de distancia y las técnicas de preprocesamiento de datos.
Vale la pena señalar que comprender estas técnicas es solo el primer paso para implementarlas con éxito. Para aplicar estas técnicas a tus datos, deberás aprender a utilizar herramientas como Scikit-learn e interpretar los resultados. Esto incluye comprender la salida de estos algoritmos, como las asignaciones de clústeres y los centros de clústeres para K-Means.
5.1 Técnicas de Agrupación (Clustering)
Bienvenido al Capítulo 5, donde exploraremos el fascinante mundo del aprendizaje no supervisado. En este capítulo, no solo aprenderemos sobre las diferentes técnicas de aprendizaje no supervisado, sino que también comprenderemos cómo funcionan y cómo se comparan entre sí.
A diferencia del aprendizaje supervisado, donde tenemos una variable objetivo que predecir, el aprendizaje no supervisado trabaja con datos no etiquetados. Esto significa que los datos no tienen categorías o grupos predefinidos, y el objetivo aquí es encontrar patrones ocultos o estructuras intrínsecas en los datos de entrada. El aprendizaje no supervisado es como un detective tratando de descubrir un misterio sin pistas, solo confiando en su intuición y razonamiento lógico. Es una tarea desafiante, pero las recompensas pueden ser enormes.
En este capítulo, comenzaremos examinando las técnicas de agrupación (clustering) más populares y ampliamente utilizadas, como K-means, la agrupación jerárquica y la agrupación basada en densidad. Analizaremos los pros y los contras de cada una y proporcionaremos ejemplos para ayudarte a comprender cómo se pueden utilizar en escenarios del mundo real.
A continuación, pasaremos a la reducción de la dimensionalidad, que es otra técnica importante en el aprendizaje no supervisado. Explicaremos por qué es necesaria la reducción de la dimensionalidad y cómo se puede utilizar para simplificar conjuntos de datos complejos. También cubriremos diferentes métodos para la reducción de la dimensionalidad, como el análisis de componentes principales (PCA), la incrustación estocástica de vecinos t-distribuidos (t-SNE) y los autoencoders.
Finalmente, discutiremos las métricas de evaluación para el aprendizaje no supervisado, que se utilizan para medir el rendimiento de los algoritmos de aprendizaje no supervisado. Explicaremos los diferentes tipos de métricas de evaluación, como la puntuación de silueta, el método del codo y el índice Davies-Bouldin, y te mostraremos cómo usarlos en tus propios proyectos.
A través de ejemplos y ejercicios prácticos, obtendrás una comprensión más profunda del aprendizaje no supervisado y podrás aplicar estas técnicas a tus propios conjuntos de datos. ¡Así que empecemos!
La agrupación (clustering) es una técnica ampliamente utilizada en el aprendizaje no supervisado. Se utiliza para agrupar un conjunto de objetos de manera que los objetos en el mismo grupo, también conocido como un clúster, sean más similares entre sí que aquellos en otros grupos o clústeres.
El proceso de agrupación ayuda a identificar patrones y estructuras en los datos que pueden no ser evidentes a simple vista. Existen varias técnicas de agrupación comúnmente utilizadas, como la agrupación K-means, la agrupación jerárquica y DBSCAN. La agrupación K-means es un método que divide los puntos de datos en k clústeres en función de su proximidad a los centroides del clúster.
Por otro lado, la agrupación jerárquica crea una estructura de tipo árbol de clústeres al fusionar o dividirlos de forma recursiva según su similitud. Finalmente, DBSCAN es un algoritmo de agrupación basado en densidad que agrupa puntos en regiones de alta densidad mientras ignora puntos en regiones de baja densidad. Cada una de estas técnicas tiene sus fortalezas y debilidades, y la elección de qué técnica utilizar depende del problema específico y de los datos disponibles.
5.1.1 Agrupación K-Means
K-Means es un algoritmo de agrupación ampliamente utilizado debido a su simplicidad y facilidad de implementación. El algoritmo busca agrupar n observaciones en k clústeres de manera que cada observación se asigne al clúster con la media más cercana. Este método puede ser especialmente útil cuando se intenta identificar patrones o relaciones entre conjuntos de datos grandes. Sin embargo, es importante tener en cuenta que la efectividad del algoritmo depende en gran medida de la calidad de los centroides iniciales.
K-Means no siempre es el método de agrupación óptimo para ciertos conjuntos de datos, ya que otros métodos pueden ser más adecuados para manejar estructuras de datos más complejas o clústeres con límites no lineales. A pesar de estas limitaciones, K-Means sigue siendo una opción popular para muchos analistas de datos y profesionales del aprendizaje automático debido a su simplicidad y facilidad de uso.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar la agrupación K-Means utilizando Scikit-learn:
from sklearn.cluster import KMeans
import numpy as np
# Create a random dataset
X = np.random.rand(100, 2)
# Create a KMeans instance with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=0)
# Fit the model to the data
kmeans.fit(X)
# Get the cluster assignments for each data point
labels = kmeans.labels_
# Get the coordinates of the cluster centers
cluster_centers = kmeans.cluster_centers_
print("Cluster labels:", labels)
print("Cluster centers:", cluster_centers)
Salida:
El código crea un conjunto de datos aleatorio de 100 puntos de datos con 2 características, crea una instancia de KMeans con 3 clústeres, ajusta el modelo a los datos, obtiene las asignaciones de clúster para cada punto de datos y obtiene las coordenadas de los centros de clúster.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente. La salida también será una lista de 3 matrices NumPy, donde cada matriz representa las coordenadas del centro de clúster para el clúster correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
cluster_centers = [[0.5, 0.5], [0.75, 0.75], [1.0, 1.0]]
La matriz de etiquetas muestra que los primeros 5 puntos de datos se asignan al clúster 0, los siguientes 5 puntos de datos se asignan al clúster 1 y los últimos 5 puntos de datos se asignan al clúster 2. La matriz de cluster_centers
muestra que las coordenadas de los centros de clúster son (0.5, 0.5), (0.75, 0.75) y (1.0, 1.0).
En resumen, en este ejemplo, primero importamos las bibliotecas necesarias y creamos un conjunto de datos aleatorio con 100 muestras y 2 características. Luego creamos una instancia de KMeans con 3 clústeres y ajustamos el modelo a nuestros datos. El atributo labels_
nos proporciona las asignaciones de clúster para cada punto de datos y el atributo cluster_centers_
nos proporciona las coordenadas de los centros de clúster.
5.1.2 Agrupación Jerárquica
La agrupación jerárquica es un método poderoso y ampliamente utilizado en el análisis de agrupamiento en la ciencia de datos. Es particularmente útil cuando se trata de conjuntos de datos complejos que tienen múltiples variables o dimensiones. En lugar de dividir el conjunto de datos en clústeres distintos en un solo paso, la agrupación jerárquica nos permite visualizar la formación de clústeres a través de un diagrama similar a un árbol conocido como dendrograma.
Esto puede ser especialmente útil cuando se intenta identificar patrones o relaciones dentro de los datos que pueden no ser inmediatamente evidentes. La agrupación jerárquica se puede utilizar para explorar los datos a diferentes niveles de granularidad, desde clústeres amplios que agrupan puntos de datos similares hasta clústeres más específicos que resaltan diferencias sutiles entre ellos.
En general, la agrupación jerárquica proporciona un enfoque flexible e intuitivo para el análisis de agrupamiento que se puede adaptar a una amplia variedad de problemas basados en datos.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar la agrupación jerárquica utilizando Scikit-learn:
import numpy as np
from sklearn.cluster import AgglomerativeClustering
# Create a random dataset
X = np.random.rand(100, 2)
# Create an AgglomerativeClustering instance with 3 clusters
agg_clustering = AgglomerativeClustering(n_clusters=3)
# Fit the model to the data
agg_clustering.fit(X)
# Get the cluster assignments for each data point
labels = agg_clustering.labels_
Salida:
Este código crea una instancia de AgglomerativeClustering con 3 clústeres, ajusta el modelo a los datos y obtiene las asignaciones de clúster para cada punto de datos.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 0, 0, 1, 1, 1, 2, 2, 2]
La matriz de etiquetas muestra que todos los puntos de datos se asignan al mismo clúster. Esto se debe a que el método de enlace predeterminado para AgglomerativeClustering es 'single', que fusiona los dos clústeres más cercanos en cada paso. Dado que todos los puntos de datos están igualmente cerca entre sí, se fusionan en un solo clúster.
Puedes cambiar el método de enlace a 'ward', que minimiza la varianza dentro del clúster, para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con linkage='ward':
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
La matriz de etiquetas muestra que los puntos de datos ahora están divididos en 3 grupos. Esto se debe a que el método de enlace de Ward minimiza la varianza dentro del clúster, lo que significa que los clústeres están más estrechamente agrupados.
5.1.3 DBSCAN (Agrupación Espacial Basada en Densidad de Aplicaciones con Ruido)
DBSCAN (Agrupación Espacial Basada en Densidad de Aplicaciones con Ruido) es un poderoso algoritmo de aprendizaje automático no supervisado que forma clústeres de puntos de datos densamente agrupados. Este algoritmo tiene una ventaja distintiva sobre otros algoritmos de agrupación como K-means y la agrupación jerárquica porque puede identificar clústeres con formas arbitrarias y no requiere que el usuario especifique previamente el número de clústeres.
DBSCAN funciona identificando un punto o puntos centrales que tienen un número mínimo de puntos dentro de un radio especificado, conocido como el radio epsilon. Estos puntos centrales se utilizan luego para formar un clúster, y se agregan cualquier punto dentro del radio epsilon de un punto central al clúster. Este proceso continúa hasta que todos los puntos de datos han sido asignados a un clúster.
Además de su capacidad única para identificar formas arbitrarias, DBSCAN también cuenta con una función de reducción de ruido que puede identificar y excluir valores atípicos del proceso de agrupación. Esto garantiza que solo se incluyan en los clústeres los puntos de datos relevantes, lo que mejora la precisión general del algoritmo.
En general, DBSCAN es un algoritmo de agrupación potente y versátil que se puede utilizar en una amplia gama de aplicaciones, como segmentación de imágenes, detección de anomalías y segmentación de clientes. Su flexibilidad y precisión lo convierten en una herramienta valiosa en el campo del aprendizaje automático y la ciencia de datos.
Ejemplo:
Aquí tienes un ejemplo sencillo de cómo realizar DBSCAN utilizando Scikit-learn:
import numpy as np
from sklearn.cluster import DBSCAN
# Create a random dataset
X = np.random.rand(100, 2)
# Create a DBSCAN instance
dbscan = DBSCAN(eps=0.3, min_samples=5)
# Fit the model to the data
dbscan.fit(X)
# Get the cluster assignments for each data point
labels = dbscan.labels_
En este ejemplo, eps
es la distancia máxima entre dos muestras para que se consideren en el mismo vecindario, y min_samples
es el número de muestras en un vecindario para que un punto se considere como un punto central.
Salida:
El código crea una instancia de DBSCAN con un valor epsilon de 0,3 y un mínimo de 5 muestras por clúster, ajusta el modelo a los datos y obtiene las asignaciones de clúster para cada punto de datos.
La salida del código será una lista de 100 enteros, donde cada entero representa la asignación de clúster para el punto de datos correspondiente.
Aquí tienes un ejemplo de la salida:
labels = [0, 0, 0, 1, 1, 1, 2, 2, 2, 2]
El array de etiquetas muestra que todos los puntos de datos se asignan a uno de los tres clústeres. Esto se debe a que el valor predeterminado para min_samples es 5, lo que significa que un punto de datos debe estar a una distancia de 0,3 o menos de al menos 5 otros puntos de datos para poder ser asignado a un clúster. Dado que no hay puntos de datos que estén a una distancia de 0,3 o menos de al menos 5 otros puntos de datos, todos los puntos de datos se asignan al clúster de ruido.
Puedes cambiar el valor de min_samples a 1 para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con min_samples=1:
labels = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
El array de etiquetas muestra que los puntos de datos ahora se dividen en 3 clústeres. Esto se debe a que el valor de min_samples de 1 significa que cualquier punto de datos que esté dentro de una distancia de 0.3 de otro punto de datos se asignará a un clúster.
También puedes cambiar el valor de epsilon para obtener una salida diferente. Por ejemplo, aquí tienes la salida del código con eps=0.5:
labels = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
El array de etiquetas muestra que todos los puntos de datos ahora se asignan al mismo clúster. Esto se debe a que el valor de epsilon de 0.5 es demasiado grande, por lo que no hay puntos de datos que estén dentro de una distancia de 0.5 entre sí.
5.1.4 La Importancia de Comprender las Técnicas de Agrupamiento
Comprender las técnicas de agrupamiento es crucial para interpretar las estructuras ocultas dentro de tus datos y mejorar tu toma de decisiones. Estas técnicas no solo ofrecen diferentes enfoques para agrupar datos, sino que también tienen diferentes aplicaciones y limitaciones que es importante tener en cuenta.
Por ejemplo, K-Means es una técnica de agrupamiento popular debido a su simplicidad y eficiencia, lo que la convierte en una buena elección para conjuntos de datos grandes. Sin embargo, su suposición de que los clústeres son esféricos y de tamaño uniforme puede no ser siempre válida en escenarios del mundo real. El agrupamiento jerárquico, por otro lado, no requiere que especifiquemos el número de clústeres de antemano y proporciona un dendrograma que nos permite visualizar el proceso de agrupamiento. Sin embargo, puede ser más intensivo en cuanto a recursos computacionales que K-Means y puede no ser adecuado para conjuntos de datos muy grandes.
DBSCAN es otra potente técnica de agrupamiento que puede manejar conjuntos de datos con ruido y clústeres de diferentes densidades. Sin embargo, seleccionar los parámetros adecuados puede ser complicado y el rendimiento de DBSCAN puede verse afectado por la elección de la métrica de distancia y las técnicas de preprocesamiento de datos.
Vale la pena señalar que comprender estas técnicas es solo el primer paso para implementarlas con éxito. Para aplicar estas técnicas a tus datos, deberás aprender a utilizar herramientas como Scikit-learn e interpretar los resultados. Esto incluye comprender la salida de estos algoritmos, como las asignaciones de clústeres y los centros de clústeres para K-Means.