oc_p5-dev / examples /01_find_best_model.py
ASI-Engineer's picture
Upload folder using huggingface_hub
aac75d5 verified
raw
history blame
3.34 kB
#!/usr/bin/env python3
"""
Exemple 1 : Trouver le meilleur modèle dans MLflow
Usage: python examples/01_find_best_model.py
"""
import mlflow
from mlflow.tracking import MlflowClient
# Configuration
mlflow.set_tracking_uri("sqlite:///mlflow.db")
client = MlflowClient()
def find_best_model(experiment_name="Default", metric="cv_f1"):
"""Trouve le meilleur modèle basé sur une métrique."""
print(f"🔍 Recherche du meilleur modèle dans '{experiment_name}'...")
print(f"📊 Métrique d'optimisation : {metric}\n")
# Récupérer l'expérience
experiment = client.get_experiment_by_name(experiment_name)
if not experiment:
print(f"❌ Expérience '{experiment_name}' introuvable")
return None
# Rechercher tous les runs
runs = client.search_runs(
experiment_ids=[experiment.experiment_id],
filter_string="", # Pas de filtre
order_by=[f"metrics.{metric} DESC"],
max_results=5, # Top 5
)
if not runs:
print(f"❌ Aucun run trouvé")
return None
print(f"📈 Top 5 des modèles :\n")
print(f"{'Rank':<6} {'Run ID':<35} {metric:<12} {'Date':<20}")
print("-" * 75)
for i, run in enumerate(runs, 1):
metric_value = run.data.metrics.get(metric, 0.0)
timestamp = run.info.start_time
from datetime import datetime
date_str = datetime.fromtimestamp(timestamp / 1000).strftime("%Y-%m-%d %H:%M")
print(f"{i:<6} {run.info.run_id:<35} {metric_value:<12.4f} {date_str:<20}")
# Meilleur modèle
best_run = runs[0]
best_metric = best_run.data.metrics.get(metric, 0.0)
print(f"\n🏆 Meilleur modèle :")
print(f" Run ID : {best_run.info.run_id}")
print(f" {metric:<10}: {best_metric:.4f}")
print(f" Status : {best_run.info.status}")
# Afficher les hyperparamètres
print(f"\n⚙️ Hyperparamètres :")
for key, value in best_run.data.params.items():
print(f" {key:<25} : {value}")
# Afficher toutes les métriques
print(f"\n📊 Métriques :")
for key, value in best_run.data.metrics.items():
print(f" {key:<25} : {value:.4f}")
return best_run.info.run_id
def load_best_model(run_id):
"""Charge le modèle à partir d'un run_id."""
print(f"\n📦 Chargement du modèle...")
model_uri = f"runs:/{run_id}/model"
try:
model = mlflow.sklearn.load_model(model_uri)
print(f"✅ Modèle chargé avec succès")
print(f" Type : {type(model).__name__}")
# Afficher la pipeline si c'est une Pipeline
if hasattr(model, "steps"):
print(f" Pipeline steps :")
for name, step in model.steps:
print(f" - {name}: {type(step).__name__}")
return model
except Exception as e:
print(f"❌ Erreur lors du chargement : {e}")
return None
if __name__ == "__main__":
# Trouver le meilleur modèle
best_run_id = find_best_model("Default", "cv_f1")
if best_run_id:
# Charger le modèle
model = load_best_model(best_run_id)
if model:
print(f"\n💡 Pour utiliser ce modèle dans ton API :")
print(f" model_uri = 'runs:/{best_run_id}/model'")
print(f" model = mlflow.sklearn.load_model(model_uri)")