Cross – validation

Cross-validation, znana również jako walidacja krzyżowa, jest techniką oceny modelu, która polega na podziale danych na kilka mniejszych zbiorów (zazwyczaj od 5 do 10), zwanych “foldami”, a następnie trenowaniu modelu na jednym zbiorze i testowaniu go na pozostałych. Procedura ta jest powtarzana dla każdego foldu, tak aby każdy zbiór danych był użyty jako zbiór testowy co najmniej raz.

Cross-validation jest przydatną techniką, ponieważ pozwala to uzyskać bardziej obiektywną ocenę modelu, eliminując efekt losowego podziału danych na zbiór uczący i testowy. Jest również przydatna, jeśli dysponujemy ograniczonym zbiorem danych, ponieważ pozwala to na wykorzystanie wszystkich dostępnych danych do trenowania i oceny modelu.

Cross-validation może być również używana do wyszukiwania optymalnych parametrów modelu, poprzez przeprowadzenie szeregu trenowań modelu dla różnych kombinacji parametrów i obliczenie średniego wyniku dla każdej kombinacji.

Biblioteka sklearn w Pythonie oferuje wiele narzędzi do przeprowadzania cross-validation, takich jak model_selection.cross_val_score i model_selection.GridSearchCV. Dzięki tym narzędziom proces cross-validation jest szybki i łatwy w implementacji.

Podsumowując, cross-validation to przydatna technika oceny modelu, która pozwala uzyskać bardziej obiektywną ocenę modelu i wyszukać optymalne parametry. Jest szczególnie przydatna w przypadku ograniczonego zbioru danych i jest łatwa w implementacji za pomocą narzędzi dostępnych w bibliotece sklearn.

Oto kilka przykładów implementacji cross-validation za pomocą biblioteki sklearn:

  1. model_selection.cross_val_score: ta funkcja służy do obliczenia cross-validation score dla modelu. Przykładowe użycie:
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

# utwórz model
model = RandomForestClassifier()

# przeprowadź cross-validation, używając 5 foldów
scores = cross_val_score(model, X, y, cv=5)

# wyświetl średni wynik oraz odchylenie standardowe
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

2. model_selection.GridSearchCV: ta funkcja służy do wyszukiwania optymalnych parametrów modelu za pomocą cross-validation. Przykładowe użycie:

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

# utwórz model
model = RandomForestClassifier()

# zdefiniuj zakres parametrów do przeszukania
param_grid = {
    'n_estimators': [10, 50, 100, 200],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10],
}

# utwórz obiekt GridSearchCV
grid_search = GridSearchCV(model, param_grid, cv=5)

# dokonaj trenowania i wyszukiwania optymalnych parametrów
grid_search.fit(X, y)

# wyświetl najlepsze parametry
print(grid_search.best_params_)

# wyświetl najlepszy cross-validation score
print(grid_search.best_score_)

W tym przykładzie tworzymy model losowego lasu za pomocą biblioteki sklearn, a następnie używamy GridSearchCV do wyszukiwania optymalnych parametrów n_estimators, max_depth i min_samples_split dla tego modelu. Do wyszukiwania optymalnych parametrów używamy cross-validation z 5 fold. Po przeprowadzeniu trenowania i wyszukiwania optymalnych parametrów możemy wyświetlić najlepsze parametry za pomocą best_params_ oraz najlepszy cross-validation score za pomocą best_score_.

To tylko jeden przykład użycia funkcji GridSearchCV z biblioteki sklearn, ale istnieją również inne narzędzia do przeprowadzania cross-validation i wyszukiwania optymalnych parametrów modelu, takie jak model_selection.RandomizedSearchCV i model_selection.KFold. Wszystkie te narzędzia pozwalają na szybkie i łatwe przeprowadzenie cross-validation i wyszukiwanie optymalnych parametrów modelu.