Saltar al contenido principal

Capítulo 2: Pesos y Sesgos

Introducción a W&B​

Weights & Biases (W&B) es una potente plataforma de MLOps para el seguimiento de experimentos, versionado de conjuntos de datos y gestión de modelos, con excelentes capacidades de visualización.

Configuración e instalación​

# Install
pip install wandb

# Login
wandb login

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

Seguimiento básico de experimentos​

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()

Barridos de hiperparámetros​

# 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)

Artefactos de 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()

Tablas de W&B para visualización de datos​

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)})

Puntos clave​

Summary
  1. W&B sobresale en visualización con paneles interactivos
  2. Los barridos automatizan la optimización de hiperparámetros con métodos bayesianos
  3. Los artefactos rastrean conjuntos de datos y modelos con trazabilidad
  4. Las tablas permiten una exploración de datos enriquecida en la interfaz de usuario
  5. Los informes facilitan la colaboración en equipo

Siguiente: Capítulo 3: Comparación de experimentos