Ejemplo aprendizaje no supervisado
En el aprendizaje no supervisado, el objetivo es encontrar patrones o estructuras ocultas en los datos sin una variable objetivo o etiquetas. Un ejemplo típico es la agrupación de datos (clustering). Un algoritmo popular para este tipo de tareas es el K-Means, que agrupa puntos de datos similares en clústeres.
A continuación, vamos a realizar un ejemplo utilizando un algoritmo de K-Means para agrupar datos del conjunto de datos “Iris”. Este dataset tiene información sobre tres especies de flores Iris y sus características (longitud y ancho de los pétalos y sépalos). Sin embargo, en este caso no usamos las etiquetas de las especies, sino que intentamos descubrir agrupamientos basándonos en las características.
Paso 1: Cargar y Explorar los Datos
Primero, cargamos el conjunto de datos de Iris, disponible en scikit-learn.
from sklearn.datasets import load_iris
import pandas as pd
# Cargar el conjunto de datos Iris
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
# Mostrar las primeras filas del dataset
print(df.head())
Salida:
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) |
---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 |
4.9 | 3.0 | 1.4 | 0.2 |
4.7 | 3.2 | 1.3 | 0.2 |
4.6 | 3.1 | 1.5 | 0.2 |
5.0 | 3.6 | 1.4 | 0.2 |
Este dataset contiene 150 muestras de flores con 4 características: longitud y ancho del sépalo y del pétalo.
Paso 2: Aplicar K-Means para Agrupar los Datos
Ahora aplicamos el algoritmo de K-Means para dividir los datos en tres grupos (clústeres), que deberían corresponder a las tres especies de Iris.
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# Aplicar K-Means con 3 clústeres (ya que sabemos que hay 3 especies en el dataset)
kmeans = KMeans(n_clusters=3, random_state=42)
# Ajustar el modelo a los datos
kmeans.fit(df)
# Obtener las etiquetas de los clústeres
clusters = kmeans.labels_
# Añadir las etiquetas al dataframe
df['Cluster'] = clusters
print(df.head())
Salida con las etiquetas de clúster añadidas:
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | Cluster |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | 0 |
4.9 | 3.0 | 1.4 | 0.2 | 0 |
4.7 | 3.2 | 1.3 | 0.2 | 0 |
4.6 | 3.1 | 1.5 | 0.2 | 0 |
5.0 | 3.6 | 1.4 | 0.2 | 0 |
Paso 3: Visualización de los Clústeres
Visualizamos los clústeres usando las dos primeras características (longitud y ancho del sépalo).
# Visualizar los clústeres en función de las dos primeras características
plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=clusters, cmap='viridis')
plt.xlabel('Longitud del Sépalo (cm)')
plt.ylabel('Ancho del Sépalo (cm)')
plt.title('Agrupamiento K-Means de Flores Iris')
plt.show()
Esto produce un gráfico en el que los puntos de diferentes colores representan diferentes clústeres.
Paso 4: Evaluar el Resultado
Aunque en el aprendizaje no supervisado no tenemos una “verdad” conocida (es decir, etiquetas), podemos evaluar el rendimiento comparando los clústeres encontrados con las verdaderas etiquetas de las especies, solo a modo de verificación.
from sklearn.metrics import accuracy_score
import numpy as np
# Dado que los clústeres y las etiquetas pueden no coincidir en el orden, mapeamos manualmente:
true_labels = iris.target
cluster_labels = np.choose(clusters, [1, 0, 2]).astype(np.int64) # Esto alinea los clústeres con las etiquetas
# Calcular la "precisión" de los clústeres
accuracy = accuracy_score(true_labels, cluster_labels)
print(f"Precisión de los clústeres: {accuracy:.2f}")
Si obtenemos una precisión alta, podemos inferir que el algoritmo K-Means ha sido capaz de agrupar correctamente las especies de Iris basándose solo en sus características.
Conclusión
Este es un ejemplo de aprendizaje no supervisado donde:
- No hay etiquetas durante el entrenamiento, es decir, no hay información sobre la especie de la flor.
- Usamos el algoritmo de K-Means para encontrar agrupamientos en los datos basados únicamente en las características (longitud y ancho del sépalo y pétalo).
- Finalmente, verificamos los clústeres para ver si se alinean con las especies reales (aunque en un escenario real, esta verificación no sería posible sin etiquetas).
Este tipo de técnicas es útil en situaciones donde necesitamos descubrir patrones o segmentar datos sin conocer de antemano las categorías o etiquetas.