Walidacja krzyżowa

Nadzorowane uczenie maszynowe z scikit-learn

George Boorman

Core Curriculum Manager, DataCamp

Motywacja dla walidacji krzyżowej

  • Wydajność modelu zależy od sposobu podziału danych

  • Nie odzwierciedla zdolności modelu do generalizacji na nowe dane

  • Rozwiązanie: walidacja krzyżowa!

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

nagłówki tabeli: podział 1, fold 1, fold 2, fold 3, fold 4 i fold 5

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

podział 1 zarezerwowany jako zbiór testowy

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

foldy 2–5 używane jako dane treningowe

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

obliczenie metryki na tych foldach

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

Fold 2 jako dane testowe

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

Foldy 1, 3, 4 i 5 jako dane treningowe

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

ponowne obliczenie metryki

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

powtórzenie z trzecim foldem

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

powtórzenie z czwartym foldem

Nadzorowane uczenie maszynowe z scikit-learn

Podstawy walidacji krzyżowej

powtórzenie z piątym foldem

Nadzorowane uczenie maszynowe z scikit-learn

Walidacja krzyżowa a wydajność modelu

  • 5 foldów = CV 5-foldowa

  • 10 foldów = CV 10-foldowa

  • k foldów = CV k-foldowa

  • Więcej foldów = Wyższy koszt obliczeniowy

Nadzorowane uczenie maszynowe z scikit-learn

Walidacja krzyżowa w scikit-learn

from sklearn.model_selection import cross_val_score, KFold

kf = KFold(n_splits=6, shuffle=True, random_state=42)
reg = LinearRegression()
cv_results = cross_val_score(reg, X, y, cv=kf)
Nadzorowane uczenie maszynowe z scikit-learn

Ocena wyników walidacji krzyżowej

print(cv_results)
[0.70262578, 0.7659624, 0.75188205, 0.76914482, 0.72551151, 0.73608277]
print(np.mean(cv_results), np.std(cv_results))
0.7418682216666667 0.023330243960652888
print(np.quantile(cv_results, [0.025, 0.975]))
array([0.7054865, 0.76874702])
Nadzorowane uczenie maszynowe z scikit-learn

Czas na ćwiczenia!

Nadzorowane uczenie maszynowe z scikit-learn

Preparing Video For Download...