hyperparameter_tuning
czym jest tuning hiperparametrów? ⭐
- Tuning hiperparametrów to proces znajdowania optymalnych wartości parametrów modelu.
- Hiperparametry to parametry, które są ustawiane przed trenowaniem modelu.
- Różne wartości hiperparametrów mogą znacząco wpływać na wydajność modelu.
- Celem jest znalezienie najlepszej kombinacji parametrów dla danego problemu.
metody tuningu hiperparametrów ⭐
Grid Search
- Systematyczne przeszukiwanie wszystkich kombinacji parametrów.
- Prosty, ale może być kosztowny obliczeniowo.
- Dobry dla małej liczby parametrów.
Random Search
- Losowe próbkowanie kombinacji parametrów.
- Często bardziej efektywne niż Grid Search.
- Może znaleźć dobre rozwiązania szybciej.
Bayesian Optimization
- Używa modelu prawdopodobieństwa do przewidywania najlepszych parametrów.
- Bardzo efektywny dla kosztownych funkcji celu.
- Wymaga mniej ewaluacji niż Grid/Random Search.
przykładowy kod (scikit-learn)
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score
import numpy as np
# Generowanie danych
X, y = make_classification(n_samples=1000, n_features=10, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Definicja przestrzeni parametrów
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [5, 10, 15, None],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}
# Grid Search
grid_search = GridSearchCV(
RandomForestClassifier(random_state=42),
param_grid,
cv=5,
scoring='accuracy',
n_jobs=-1
)
grid_search.fit(X_train, y_train)
print("Najlepsze parametry:", grid_search.best_params_)
print("Najlepszy score:", grid_search.best_score_)
# Random Search
from scipy.stats import randint, uniform
param_distributions = {
'n_estimators': randint(50, 300),
'max_depth': randint(3, 20),
'min_samples_split': randint(2, 20),
'min_samples_leaf': randint(1, 10)
}
random_search = RandomizedSearchCV(
RandomForestClassifier(random_state=42),
param_distributions,
n_iter=100,
cv=5,
scoring='accuracy',
random_state=42,
n_jobs=-1
)
random_search.fit(X_train, y_train)
print("Najlepsze parametry (Random):", random_search.best_params_)
print("Najlepszy score (Random):", random_search.best_score_)
praktyczne ćwiczenia
- Porównaj Grid Search z Random Search pod względem czasu i jakości wyników.
- Eksperymentuj z różnymi przestrzeniami parametrów.
- Użyj różnych metryk oceny (accuracy, f1-score, roc_auc).
- Zaimplementuj własną funkcję tuningu hiperparametrów.
- Analizuj krzywe uczenia dla różnych parametrów.
dobre praktyki
- Walidacja krzyżowa: Zawsze używaj CV do oceny parametrów.
- Przestrzeń parametrów: Definiuj rozsądne zakresy wartości.
- Czas obliczeń: Rozważ Random Search dla dużych przestrzeni.
- Overfitting: Uważaj na overfitting na zbiorze walidacyjnym.
popularne hiperparametry
Random Forest
n_estimators
: Liczba drzewmax_depth
: Maksymalna głębokość drzewmin_samples_split
: Minimalna liczba próbek do podziałumin_samples_leaf
: Minimalna liczba próbek w liściu
SVM
C
: Parametr regularizacjigamma
: Parametr jądra RBFkernel
: Typ jądra (linear, rbf, poly)
Neural Networks
learning_rate
: Szybkość uczeniabatch_size
: Rozmiar batchahidden_layer_sizes
: Rozmiary warstw ukrytych
narzędzia do tuningu
- scikit-learn: GridSearchCV, RandomizedSearchCV
- Optuna: Zaawansowane metody optymalizacji
- Hyperopt: Bayesian optimization
- Keras Tuner: Dla sieci neuronowych
polecane źródła
- Hyperparameter Tuning – scikit-learn
- Hyperparameter Tuning Guide – Towards Data Science
- Grid Search vs Random Search – StatQuest (YouTube)
- Hyperparameter Optimization Tutorial – Machine Learning Mastery