Ocena modeli i walidacja krzyżowa
Proszę oceniać modele za pomocą accuracy, F1, ROC-AUC i walidacji krzyżowej k-fold.
Ocena modeli i walidacja krzyżowa to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.
Podział na zbiory treningowy, walidacyjny i testowy
Należy używać podziału na trzy części: zbioru treningowego do dopasowania modelu, walidacyjnego do dostrajania hiperparametrów oraz testowego do raportowania ostatecznej wydajności. Podczas tworzenia modelu nigdy nie należy używać zbioru testowego.
from sklearn.model_selection import train_test_split
import numpy as np
X = np.random.rand(1000, 10)
y = (X[:,0] > 0.5).astype(int)
X_tr, X_rest, y_tr, y_rest = train_test_split(X, y, test_size=0.3)
X_val, X_te, y_val, y_te = train_test_split(X_rest, y_rest, test_size=0.5)Dokładność
accuracy_score to odsetek poprawnych predykcji. Należy używać go w przypadku zrównoważonych klas; dla niezrównoważonych danych lepiej użyć F1 lub AUC.
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))Precyzja, czułość i F1
W przypadku niezrównoważonych klas: precyzja = TP/(TP+FP), czułość = TP/(TP+FN), a F1 = średnia harmoniczna precyzji i czułości.
from sklearn.metrics import precision_score, recall_score, f1_score, classification_report
# Use classification_report for a full summary:
print(classification_report(y_te, model.predict(X_te)))
# shows precision, recall, f1 for each classMacierz pomyłek
Macierz pomyłek pokazuje wyniki prawdziwie dodatnie, fałszywie dodatnie, prawdziwie ujemne i fałszywie ujemne.
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
cm = confusion_matrix(y_te, model.predict(X_te))
print(cm)
# [[TN FP]
# [FN TP]]Krzywa ROC i AUC
roc_auc_score mierzy pole pod krzywą ROC. AUC = 1.0 oznacza wynik idealny, a 0.5 — wynik losowy.
from sklearn.metrics import roc_auc_score, roc_curve
y_prob = model.predict_proba(X_te)[:,1]
print("AUC:", roc_auc_score(y_te, y_prob))
fpr, tpr, thresholds = roc_curve(y_te, y_prob)
# plot fpr vs tpr for the full ROC curveMetryki regresji
W zadaniach regresji należy używać mean_squared_error (MSE), root_mean_squared_error (RMSE) oraz r2_score.
from sklearn.metrics import mean_squared_error, r2_score
y_pred = regression_model.predict(X_te)
mse = mean_squared_error(y_te, y_pred)
print("RMSE:", mse**0.5)
print("R²:", r2_score(y_te, y_pred))Walidacja krzyżowa k-fold
cross_val_score dzieli dane na k części, trenuje model na k-1 częściach, ocenia go na jednej części i powtarza ten proces k razy. Jest to bardziej niezawodne niż pojedynczy podział.
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=10, scoring="accuracy")
print(f"{scores.mean():.3f} ± {scores.std():.3f}")StratifiedKFold
Należy użyć StratifiedKFold, aby zapewnić taki sam rozkład klas w każdej części — ma to kluczowe znaczenie w przypadku niezrównoważonych zbiorów danych.
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(weights=[0.9,0.1], random_state=0)
cv = StratifiedKFold(n_splits=5)
scores = cross_val_score(LogisticRegression(), X, y, cv=cv, scoring="f1")
print("Stratified F1:", scores.mean())Kompromis obciążenie–wariancja
Duże obciążenie oznacza niedouczenie (model jest zbyt prosty). Duża wariancja oznacza przeuczenie (model jest zbyt złożony). Walidacja krzyżowa pokazuje, z którym problemem mamy do czynienia.
# Underfitting: low train score AND low val score
# → increase model complexity, add features
# Overfitting: high train score, low val score
# → regularise, reduce complexity, get more data
from sklearn.model_selection import validation_curve
import numpy as np
train_sc, val_sc = validation_curve(DecisionTreeClassifier(), X, y, param_name="max_depth", param_range=range(1,10))Zagnieżdżona walidacja krzyżowa
Aby przeprowadzać bezstronne dostrajanie hiperparametrów i ocenę, należy użyć zagnieżdżonej walidacji krzyżowej: pętla wewnętrzna dostraja model, a zewnętrzna go ocenia.
from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
gs = GridSearchCV(SVC(), {"C":[0.1,1,10]}, cv=5)
outer_scores = cross_val_score(gs, X, y, cv=5)
print("Nested CV accuracy:", outer_scores.mean())Kalibracja
Oszacowania prawdopodobieństwa klasyfikatora mogą być źle skalibrowane. Aby uzyskać lepsze oszacowania prawdopodobieństw, należy użyć CalibratedClassifierCV.
from sklearn.calibration import CalibratedClassifierCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y)
cal = CalibratedClassifierCV(SVC(), cv=5).fit(X_tr, y_tr)
print(cal.predict_proba(X_te[:3]))Szybkie sprawdzenie
Dlaczego podczas oceniania modeli walidacja krzyżowa jest preferowana zamiast pojedynczego podziału na zbiór treningowy i testowy?
Podsumowanie
W przypadku zrównoważonych problemów należy używać dokładności, a w przypadku niezrównoważonych — F1/AUC. Ocenę należy przeprowadzać za pomocą k-fold cross_val_score, w przypadku niezrównoważonych danych używać StratifiedKFold, a podczas dostrajania hiperparametrów stosować zagnieżdżoną walidację krzyżową, aby uzyskać bezstronne oszacowanie końcowe. Podczas tworzenia modelu nigdy nie należy zaglądać do zbioru testowego.
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 76
- Lekcje
- 320
Często zadawane pytania
Czy lekcja „Ocena modeli i walidacja krzyżowa” jest bezpłatna?
Tak — pełny tekst „Ocena modeli i walidacja krzyżowa” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Ocena modeli i walidacja krzyżowa”?
Proszę oceniać modele za pomocą accuracy, F1, ROC-AUC i walidacji krzyżowej k-fold. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Python Academy?
Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Ocena modeli i walidacja krzyżowa”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?
Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- API scikit-learn: fit, transform, predict
- Modele liniowe: regresja i klasyfikacja
- Modele drzewiaste: drzewa decyzyjne i lasy losowe
- Ocena modeli i walidacja krzyżowa