Grid Search vs Random Search vs Bayesian Optimization – porównanie na praktycznych przykładach

Porównanie Grid Search, Random Search i Bayesian Optimization w strojenie hiperparametrów – teoria i praktyka z kodem w Pythonie.
23 października 2025
blog
Poziom: Średnio zaawansowany

Artykuł przeznaczony dla osób uczących się uczenia maszynowego oraz praktyków pracujących w Pythonie, którzy chcą dobrać i porównać metody strojenia hiperparametrów.

Z tego artykułu dowiesz się

  • Czym są hiperparametry i jak ich dobór wpływa na overfitting, underfitting oraz jakość predykcji?
  • Jak działają Grid Search, Random Search i Bayesian Optimization oraz jakie mają zalety i wady?
  • Kiedy wybrać każdą z metod strojenia hiperparametrów i jak zaimplementować je w Pythonie (scikit-learn, scikit-optimize, optuna)?

Wprowadzenie do strojenia hiperparametrów

Strojenie hiperparametrów to kluczowy etap procesu budowy modeli uczenia maszynowego, który może znacząco wpłynąć na jakość i skuteczność końcowych rozwiązań. Hiperparametry to te parametry modelu, które nie są bezpośrednio uczone podczas treningu, lecz muszą być określone z góry — przykładowo: współczynnik uczenia, liczba warstw w sieci neuronowej czy liczba sąsiadów w algorytmie KNN.

Odpowiedni dobór hiperparametrów pozwala zoptymalizować działanie modelu względem konkretnego zadania, takiego jak klasyfikacja, regresja czy analiza szeregów czasowych. Niewłaściwie dobrane wartości mogą prowadzić do nadmiernego dopasowania (overfitting), niedouczenia (underfitting) lub po prostu niskiej skuteczności predykcji.

Istnieje wiele metod automatyzacji procesu strojenia, z których najpopularniejsze to:

  • Grid Search – metoda polegająca na przeszukiwaniu wszystkich możliwych kombinacji zdefiniowanych hiperparametrów,
  • Random Search – technika oparta na losowym dobieraniu kombinacji parametrów z określonych rozkładów,
  • Bayesian Optimization – zaawansowane podejście wykorzystujące model probabilistyczny do przewidywania, które kombinacje hiperparametrów warto sprawdzić w kolejnych krokach.

Każda z tych metod ma swoje mocne i słabe strony, które sprawiają, że sprawdzają się one lepiej lub gorzej w zależności od konkretnego problemu, dostępnych zasobów obliczeniowych oraz liczby parametrów do przeszukania. Wybór odpowiedniej techniki strojenia może znacząco skrócić czas eksperymentów i poprawić końcową jakość modelu.

Grid Search – opis, zalety i wady

Grid Search to jedna z najprostszych i najczęściej wykorzystywanych metod strojenia hiperparametrów w uczeniu maszynowym. Polega ona na przeszukiwaniu z góry zdefiniowanej siatki możliwych wartości hiperparametrów i ocenie każdej możliwej kombinacji w celu znalezienia tej, która daje najlepsze wyniki według przyjętej metryki jakości.

Podczas stosowania Grid Search użytkownik definiuje zakres wartości dla każdego hiperparametru. Algorytm tworzy następnie kartezjański iloczyn tych wartości, a następnie testuje każdy zestaw parametrów przy użyciu wybranej strategii walidacyjnej, najczęściej k-krotnej walidacji krzyżowej.

Podczas szkoleń Cognity ten temat wraca regularnie – dlatego zdecydowaliśmy się go omówić również tutaj.

Zalety Grid Search:

  • Łatwość implementacji i zrozumienia – Grid Search jest intuicyjny i łatwy do zaimplementowania, nawet dla osób początkujących w uczeniu maszynowym.
  • Deterministyczność – metoda gwarantuje powtarzalność wyników, ponieważ testowana jest każda możliwa kombinacja parametrów w określonej siatce.
  • Dokładność przeszukiwania – systematyczne podejście pozwala na pełne pokrycie przestrzeni parametrów w zadanym zakresie, co może być korzystne, gdy znamy ograniczony zestaw sensownych wartości.

Wady Grid Search:

  • Wysoka złożoność obliczeniowa – liczba kombinacji rośnie wykładniczo wraz z liczbą parametrów i wartości w siatce, co może prowadzić do bardzo długich czasów trenowania modeli.
  • Niska efektywność – Grid Search testuje każdą kombinację równomiernie, nawet jeśli niektóre z nich są mało prawdopodobne, by dawać dobre wyniki.
  • Brak adaptacji – metoda nie wykorzystuje informacji z wcześniejszych iteracji, przez co nie potrafi skupić się na obiecujących obszarach przestrzeni hiperparametrów.

Grid Search sprawdza się dobrze w przypadku małych przestrzeni parametrów lub gdy mamy do czynienia z modelami o niewielkiej liczbie hiperparametrów. Jednak w bardziej złożonych scenariuszach może być nieoptymalny pod względem zasobów i czasu.

Random Search – opis, zalety i wady

Random Search to jedna z najprostszych, a zarazem bardzo skutecznych metod strojenia hiperparametrów w modelach uczenia maszynowego. Zamiast systematycznego przeszukiwania całej przestrzeni parametrów (jak ma to miejsce w Grid Search), Random Search losowo wybiera kombinacje hiperparametrów z określonych zakresów i sprawdza ich skuteczność. Dzięki temu w wielu przypadkach pozwala szybciej znaleźć dobre ustawienia modelu, zwłaszcza gdy tylko część parametrów znacząco wpływa na jakość wyników. Jeśli chcesz nauczyć się, jak skutecznie stosować Random Search i inne techniki optymalizacji w praktyce, sprawdź Kurs Machine Learning i Deep Learning w języku Python – modelowanie, optymalizacja, analiza danych.

W praktyce metoda ta polega na określeniu rozkładów prawdopodobieństwa dla poszczególnych hiperparametrów (np. rozkład jednostajny lub logarytmiczny) i liczby iteracji, które zostaną wykonane. Dla każdego przebiegu losowana jest nowa konfiguracja i oceniana za pomocą wybranej metryki walidacyjnej.

Zalety Random Search

  • Efektywność czasowa: Liczba sprawdzanych konfiguracji jest pod pełną kontrolą, co może być kluczowe przy ograniczonych zasobach obliczeniowych.
  • Lepsze pokrycie przestrzeni: Losowe próbkowanie pozwala objąć większy fragment przestrzeni parametrów, szczególnie jeśli tylko kilka hiperparametrów wpływa realnie na jakość modelu.
  • Łatwość implementacji: Metoda jest prosta do zaimplementowania i zrozumienia, bez potrzeby budowania modeli probabilistycznych.

Wady Random Search

  • Brak wykorzystania wiedzy z poprzednich prób: Każda próba jest niezależna od poprzednich, co oznacza brak „uczenia się” w trakcie procesu optymalizacji.
  • Brak gwarancji znalezienia optimum: Losowy charakter może sprawić, że dobre kombinacje zostaną pominięte, szczególnie przy niewielkiej liczbie iteracji.
  • Może wymagać wielu prób przy dużej liczbie hiperparametrów: Skuteczność metody spada wraz ze wzrostem wymiaru przestrzeni parametrów.

Przykład użycia (Python, scikit-learn)

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

param_dist = {
    'n_estimators': randint(50, 200),
    'max_depth': randint(3, 20),
    'min_samples_split': randint(2, 11)
}

clf = RandomForestClassifier()
random_search = RandomizedSearchCV(clf, param_distributions=param_dist, n_iter=20, cv=5)
random_search.fit(X_train, y_train)

Jak pokazuje powyższy przykład, Random Search pozwala w prosty sposób przetestować losowe kombinacje hiperparametrów i znaleźć te najlepiej działające w zadaniu klasyfikacyjnym.

Bayesian Optimization – opis, zalety i wady

Bayesian Optimization to zaawansowana metoda strojenia hiperparametrów, która wykorzystuje podejście probabilistyczne do inteligentnego eksplorowania przestrzeni parametrów. Celem tej techniki jest maksymalizacja (lub minimalizacja) funkcji celu przy minimalnej liczbie jej wywołań, co czyni ją szczególnie użyteczną w przypadkach, gdy każde trenowanie modelu jest kosztowne obliczeniowo.

W odróżnieniu od metod Grid Search i Random Search, które nie wykorzystują informacji z poprzednich iteracji, Bayesian Optimization buduje model probabilistyczny (najczęściej Gaussian Process), który estymuje funkcję celu. Na podstawie tego modelu wybierane są kolejne punkty do ewaluacji w sposób maksymalizujący tzw. funkcję akwizycji, co pozwala efektywniej prowadzić eksplorację.

W Cognity mamy doświadczenie w pracy z zespołami, które wdrażają to rozwiązanie – dzielimy się tym także w artykule.

Zalety

  • Efektywność obliczeniowa: Znacznie redukuje liczbę potrzebnych ewaluacji w porównaniu do metod losowych lub siatki.
  • Inteligentna eksploracja: Przewiduje, gdzie szukać najlepszych wartości hiperparametrów, zamiast testować je losowo lub systematycznie.
  • Przydatność przy kosztownych modelach: Idealna w przypadku drogich operacji trenowania, np. w głębokim uczeniu lub modelach ensemble.

Wady

  • Złożoność implementacyjna: Trudniejsza do zrozumienia i zaimplementowania niż proste wyszukiwania siatką lub losowe.
  • Wydajność w wysokowymiarowych przestrzeniach: Skuteczność maleje przy bardzo wielu hiperparametrach – Gaussian Process staje się mniej dokładny.
  • Wymaga dodatkowych bibliotek: Zazwyczaj opiera się na zewnętrznych narzędziach jak scikit-optimize, Hyperopt czy BayesSearchCV.

Przykład użycia w Pythonie (z wykorzystaniem scikit-optimize)

from skopt import BayesSearchCV
from sklearn.ensemble import RandomForestClassifier

opt = BayesSearchCV(
    estimator=RandomForestClassifier(),
    search_spaces={
        'n_estimators': (10, 200),
        'max_depth': (1, 30),
        'min_samples_split': (2, 20)
    },
    n_iter=30,
    cv=3
)

opt.fit(X_train, y_train)

W powyższym przykładzie Bayesian Optimization umożliwia znalezienie optymalnych parametrów dla klasyfikatora Random Forest, oszczędzając czas i zasoby w porównaniu do wyczerpującego przeszukiwania siatką.

Porównanie metod pod względem efektywności i jakości wyników

Strojenie hiperparametrów to kluczowy etap w procesie budowania modeli uczenia maszynowego. Wybór odpowiedniej metody optymalizacji wpływa nie tylko na jakość predykcji, ale również na czas i zasoby obliczeniowe wymagane do uzyskania satysfakcjonujących rezultatów. Poniżej przedstawiono porównanie trzech popularnych podejść: Grid Search, Random Search i Bayesian Optimization – pod kątem efektywności oraz jakości uzyskiwanych wyników.

Cecha Grid Search Random Search Bayesian Optimization
Czas obliczeń Wysoki – przeszukuje całą siatkę Średni – losowy wybór próbki Niski/średni – inteligentne wybieranie kolejnych punktów
Efektywność eksploracji przestrzeni Niska – może pominąć wartości między punktami siatki Średnia – większa różnorodność badanych punktów Wysoka – wykorzystuje wcześniejsze wyniki do przewidywania kolejnych prób
Jakość wynikowego modelu Wysoka (jeśli siatka jest odpowiednio gęsta) Porównywalna lub wyższa niż Grid Search przy mniejszej liczbie prób Najwyższa – mniejsza liczba prób prowadzi często do lepszego modelu
Skalowalność do dużej liczby hiperparametrów Niska – eksplozja kombinacji siatki Lepsza – ograniczona tylko liczbą prób Wysoka – efektywne przeszukiwanie dużych przestrzeni
Wymagania implementacyjne Niskie – łatwe do wdrożenia Niskie – proste w użyciu Wyższe – wymaga bibliotek i znajomości metod optymalizacji

Przykład zastosowania w języku Python (dla klasyfikatora SVM):

from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from skopt import BayesSearchCV
from sklearn.svm import SVC

param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
param_dist = {'C': [0.01, 0.1, 1, 10, 100], 'kernel': ['linear', 'rbf', 'poly']}

svc = SVC()

# Grid Search
grid_search = GridSearchCV(svc, param_grid, cv=5)
grid_search.fit(X, y)

# Random Search
random_search = RandomizedSearchCV(svc, param_dist, n_iter=10, cv=5)
random_search.fit(X, y)

# Bayesian Optimization
bayes_search = BayesSearchCV(svc, param_dist, n_iter=10, cv=5)
bayes_search.fit(X, y)

W praktyce wybór metody zależy od dostępnych zasobów, skali problemu oraz oczekiwanej dokładności modelu. Bayesian Optimization często przewyższa pozostałe podejścia w kontekście liczby prób potrzebnych do znalezienia optymalnych parametrów, co czyni ją atrakcyjnym wyborem w bardziej złożonych zadaniach. Jeśli chcesz nauczyć się stosować te techniki w praktyce, warto rozważyć udział w Kursie Uczenie maszynowe z wykorzystaniem Pythona.

💡 Pro tip: Dla uczciwego porównania używaj tych samych foldów (np. StratifiedKFold z tym samym random_state) i identycznej metryki. Hiperparametry o skali wykładniczej (np. C, gamma) próbkuj rozkładem log-uniform zamiast liniowo, aby poprawić efektywność.

Praktyczne przykłady zastosowania (z kodem w Pythonie)

W tej sekcji przedstawimy praktyczne zastosowanie trzech popularnych metod strojenia hiperparametrów: Grid Search, Random Search i Bayesian Optimization. Na potrzeby porównania użyjemy prostego klasyfikatora – RandomForestClassifier z biblioteki scikit-learn i zbioru danych Breast Cancer. Dzięki temu uzyskamy jasny obraz różnic w implementacji oraz podejściu do eksploracji przestrzeni hiperparametrów.

1. Przygotowanie danych

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Wczytanie danych
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, test_size=0.3, random_state=42
)

2. Grid Search

from sklearn.model_selection import GridSearchCV

param_grid = {
    'n_estimators': [50, 100, 150],
    'max_depth': [3, 5, 10]
}

grid_search = GridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=3)
grid_search.fit(X_train, y_train)
print("Grid Search Accuracy:", accuracy_score(y_test, grid_search.best_estimator_.predict(X_test)))

3. Random Search

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

param_dist = {
    'n_estimators': randint(50, 200),
    'max_depth': randint(3, 20)
}

random_search = RandomizedSearchCV(RandomForestClassifier(random_state=42), param_distributions=param_dist, n_iter=10, cv=3, random_state=42)
random_search.fit(X_train, y_train)
print("Random Search Accuracy:", accuracy_score(y_test, random_search.best_estimator_.predict(X_test)))

4. Bayesian Optimization (z użyciem optuna)

import optuna
from sklearn.model_selection import cross_val_score

def objective(trial):
    n_estimators = trial.suggest_int('n_estimators', 50, 200)
    max_depth = trial.suggest_int('max_depth', 3, 20)
    clf = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, random_state=42)
    return cross_val_score(clf, X_train, y_train, cv=3).mean()

study = optuna.create_study(direction='maximize', study_name="RF_Optimization")
study.optimize(objective, n_trials=20)

# Trenowanie modelu z najlepszymi parametrami
best_params = study.best_params
clf_best = RandomForestClassifier(**best_params, random_state=42)
clf_best.fit(X_train, y_train)
print("Bayesian Optimization Accuracy:", accuracy_score(y_test, clf_best.predict(X_test)))

5. Porównanie metod

Metoda Czas wyszukiwania Wynik (Accuracy) Liczba przetestowanych kombinacji
Grid Search średni ~0.95 9 (3x3)
Random Search niskie/średnie ~0.96 10 (losowe)
Bayesian Optimization niski ~0.97 20 (inteligentna eksploracja)

Jak widać, każda z metod ma swoje mocne strony. Grid Search gwarantuje pełne przeszukiwanie siatki, Random Search jest szybszy i bardziej elastyczny, natomiast Bayesian Optimization wykorzystuje wiedzę z poprzednich prób do inteligentnego wyboru kolejnych wartości, co często skutkuje lepszym wynikiem przy mniejszej liczbie iteracji.

💡 Pro tip: Przyspiesz wyszukiwanie ustawiając n_jobs=-1 oraz stabilne cv=StratifiedKFold(shuffle=True, random_state=42). W Optuna włącz prunowanie (MedianPruner) i ogranicz czas/n_trials, by nie przepalać zasobów.

Kiedy wybrać daną metodę – rekomendacje

Wybór odpowiedniej metody strojenia hiperparametrów w dużej mierze zależy od charakterystyki problemu, dostępnych zasobów obliczeniowych oraz oczekiwanej jakości wyników. Poniżej przedstawiamy ogólne rekomendacje dotyczące zastosowania Grid Search, Random Search i Bayesian Optimization.

  • Grid Search sprawdzi się najlepiej w sytuacjach, gdy przestrzeń hiperparametrów jest niewielka, a użytkownik chce mieć pełną kontrolę nad testowanymi wartościami. Jest to dobry wybór przy ograniczonej liczbie hiperparametrów i niewielkich możliwościach obliczeniowych.
  • Random Search będzie bardziej efektywny w przypadku większych przestrzeni hiperparametrów lub gdy nie wiadomo, które hiperparametry mają największy wpływ na wynik. Dzięki losowemu próbkowaniu może szybciej znaleźć dobre kombinacje przy mniejszym nakładzie obliczeniowym.
  • Bayesian Optimization to najlepszy wybór, gdy koszty pojedynczego treningu modelu są wysokie, a celem jest szybkie znalezienie optymalnych ustawień. Sprawdza się zwłaszcza w bardziej złożonych projektach, gdzie każda iteracja ma duże znaczenie i konieczne jest inteligentne przeszukiwanie przestrzeni.

W praktyce dobór metody warto dostosować nie tylko do samego algorytmu, ale też do ograniczeń technicznych, czasu dostępnego na eksperymenty oraz wymagań biznesowych co do jakości modelu.

💡 Pro tip: Zacznij od krótkiego Random Search, by zawęzić zakresy, następnie doprecyzuj je Bayesian Optimization; Grid stosuj tylko dla małych, dyskretnych przestrzeni lub jako sanity check. Zawsze z góry ustal budżet (czas/iteracje) i adekwatne CV.

Wprowadzenie do strojenia hiperparametrów

Strojenie hiperparametrów to kluczowy etap w procesie budowy modeli uczenia maszynowego. Hiperparametry to parametry nieustalane przez sam model w czasie treningu, lecz definiowane przez użytkownika przed rozpoczęciem procesu uczenia. Ich odpowiedni dobór może znacząco wpłynąć na jakość predykcji oraz efektywność działania modelu.

Istnieje wiele metod optymalizacji hiperparametrów, spośród których trzy najpopularniejsze to:

  • Grid Search – metoda polegająca na przeszukiwaniu przestrzeni hiperparametrów w sposób wyczerpujący, sprawdzając każdą możliwą kombinację w określonym zakresie.
  • Random Search – technika losowego próbkowania wartości hiperparametrów, która pozwala na szybsze znalezienie satysfakcjonujących wyników bez konieczności testowania każdej kombinacji.
  • Bayesian Optimization – podejście probabilistyczne, które modeluje funkcję celu i wybiera kolejne kombinacje hiperparametrów w sposób ukierunkowany, maksymalizując prawdopodobieństwo poprawy wyników.

Każda z tych metod ma swoje unikalne cechy, zastosowania i ograniczenia. Wybór odpowiedniej techniki zależy od wielu czynników, takich jak dostępna moc obliczeniowa, liczba hiperparametrów, czas treningu modelu oraz wymagany poziom dokładności. W Cognity łączymy teorię z praktyką – dlatego ten temat rozwijamy także w formie ćwiczeń na szkoleniach.

icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments