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:
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.