Librería Open-Source
Sklearn Genetic Opt
Ajusta hiperparámetros de scikit-learn y selecciona características con algoritmos evolutivos. Incluye validación cruzada y ejemplos con pipelines.

El problema que resuelve
La búsqueda de hiperparámetros puede consumir una parte considerable del presupuesto de entrenamiento. Su coste depende del estimador, los datos, las configuraciones candidatas y los folds de validación cruzada.
Con cinco hiperparámetros y diez valores candidatos cada uno, grid search prueba 100.000 configuraciones. Una validación cruzada de cinco folds requeriría 500.000 entrenamientos antes del ajuste final. Ese coste puede ser poco práctico para algunos datos y modelos.
Random search muestrea un número elegido de configuraciones y sigue siendo una referencia útil. La búsqueda evolutiva ofrece otro enfoque: usa evaluaciones anteriores para evolucionar una población de candidatos. Compara los métodos con el mismo presupuesto de evaluación; ninguno gana en todos los problemas.
Qué Construí
sklearn-genetic-opt representa cada configuración como un individuo en una población. Evalúa los candidatos mediante validación cruzada y usa selección, cruzamiento y mutación para generar nuevas configuraciones.
La librería expone dos estimadores:
GASearchCV: busca hiperparámetros para estimadores y pipelines compatibles con scikit-learnGAFeatureSelectionCV: evalúa subconjuntos de características para un estimador
Ambos siguen el patrón .fit() de scikit-learn y permiten obtener el estimador reajustado en .best_estimator_. GASearchCV expone los hiperparámetros elegidos en .best_params_; GAFeatureSelectionCV, las características seleccionadas en .support_. La configuración incluye parámetros propios de la evolución.
Búsqueda evolutiva con DEAP
DEAP proporciona los operadores evolutivos. El estimador de scikit-learn y la métrica elegida determinan cómo se evalúa cada candidato.
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)
Integer, Continuous y Categorical definen los valores permitidos para cada parámetro. Por ejemplo, Continuous(0.001, 0.3) permite muestrear dentro de ese intervalo sin enumerar una lista de valores.
Configuración y resultados
Después de entrenar, puedes consultar la mejor configuración y el estimador reajustado con los atributos habituales de scikit-learn. Revisa los resultados de validación cruzada para comparar candidatos y usa datos separados para la evaluación final.
Las clases adaptadoras permiten variar las probabilidades de cruzamiento y mutación entre generaciones. Elige el esquema según tu presupuesto y compara sus resultados con probabilidades fijas; un esquema adaptativo no garantiza evitar la convergencia prematura.
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.
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")
Evalúa la selección de características dentro de la validación cruzada para evitar que la selección use información del conjunto de prueba. Compara el resultado con el mismo estimador entrenado con todas las características.
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.
El repositorio incluye el código y las pruebas. La documentación contiene la referencia de la API y ejemplos para reproducir búsquedas y selección de características.
Llevemos tu idea a la práctica.
Si estás construyendo una plataforma de IA o de datos, cuéntame el contexto de tu proyecto.