Introducció

L'optimització d'hiperparàmetres és un pas crucial en el procés de desenvolupament de models de Machine Learning. Els hiperparàmetres són paràmetres que no es poden aprendre directament dels processos d'entrenament del model, sinó que s'han de definir abans de l'entrenament. L'elecció adequada dels hiperparàmetres pot millorar significativament el rendiment del model.

Conceptes Clau

  • Hiperparàmetres: Paràmetres que es configuren abans de l'entrenament del model, com ara la taxa d'aprenentatge, el nombre de neurones en una capa oculta, o el nombre de veïns en K-NN.
  • Paràmetres del model: Paràmetres que es determinen durant l'entrenament del model, com els pesos en una xarxa neuronal.

Mètodes d'Optimització d'Hiperparàmetres

Cerca Exhaustiva (Grid Search)

La cerca exhaustiva és una tècnica que prova totes les combinacions possibles d'un conjunt predefinit de valors d'hiperparàmetres.

Exemple en Python

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier

# Definim el model
model = RandomForestClassifier()

# Definim els hiperparàmetres a provar
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10]
}

# Configuració de la cerca exhaustiva
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy')

# Entrenament del model amb cerca exhaustiva
grid_search.fit(X_train, y_train)

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

Cerca Aleatòria (Random Search)

La cerca aleatòria selecciona combinacions d'hiperparàmetres de manera aleatòria dins d'un espai de cerca predefinit.

Exemple en Python

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from scipy.stats import randint

# Definim el model
model = RandomForestClassifier()

# Definim els hiperparàmetres a provar
param_dist = {
    'n_estimators': randint(50, 200),
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': randint(2, 11)
}

# Configuració de la cerca aleatòria
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=100, cv=5, scoring='accuracy')

# Entrenament del model amb cerca aleatòria
random_search.fit(X_train, y_train)

# Millors hiperparàmetres trobats
print("Millors hiperparàmetres:", random_search.best_params_)

Optimització Bayesiana

L'optimització bayesiana utilitza models probabilístics per seleccionar els hiperparàmetres de manera més eficient que la cerca exhaustiva o aleatòria.

Exemple en Python amb scikit-optimize

from skopt import BayesSearchCV
from sklearn.ensemble import RandomForestClassifier

# Definim el model
model = RandomForestClassifier()

# Definim els hiperparàmetres a provar
param_space = {
    'n_estimators': (50, 200),
    'max_depth': (10, 30),
    'min_samples_split': (2, 10)
}

# Configuració de l'optimització bayesiana
bayes_search = BayesSearchCV(estimator=model, search_spaces=param_space, n_iter=32, cv=5, scoring='accuracy')

# Entrenament del model amb optimització bayesiana
bayes_search.fit(X_train, y_train)

# Millors hiperparàmetres trobats
print("Millors hiperparàmetres:", bayes_search.best_params_)

Exercici Pràctic

Objectiu

Optimitzar els hiperparàmetres d'un model de classificació utilitzant la cerca exhaustiva.

Passos

  1. Carrega el conjunt de dades iris de sklearn.
  2. Divideix el conjunt de dades en entrenament i prova.
  3. Defineix un model de classificació (per exemple, RandomForestClassifier).
  4. Defineix una graella de cerca per als hiperparàmetres.
  5. Utilitza GridSearchCV per trobar els millors hiperparàmetres.
  6. Avalua el model amb els millors hiperparàmetres sobre el conjunt de prova.

Codi

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Carrega el conjunt de dades
iris = load_iris()
X, y = iris.data, iris.target

# Divideix el conjunt de dades
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Defineix el model
model = RandomForestClassifier()

# Defineix la graella de cerca
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10]
}

# Configuració de la cerca exhaustiva
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy')

# Entrenament del model amb cerca exhaustiva
grid_search.fit(X_train, y_train)

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

# Avalua el model sobre el conjunt de prova
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Precisió sobre el conjunt de prova:", accuracy)

Solució

# Millors hiperparàmetres: {'max_depth': 10, 'min_samples_split': 2, 'n_estimators': 100}
# Precisió sobre el conjunt de prova: 1.0

Resum

En aquesta secció, hem explorat diverses tècniques per a l'optimització d'hiperparàmetres, incloent la cerca exhaustiva, la cerca aleatòria i l'optimització bayesiana. Hem vist exemples pràctics de com implementar aquestes tècniques en Python utilitzant scikit-learn i scikit-optimize. L'optimització d'hiperparàmetres és essencial per millorar el rendiment dels models de Machine Learning i assegurar-se que funcionen de manera òptima en tasques específiques.

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