Menu
CoddyTech

Walidacja k-krotna

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 37 z 58.

Ten rozdział sprawi, że Twoje wyniki będą wiarygodne. Po jego ukończeniu dostroisz model za pomocą wykresów takich jak ten:

Słupki średniej dokładności dla 5 podziałów krzyżowej walidacji, dla k od 1 do 41. Słupki rosną od 0.85 przy k = 1 do wyróżnionego najlepszego wyniku 0.91 przy k = 15, a następnie opadają

Jeden podział testowy może dać szczęśliwy wynik. Walidacja krzyżowa K-krotna dzieli wiersze na części, tutaj 5, i kolejno testuje na każdej z nich, ucząc na pozostałych:

Pięć wierszy po pięć komórek. W każdym podziale jedna komórka, za każdym razem inna, jest częścią testową; pozostałe cztery służą do uczenia. Wyniki drzewa dla Iris obok nich: 0.967, 0.967, 0.900, 0.967, 1.000

Jedno wywołanie uruchamia wszystkie pięć, tutaj dla drzewa klasyfikującego kwiaty irysa:

from sklearn.model_selection import cross_val_score

tree = DecisionTreeClassifier(random_state=0)
scores = cross_val_score(tree, X, y, cv=5)
print(np.round(scores, 3))
print(f"{scores.mean():.3f} {scores.std():.3f}")

To wyświetla:

[0.967 0.967 0.9   0.967 1.   ]
0.960 0.033

Podaj średnią jako wynik, a odchylenie standardowe jako miarę tego, jak bardzo wynik się waha.

challenge icon

Wyzwanie

Średni

Browar kombuchy przewiduje, które partie się zepsuły, na podstawie 5 odczytów laboratoryjnych. Jak stabilny jest jego model? Program odczytuje liczbę fałd; kod startowy tworzy dane i model.

  1. Przeprowadź walidację krzyżową modelu z taką liczbą fałd.
  2. Wypisz dokładność dla każdego fałdu, a następnie średnią i odchylenie standardowe, wszystko z dokładnością do 3 miejsc po przecinku.
  3. Wypisz numer najsłabszego fałdu, licząc od 1.

Dla innych partii i 4:

Fold 1: 0.917
Fold 2: 0.933
Fold 3: 0.883
Fold 4: 0.917
Mean 0.912, std 0.018
Weakest fold: 3

Spróbuj swoich sił

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

n_folds = int(input())

# Nie zmieniaj poniższych wierszy: 240 partii kombuchy, po 5 odczytów laboratoryjnych dla każdej; etykieta 1 oznacza zepsutą partię
X, y = make_classification(n_samples=240, n_features=5, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.9, random_state=2)
model = LogisticRegression(max_iter=1000)

# Wpisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online