Aller au contenu principal

Chapitre 2 : Poids et biais

Introduction à W&B​

Weights & Biases (W&B) est une plateforme MLOps puissante pour le suivi des expériences, la gestion des versions de jeux de données et la gestion des modèles avec d'excellentes capacités de visualisation.

Configuration et installation​

# Install
pip install wandb

# Login
wandb login

# Or set API key
export WANDB_API_KEY="your-api-key"

Suivi de base des expériences​

import wandb
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, roc_auc_score

# Initialize a run
wandb.init(
project="customer-churn",
name="rf-baseline",
config={
"n_estimators": 100,
"max_depth": 10,
"learning_rate": 0.1,
"dataset": "v2.0"
}
)

# Access config
config = wandb.config

# Train model
model = RandomForestClassifier(
n_estimators=config.n_estimators,
max_depth=config.max_depth
)
model.fit(X_train, y_train)

# Log metrics
accuracy = accuracy_score(y_test, model.predict(X_test))
auc = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])

wandb.log({
"accuracy": accuracy,
"auc_roc": auc,
"epoch": 1
})

# Finish run
wandb.finish()

Balayages d'hyperparamètres​

# Define sweep configuration
sweep_config = {
"method": "bayes", # grid, random, bayes
"metric": {"name": "auc_roc", "goal": "maximize"},
"parameters": {
"n_estimators": {"values": [100, 200, 300]},
"max_depth": {"min": 5, "max": 20},
"min_samples_split": {"values": [2, 5, 10]},
"learning_rate": {"distribution": "log_uniform_values", "min": 0.001, "max": 0.1}
}
}

# Create sweep
sweep_id = wandb.sweep(sweep_config, project="customer-churn")

# Training function
def train():
wandb.init()
config = wandb.config

model = GradientBoostingClassifier(
n_estimators=config.n_estimators,
max_depth=config.max_depth,
learning_rate=config.learning_rate
)
model.fit(X_train, y_train)

auc = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
wandb.log({"auc_roc": auc})

# Run sweep
wandb.agent(sweep_id, train, count=50)

Artéfacts W&B​

# Log dataset as artifact
artifact = wandb.Artifact("training-data", type="dataset")
artifact.add_file("data/train.csv")
artifact.add_dir("data/features/")
wandb.log_artifact(artifact)

# Log model as artifact
model_artifact = wandb.Artifact("churn-model", type="model")
model_artifact.add_file("models/model.pkl")
wandb.log_artifact(model_artifact)

# Use artifact in another run
wandb.init(project="customer-churn")
artifact = wandb.use_artifact("training-data:latest")
artifact_dir = artifact.download()

Tables W&B pour la visualisation des données​

import wandb
import pandas as pd

wandb.init(project="customer-churn")

# Create a W&B Table
table = wandb.Table(dataframe=df.head(100))
wandb.log({"data_sample": table})

# Log predictions table
predictions_df = pd.DataFrame({
"customer_id": test_ids,
"actual": y_test,
"predicted": predictions,
"probability": probabilities
})
wandb.log({"predictions": wandb.Table(dataframe=predictions_df)})

Points clés à retenir​

Résumé
  1. W&B excelle dans la visualisation avec des tableaux de bord interactifs
  2. Les balayages automatisent l'optimisation des hyperparamètres avec des méthodes bayésiennes
  3. Les artéfacts suivent les jeux de données et les modèles avec la traçabilité
  4. Les tables permettent une exploration riche des données dans l'interface utilisateur
  5. Les rapports facilitent la collaboration en équipe

Suivant : Chapitre 3 : Comparaison des expériences