ScikitLearn: Aprendizaje no supervisado
El aprendizaje no supervisado se concentra en descubrir patrones, estructuras o relaciones en los datos sin contar con etiquetas o valores objetivo. En scikit learn, esta clase de técnicas se emplean para tareas como clustering, reducción de dimensionalidad y métodos de densidad, brindando herramientas que simplifican la búsqueda de agrupaciones o la extracción de información relevante.
A diferencia de los métodos supervisados, no existe una variable de destino predefinida, por lo que el entrenamiento se basa exclusivamente en la similitud y distribución de las características. Estas técnicas resultan especialmente útiles para la exploración de datos, la segmentación de clientes, la detección de anomalías o la compresión de información.
Los algoritmos de clustering son un pilar del aprendizaje no supervisado. El submódulo sklearn.cluster
incluye métodos como KMeans
, DBSCAN
o AgglomerativeClustering
, que difieren en su concepción de proximidad y en cómo forman las agrupaciones.
- KMeans: Divide el conjunto en k conglomerados, asignando cada muestra al centroide más cercano.
- DBSCAN: Basa la agrupación en la densidad local de los puntos, lo que permite detectar estructuras arbitrarias y manejar ruido sin necesidad de especificar k.
- AgglomerativeClustering: Crea una jerarquía de clusters mediante un proceso de fusión progresiva de grupos, resultando en dendrogramas que describen la relación entre conglomerados.
Un ejemplo de KMeans puede lucir así:
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_
Aquí, cada fila del array X
se asocia a uno de los tres grupos. El número de clusters se elige de manera heurística o mediante criterios como el método del codo (elbow method).
En cuanto a DBSCAN, ajusta la cantidad de clusters en función de dos parámetros esenciales: eps
(radio de vecindad) y min_samples
(umbral de puntos dentro de la vecindad). Este procedimiento no requiere conocer el número de grupos a priori.
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X)
labels_db = dbscan.labels_
Un valor de -1
en labels_db
indica puntos considerados ruido y no asignados a ningún grupo.
Otro ámbito relevante del aprendizaje no supervisado es la reducción de dimensionalidad, con métodos como PCA
(análisis de componentes principales), TruncatedSVD
o FactorAnalysis
. En el submódulo sklearn.decomposition
, se combinan distintas técnicas enfocadas a la extracción de factores latentes y la compresión de grandes volúmenes de datos.
PCA
descompone la matriz de características en componentes ortogonales, ordenadas según la varianza que explican. Con ello, se pueden representar muchos atributos originales en un menor número de dimensiones, preservando la mayor parte de la información. Un ejemplo:
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)
Esta instrucción reduce las características de X
a dos componentes principales, lo que facilita la visualización y la exploración.
En problemas donde la matriz de características es muy grande y dispersa (como en el procesamiento de texto), TruncatedSVD
puede resultar conveniente, pues maneja con eficiencia estructuras escasas y evita costos de memoria.
Los métodos basados en densidad y estimación de distribución, presentes en submódulos como sklearn.mixture
, permiten modelar la distribución de los datos para inferir a qué componente pertenecen o el grado de pertenencia a distintos grupos. GaussianMixture
sirve como alternativa probabilística a KMeans
, dado que estima componentes gaussianas en lugar de centroides puntuales.
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=3, covariance_type='full', random_state=42)
gmm.fit(X)
labels_gmm = gmm.predict(X)
La interpretación de los resultados se lleva a cabo mediante la visualización de la probabilidad de pertenencia de cada punto a las distintas gausianas, lo que aporta más flexibilidad que los métodos de agrupación estricta.
La evaluación de algoritmos no supervisados puede ser compleja, pues no hay etiquetas para comparar. Aun así, se miden criterios internos como la inercia (en KMeans), la silueta (Silhouette Score) o la cohesión de los grupos, junto con métodos externos cuando se dispone de un etiquetado parcial. El módulo sklearn.metrics
ofrece funciones como silhouette_score
o calinski_harabasz_score
que ayudan a cuantificar la calidad de los clusters.
from sklearn.metrics import silhouette_score
score = silhouette_score(X, labels)
print("Índice de silueta:", score)
Cuanto mayor sea el valor, más diferenciados están los clusters respecto a sus vecinos.
El procesamiento de datos antes de aplicar métodos de agrupación o reducción de dimensionalidad resulta vital. A menudo se recurre a la normalización o al escalado con StandardScaler
y a la selección de variables relevantes para evitar ruidos que obstaculicen la detección de patrones. Este flujo se integra fácilmente en un Pipeline
, lo que garantiza la consistencia de cada etapa y la reproducibilidad de los resultados.
Por último, la implementación de estas técnicas no supervisadas en scikit learn se caracteriza por la misma interfaz simple: instanciación, ajuste con fit
o fit_transform
y posterior uso con métodos como predict
. A su vez, la compatibilidad con estructuras de NumPy y pandas posibilita encadenar distintos pasos con la misma lógica ordenada. Estas herramientas permiten abordar proyectos de minería de datos, agrupación de imágenes o segmentación de clientes, sin tener que construir el ecosistema desde cero y con la garantía de un enfoque modular y bien documentado.
Lecciones de este módulo de ScikitLearn
Lecciones de programación del módulo Aprendizaje no supervisado del curso de ScikitLearn.
Ejercicios de programación en este módulo de ScikitLearn
Evalúa tus conocimientos en Aprendizaje no supervisado con ejercicios de programación Aprendizaje no supervisado de tipo Test, Puzzle, Código y Proyecto con VSCode.