Oppikaa tekoälyä Pythonilla · Oppitunti

Ristiinvalidoinnin strategiat

k-fold, stratified k-fold, leave-one-out ja aikasarjajako – milloin kutakin käytetään.

Oppitunti 1/413 vaihetta

Ristiinvalidoinnin strategiat on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Miksi ristiinvalidointia käytetään

Yksi koulutus- ja testijako voi olla sattumanvaraisesti liian suotuisa tai epäedullinen. Ristiinvalidointi toistaa arvioinnin eri jaoilla ja laskee pisteiden keskiarvon, mikä antaa luotettavamman arvion suorituskyvystä.

K-kertainen ristiinvalidointi

KFold jakaa datan K yhtä suureen osaan. Kutakin osaa käytetään kerran testijoukkona, kun taas loput osat toimivat mallin koulutusaineistona. Näin saadaan K pistemäärää, joista lasketaan keskiarvo.

from sklearn.model_selection import KFold

kf = KFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in kf.split(X):
    Xtr, Xte = X[train_idx], X[test_idx]
    ytr, yte = y[train_idx], y[test_idx]
    # train and evaluate here

Ositettu K-fold luokittelua varten

Luokittelussa tavallinen K-fold voi tuottaa osia, joissa luokkien suhteet ovat epätasapainossa. StratifiedKFold säilyttää luokkien osuudet jokaisessa osassa.

from sklearn.model_selection import StratifiedKFold

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in skf.split(X, y):
    # each fold keeps the same class balance as the full set
    pass

cross_val_score-pikakomento

cross_val_score suorittaa koko silmukan puolestanne ja palauttaa taulukon osien pistemääristä. Se käyttää luokittelijoille automaattisesti menetelmää StratifiedKFold.

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(random_state=0)
scores = cross_val_score(clf, X, y, cv=5, scoring="accuracy")
print(scores)
print("Mean:", scores.mean(), "Std:", scores.std())

Osien määrän valinta

Useammat osat (esimerkiksi 10) antavat vähemmän harhaisen arvion, mutta vaativat enemmän laskentaa. Viisiosainen ristiinvalidointi on yleinen kompromissi. Erittäin pienillä aineistoilla leave-one-out käyttää N osaa, joissa kussakin testijoukossa on yksi näyte.

from sklearn.model_selection import LeaveOneOut, cross_val_score

loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
print("Mean:", scores.mean())

TimeSeriesSplit aikasarjadataa varten

Aikasarjojen kanssa tulevaisuuden datalla ei saa koskaan kouluttaa mallia. TimeSeriesSplit käyttää aina aiempaa dataa koulutukseen ja seuraavaa lohkoa testaukseen sekä laajentaa koulutusikkunaa osasta toiseen.

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
    # train_idx always precedes test_idx in time
    print(len(train_idx), len(test_idx))

Miksi järjestys on tärkeä aikasarjoissa

Aikajärjestyksessä olevan datan sekoittaminen vuotaa tulevaisuuden tietoa koulutukseen ja paisuttaa pisteitä. TimeSeriesSplit kunnioittaa aikajärjestystä, joten arviointi vastaa paremmin todellisia ennusteolosuhteita.

cross_validate useille mittareille

cross_validate toimii kuten cross_val_score, mutta palauttaa useita mittareita kerralla ja voi sisältää koulutuspisteet sekä sovitukseen kuluneet ajat.

from sklearn.model_selection import cross_validate

results = cross_validate(
    clf, X, y, cv=5,
    scoring=["accuracy", "f1_macro", "roc_auc_ovr"],
    return_train_score=True,
)
print(results["test_accuracy"])
print(results["test_f1_macro"])

cross_validate-tulosteen tulkinta

Tulos on sanakirja, jonka avaimia ovat esimerkiksi test_<metric>, train_<metric>, fit_time ja score_time. Koulutus- ja testipisteiden vertaaminen auttaa tunnistamaan ylisovittamisen.

import numpy as np

gap = results["train_accuracy"].mean() - results["test_accuracy"].mean()
print("Overfit gap:", gap)
print("Avg fit time:", np.mean(results["fit_time"]))

Ristiinvalidointi ja datavuoto

Sovittakaa esikäsittely, kuten skaalaus ja koodaus, aina ristiinvalidoinnin silmukan sisällä, ei ennen sitä. Käyttäkää Pipeline-putkea, jotta kukin osa skaalataan vain oman koulutusdatansa perusteella ja datavuoto estetään.

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score

pipe = make_pipeline(StandardScaler(), SVC())
scores = cross_val_score(pipe, X, y, cv=5)

Sopivan strategian valinta

Käyttäkää luokitteluun StratifiedKFold-menetelmää, regressioon tavallista KFold-menetelmää ja aikasarjadataan TimeSeriesSplit-menetelmää. Sijoittakaa esikäsittely putkeen ja raportoikaa osien keskiarvo sekä keskihajonta.

Pikatesti

Testatkaa ristiinvalidoinnin osaamisenne.

Kertaus

Kertaus: Ristiinvalidointi laskee suorituskyvyn keskiarvon useiden jakojen perusteella. Käyttäkää KFold-menetelmää regressioon, StratifiedKFold-menetelmää tasapainoiseen luokitteluun ja TimeSeriesSplit-menetelmää aikasarjadataan. cross_val_score antaa yhden mittarin, kun taas cross_validate antaa useita mittareita sekä ajoitustiedot. Suorittakaa esikäsittely aina Pipeline-putken sisällä datavuodon estämiseksi.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
53
Oppitunnit
225

Usein kysytyt kysymykset

Onko oppitunti ”Ristiinvalidoinnin strategiat” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “Ristiinvalidoinnin strategiat”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Ristiinvalidoinnin strategiat”?

k-fold, stratified k-fold, leave-one-out ja aikasarjajako – milloin kutakin käytetään. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Ristiinvalidoinnin strategiat”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?

Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Ristiinvalidoinnin strategiat
  2. Luokittelumittarit perusteellisesti
  3. Haku ruudukolla ja satunnaishaku
  4. Bayesilainen optimointi Optunalla
← Takaisin: Oppikaa tekoälyä Pythonilla