Quand utiliser les algorithmes génétiques
- Problèmes combinatoires (sélection de features, planification)
- Fonctions objectif non différentiables
- Espaces de recherche multimodaux
- Quand l'optimisation bayésienne est trop coûteuse
Sélection de features avec GA
from deap import base, creator, tools, algorithms
# Genome: binary vector (1=feature included, 0=excluded)
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
def evaluate(individual):
selected_features = [i for i, v in enumerate(individual) if v == 1]
if not selected_features: return (0.0,)
X_sel = X_train[:, selected_features]
score = cross_val_score(model, X_sel, y_train, cv=3).mean()
# Penalize using too many features
penalty = len(selected_features) / len(individual) * 0.05
return (score - penalty,)
Paramètres clés
- Population : 50-200 individus
- Taux de mutation : 0.01-0.05 par gène
- Taux de croisement : 0.7-0.9
- Générations : 100-500 (arrêt anticipé sur plateau)