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
- Carrega el conjunt de dades
iris
desklearn
. - Divideix el conjunt de dades en entrenament i prova.
- Defineix un model de classificació (per exemple,
RandomForestClassifier
). - Defineix una graella de cerca per als hiperparàmetres.
- Utilitza
GridSearchCV
per trobar els millors hiperparàmetres. - 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
- Què és el Machine Learning?
- Història i evolució del Machine Learning
- Tipus de Machine Learning
- Aplicacions del Machine Learning
Mòdul 2: Fonaments d'Estadística i Probabilitat
- Conceptes bàsics d'estadística
- Distribucions de probabilitat
- Inferència estadística
- Teorema de Bayes
Mòdul 3: Preprocessament de Dades
Mòdul 4: Algoritmes de Machine Learning Supervisat
- Regressió lineal
- Regressió logística
- Arbres de decisió
- Màquines de suport vectorial (SVM)
- K-Veïns més propers (K-NN)
- Xarxes neuronals
Mòdul 5: Algoritmes de Machine Learning No Supervisat
- Clustering: K-means
- Clustering jeràrquic
- Anàlisi de components principals (PCA)
- Anàlisi d'agrupament DBSCAN
Mòdul 6: Avaluació i Validació de Models
Mòdul 7: Tècniques Avançades i Optimització
- Ensemble Learning
- Gradient Boosting
- Xarxes neuronals profundes (Deep Learning)
- Optimització d'hiperparàmetres
Mòdul 8: Implementació i Desplegament de Models
- Frameworks i biblioteques populars
- Implementació de models en producció
- Manteniment i monitoratge de models
- Consideracions ètiques i de privacitat
Mòdul 9: Projectes Pràctics
- Projecte 1: Predicció de preus d'habitatges
- Projecte 2: Classificació d'imatges
- Projecte 3: Anàlisi de sentiments a xarxes socials
- Projecte 4: Detecció de fraus