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é
- W&B excelle dans la visualisation avec des tableaux de bord interactifs
- Les balayages automatisent l'optimisation des hyperparamètres avec des méthodes bayésiennes
- Les artéfacts suivent les jeux de données et les modèles avec la traçabilité
- Les tables permettent une exploration riche des données dans l'interface utilisateur
- Les rapports facilitent la collaboration en équipe
Suivant : Chapitre 3 : Comparaison des expériences