Przejdź do głównej zawartości

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 ⭐

  • Systematyczne przeszukiwanie wszystkich kombinacji parametrów.
  • Prosty, ale może być kosztowny obliczeniowo.
  • Dobry dla małej liczby parametrów.
  • 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 drzew
  • max_depth: Maksymalna głębokość drzew
  • min_samples_split: Minimalna liczba próbek do podziału
  • min_samples_leaf: Minimalna liczba próbek w liściu

SVM

  • C: Parametr regularizacji
  • gamma: Parametr jądra RBF
  • kernel: Typ jądra (linear, rbf, poly)

Neural Networks

  • learning_rate: Szybkość uczenia
  • batch_size: Rozmiar batcha
  • hidden_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