En aquest tema, ens centrarem en les tècniques i mètodes per ajustar i optimitzar models d'anàlisi de dades. L'objectiu és millorar la precisió i l'eficiència dels models per obtenir resultats més fiables i útils.

Objectius d'Aprenentatge

  • Comprendre la importància de l'ajust i l'optimització de models.
  • Aprendre tècniques comunes per ajustar models.
  • Conèixer mètodes d'optimització de models.
  • Aplicar aquestes tècniques en exemples pràctics.

  1. Importància de l'Ajust i l'Optimització de Models

L'ajust i l'optimització de models són processos essencials per assegurar que els models estadístics i de machine learning funcionin de manera òptima. Aquests processos permeten:

  • Millorar la precisió: Reduir els errors de predicció.
  • Evitar el sobreajustament (overfitting): Assegurar que el model generalitzi bé a noves dades.
  • Augmentar l'eficiència: Reduir el temps de càlcul i els recursos necessaris.

  1. Tècniques d'Ajust de Models

2.1. Regularització

La regularització és una tècnica per prevenir el sobreajustament afegint una penalització a la funció de pèrdua del model. Les dues tècniques més comunes són:

  • Ridge Regression (L2 Regularization): Penalitza la suma dels quadrats dels coeficients.
  • Lasso Regression (L1 Regularization): Penalitza la suma dels valors absoluts dels coeficients.

Exemple de Regularització en Python

from sklearn.linear_model import Ridge, Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Suposem que tenim les dades X i y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Ridge Regression
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
y_pred_ridge = ridge.predict(X_test)
print("Ridge Regression MSE:", mean_squared_error(y_test, y_pred_ridge))

# Lasso Regression
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
y_pred_lasso = lasso.predict(X_test)
print("Lasso Regression MSE:", mean_squared_error(y_test, y_pred_lasso))

2.2. Selecció de Característiques

La selecció de característiques implica triar les variables més rellevants per al model, reduint la complexitat i millorant la precisió.

Exemple de Selecció de Característiques en Python

from sklearn.feature_selection import SelectKBest, f_regression

# Selecció de les millors 10 característiques
selector = SelectKBest(score_func=f_regression, k=10)
X_new = selector.fit_transform(X, y)

  1. Mètodes d'Optimització de Models

3.1. Optimització d'Hiperparàmetres

L'optimització d'hiperparàmetres consisteix a trobar els millors valors per als paràmetres que no es poden aprendre directament dels dades. Les tècniques més comunes són:

  • Grid Search: Prova exhaustiva de totes les combinacions possibles d'hiperparàmetres.
  • Random Search: Prova aleatòria d'un subconjunt d'hiperparàmetres.

Exemple d'Optimització d'Hiperparàmetres en Python

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestRegressor

# Definició del model
model = RandomForestRegressor()

# Definició del grid d'hiperparàmetres
param_grid = {
    'n_estimators': [100, 200, 300],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10]
}

# Grid Search
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

print("Millors hiperparàmetres:", grid_search.best_params_)

3.2. Validació Creuada

La validació creuada és una tècnica per avaluar la capacitat de generalització del model. La més comuna és la validació creuada k-fold, on les dades es divideixen en k subconjunts i el model es valida k vegades, utilitzant cada subconjunt com a conjunt de validació una vegada.

Exemple de Validació Creuada en Python

from sklearn.model_selection import cross_val_score

# Validació creuada k-fold amb k=5
scores = cross_val_score(model, X, y, cv=5, scoring='neg_mean_squared_error')
print("MSE mitjà:", -scores.mean())

Exercici Pràctic

Exercici

  1. Utilitza el conjunt de dades diabetes de la llibreria sklearn.datasets.
  2. Divideix les dades en conjunts de formació i prova.
  3. Aplica Ridge Regression i Lasso Regression.
  4. Realitza una optimització d'hiperparàmetres per a Ridge Regression utilitzant Grid Search.
  5. Avalua el model utilitzant validació creuada k-fold.

Solució

from sklearn.datasets import load_diabetes
from sklearn.linear_model import Ridge, Lasso
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn.metrics import mean_squared_error

# Carregar dades
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target

# Dividir dades
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Ridge Regression
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
y_pred_ridge = ridge.predict(X_test)
print("Ridge Regression MSE:", mean_squared_error(y_test, y_pred_ridge))

# Lasso Regression
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
y_pred_lasso = lasso.predict(X_test)
print("Lasso Regression MSE:", mean_squared_error(y_test, y_pred_lasso))

# Optimització d'Hiperparàmetres per a Ridge Regression
param_grid = {'alpha': [0.1, 1.0, 10.0, 100.0]}
grid_search = GridSearchCV(estimator=Ridge(), param_grid=param_grid, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)
print("Millors hiperparàmetres per a Ridge:", grid_search.best_params_)

# Validació Creuada
ridge_best = Ridge(alpha=grid_search.best_params_['alpha'])
scores = cross_val_score(ridge_best, X, y, cv=5, scoring='neg_mean_squared_error')
print("MSE mitjà amb Ridge optimitzat:", -scores.mean())

Conclusió

En aquesta secció, hem après la importància de l'ajust i l'optimització de models per millorar la seva precisió i eficiència. Hem explorat tècniques com la regularització, la selecció de característiques, l'optimització d'hiperparàmetres i la validació creuada. Aquests mètodes són essencials per desenvolupar models robustos i fiables en l'anàlisi de dades.

© Copyright 2024. Tots els drets reservats