Introducció

Gradient Boosting és una tècnica de Machine Learning que combina múltiples models febles, normalment arbres de decisió, per crear un model fort que millora iterativament el seu rendiment. Aquesta tècnica és molt popular en competicions de dades i aplicacions del món real degut a la seva capacitat per manejar dades complexes i obtenir resultats precisos.

Conceptes Clau

  1. Model feble (Weak Learner): Un model que té un rendiment lleugerament millor que l'atzar.
  2. Boosting: Una tècnica que combina múltiples models febles per crear un model fort.
  3. Gradient Descent: Un mètode d'optimització utilitzat per minimitzar una funció de pèrdua ajustant els paràmetres del model.

Funcionament del Gradient Boosting

  1. Inicialització: Comença amb un model inicial, sovint un arbre de decisió simple.
  2. Iteració: En cada iteració, es construeix un nou model feble que intenta corregir els errors del model anterior.
  3. Actualització: Els models es combinen ajustant els pesos dels errors per minimitzar la funció de pèrdua utilitzant gradient descent.
  4. Predicció Final: La predicció final és la suma ponderada de les prediccions de tots els models febles.

Algorisme

  1. Inicialitza el model amb una predicció constant, \( F_0(x) \).
  2. Per a cada iteració \( m \) fins a \( M \):
    • Calcula els residus \( r_{i}^{(m)} = y_i - F_{m-1}(x_i) \) per a cada mostra \( i \).
    • Ajusta un nou model feble \( h_m(x) \) als residus.
    • Actualitza el model: \( F_m(x) = F_{m-1}(x) + \gamma h_m(x) \), on \( \gamma \) és la taxa d'aprenentatge.
  3. La predicció final és \( F_M(x) \).

Exemple Pràctic

A continuació es mostra un exemple de Gradient Boosting utilitzant Python i la biblioteca scikit-learn.

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error

# Generar dades sintètiques
X, y = make_regression(n_samples=1000, n_features=20, noise=0.1)

# Dividir les dades en entrenament i prova
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear el model de Gradient Boosting
model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)

# Entrenar el model
model.fit(X_train, y_train)

# Fer prediccions
y_pred = model.predict(X_test)

# Avaluar el model
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")

Explicació del Codi

  1. Generació de Dades: Utilitzem make_regression per crear un conjunt de dades sintètiques per a un problema de regressió.
  2. Divisió de Dades: Dividim les dades en conjunts d'entrenament i prova.
  3. Creació del Model: Creem un model de GradientBoostingRegressor amb 100 estimadors, una taxa d'aprenentatge de 0.1 i una profunditat màxima dels arbres de 3.
  4. Entrenament del Model: Entrenem el model amb les dades d'entrenament.
  5. Predicció i Avaluació: Fem prediccions amb les dades de prova i calculem l'error quadràtic mitjà (MSE) per avaluar el rendiment del model.

Exercici Pràctic

Enunciat

Utilitza el conjunt de dades Boston Housing disponible a scikit-learn per entrenar un model de Gradient Boosting que prediu el preu de les cases. Avaluar el model utilitzant l'error quadràtic mitjà (MSE).

Solució

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error

# Carregar el conjunt de dades Boston Housing
boston = load_boston()
X, y = boston.data, boston.target

# Dividir les dades en entrenament i prova
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear el model de Gradient Boosting
model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)

# Entrenar el model
model.fit(X_train, y_train)

# Fer prediccions
y_pred = model.predict(X_test)

# Avaluar el model
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")

Explicació del Codi

Aquest codi segueix els mateixos passos que l'exemple anterior, però utilitza el conjunt de dades Boston Housing per predir els preus de les cases.

Errors Comuns i Consells

  1. Overfitting: Utilitzar un nombre massa gran d'estimadors o una profunditat massa gran pot conduir a sobreajustament. Utilitza tècniques com la validació creuada per ajustar els hiperparàmetres.
  2. Taxa d'Aprenentatge: Una taxa d'aprenentatge massa alta pot fer que el model no convergeixi. Prova diferents valors per trobar el millor.
  3. Dades No Normalitzades: Assegura't que les dades estiguin normalitzades o estandarditzades per millorar el rendiment del model.

Conclusió

Gradient Boosting és una tècnica poderosa per millorar el rendiment dels models de Machine Learning combinant múltiples models febles. Amb una comprensió sòlida dels seus conceptes i una implementació acurada, pots aplicar aquesta tècnica per resoldre problemes complexos i obtenir resultats precisos.

Curs de Machine Learning

Mòdul 1: Introducció al Machine Learning

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algoritmes de Machine Learning Supervisat

Mòdul 5: Algoritmes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2024. Tots els drets reservats