Librería Open-Source
Python
scikit-learn
Algoritmos Genéticos
AutoML
Selección de Características
Hiperparámetros

Sklearn Genetic Opt

Librería compatible con scikit-learn para ajuste de hiperparámetros y selección de características con algoritmos evolutivos — reemplazo directo de GridSearchCV para pipelines de ML en producción.

1 de marzo de 2022·4 min read
Sklearn Genetic Opt

El Problema que Resuelve

En trabajo de consultoría de ML, la optimización de hiperparámetros aparece consistentemente como una de las fases más costosas en tiempo — no porque el problema sea conceptualmente difícil, sino porque las herramientas estándar no escalan.

La búsqueda en grilla evalúa cada combinación de forma exhaustiva. Con cinco hiperparámetros y diez valores candidatos cada uno, eso son 100.000 evaluaciones de validación cruzada. En la práctica, simplemente no termina de ejecutarse en modelos reales.

La búsqueda aleatoria mejora el rendimiento, pero trata el espacio de búsqueda como una caja negra: muestrea ciegamente, no aprende de resultados anteriores y depende de la suerte más que de la estrategia.

El problema de fondo es que ambos enfoques fueron diseñados para espacios de búsqueda pequeños y bien entendidos. Los pipelines en producción tienen rutinariamente pasos de preprocesamiento, estimadores personalizados y seis o más hiperparámetros en interacción. Las herramientas estándar fallan exactamente donde una buena optimización importa más.

Qué Construí

sklearn-genetic-opt aplica algoritmos evolutivos al problema de búsqueda de hiperparámetros. El algoritmo trata cada configuración como un individuo en una población, evalúa la aptitud mediante validación cruzada, y evoluciona hacia mejores soluciones a través de generaciones — asignando más presupuesto de búsqueda a las regiones prometedoras del espacio de parámetros, no a esquinas aleatorias del mismo.

La librería expone dos estimadores:

  • GASearchCV — evoluciona configuraciones de hiperparámetros para cualquier estimador, pipeline o función personalizada de scikit-learn
  • GAFeatureSelectionCV — evoluciona qué subconjuntos de características incluir, optimizando el rendimiento del modelo resultante

Ambos están diseñados como reemplazos directos de GridSearchCV y RandomizedSearchCV. Si ya usaste la API de búsqueda de sklearn, ya sabes cómo usar esta librería.

Una Búsqueda que Aprende

La diferencia central con la búsqueda aleatoria es que sklearn-genetic-opt usa el framework evolutivo DEAP para ejecutar búsqueda genética real — no muestreo aleatorio con un nombre más elegante.

python
from sklearn_genetic import GASearchCV, EvolutionConfig, RuntimeConfig
from sklearn_genetic.space import Integer, Continuous, Categorical
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

pipeline = Pipeline([
    ("scaler", StandardScaler()),
    ("clf", GradientBoostingClassifier()),
])

param_grid = {
    "clf__n_estimators": Integer(50, 500),
    "clf__max_depth": Integer(2, 12),
    "clf__learning_rate": Continuous(0.001, 0.3),
    "clf__subsample": Continuous(0.5, 1.0),
    "clf__max_features": Categorical(["sqrt", "log2", None]),
}

search = GASearchCV(
    estimator=pipeline,
    cv=5,
    scoring="roc_auc",
    param_grid=param_grid,
    evolution_config=EvolutionConfig(
        population_size=25,
        generations=50,
    ),
    runtime_config=RuntimeConfig(n_jobs=-1),
)
search.fit(X_train, y_train)

Las primitivas tipadas del espacio de búsqueda — Integer, Continuous, Categorical — definen el rango válido para cada parámetro. Continuous permite al algoritmo explorar valores flotantes que una grilla nunca muestraría; los operadores genéticos (cruzamiento, mutación) respetan estos tipos durante la evolución.

Por Qué la API Luce Así

Cada decisión de diseño en la librería priorizó la adopción sobre la novedad.

Los usuarios de sklearn ya conocen el patrón .fit() / .best_params_ / .best_estimator_. Exigirles aprender una nueva interfaz para obtener mejor búsqueda eliminaría la mayor parte del beneficio práctico. La API refleja deliberadamente a GridSearchCV para que los equipos puedan usarla con mínima fricción.

El espacio de búsqueda tipado también fue una desviación deliberada del patrón de listas de valores. Especificar Continuous(0.001, 0.3) en lugar de [0.001, 0.01, 0.05, 0.1, 0.2, 0.3] elimina el supuesto implícito de que el óptimo cae en uno de seis valores predefinidos. Los operadores genéticos pueden aterrizar en cualquier punto del rango continuo.

Para búsquedas más largas, la librería incluye clases adaptadoras que programan las probabilidades de mutación y cruzamiento dinámicamente a través de las generaciones — mutación alta al inicio (exploración amplia), mutación baja al final (refinamiento local alrededor de los mejores candidatos encontrados). Esto aborda el problema de convergencia prematura que causan los esquemas de probabilidad fijos en espacios de búsqueda grandes.

Selección de Características como Optimización

El mismo motor evolutivo maneja la selección de características. En lugar de buscar en el espacio de hiperparámetros, GAFeatureSelectionCV busca en el espacio de posibles subconjuntos de características — cada individuo es una máscara binaria sobre las columnas.

python
from sklearn_genetic import GAFeatureSelectionCV, EvolutionConfig
from sklearn.linear_model import LogisticRegression

selector = GAFeatureSelectionCV(
    estimator=LogisticRegression(max_iter=1000),
    cv=5,
    scoring="roc_auc",
    evolution_config=EvolutionConfig(
        population_size=30,
        generations=40,
    ),
)
selector.fit(X_train, y_train)

X_reducido = selector.transform(X_test)
print(f"Seleccionadas {selector.support_.sum()} de {X_train.shape[1]} características")

Esto importa en datasets de alta dimensionalidad donde la correlación entre características hace poco confiable la selección manual, y donde el rendimiento del modelo depende de qué subconjunto específico se pasa — no solo de las importancias individuales de cada variable.

Estado Actual

sklearn-genetic-opt ha sido desarrollada activamente desde 2020 y actualmente está en v0.13.1. Está publicada en PyPI, completamente documentada en sklearngeneticopt.rodrigo-arenas.com y abierta a contribuciones.

La librería es parte de un conjunto más amplio de herramientas que he construido alrededor del ML en producción — los mismos problemas que siguen apareciendo en proyectos de consultoría: búsqueda que escala, características que generalizan, pipelines que se pueden ajustar y desplegar.


Sobre el autor

Rodrigo Arenas es arquitecto de software e ingeniero de machine learning en Medellín, Colombia. Construye productos, plataformas y software open source para IA, Data Engineering y Machine Learning — es el creador de Ciaren, sklearn-genetic-opt y PyWorkforce.



Rodrigo Arenas — ML Engineer & Open Source Maintainer

¿Estás trabajando en algo similar? Puedo ayudarte a llevarlo a producción.

¿Vas a construir una plataforma de IA o de datos?

Productos, plataformas y software open source para IA, Data Engineering y Machine Learning.

Ver proyectos
Visión

Construyendo un ecosistema de productos y software open source para IA, Data Engineering y Machine Learning.

Proyectos
sklearn-genetic-optPyWorkforceCiaren

Iterixs (En construcción)

© 2026 Rodrigo Arenas