Ristiinvalidoinnin strategiat
k-fold, stratified k-fold, leave-one-out ja aikasarjajako – milloin kutakin käytetään.
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 hereOsitettu 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
passcross_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.
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
- Ristiinvalidoinnin strategiat
- Luokittelumittarit perusteellisesti
- Haku ruudukolla ja satunnaishaku
- Bayesilainen optimointi Optunalla