Ristiinvalidointi
Edellisessä luvussa mallin arviointiin käytettiin train-test-jakoa. Tällä menetelmällä on kaksi merkittävää haittapuolta:
- Rajoitettu opetusdata: vain osa aineistosta käytetään mallin opettamiseen, vaikka suurempi määrä dataa yleensä parantaa suorituskykyä.
- Riippuvuus jaosta: koska jako tehdään satunnaisesti, tulokset voivat vaihdella huomattavasti eri ajojen välillä.
Näiden ongelmien ratkaisemiseksi käytetään vaihtoehtoista arviointimenetelmää nimeltä ristivalidointi.
Ensiksi jaa koko aineisto viiteen yhtä suureen osaan, joita kutsutaan taitoksiksi (folds).
Seuraavaksi käytä yhtä taitosta testijoukkona ja yhdistä loput taitokset muodostamaan opetusjoukko.
Kuten missä tahansa arviointiprosessissa, koulutusjoukkoa käytetään mallin opettamiseen, kun taas testijoukkoa käytetään sen suorituskyvyn mittaamiseen.
Prosessi toistetaan siten, että kukin osa toimii kerran testijoukkona, kun taas jäljelle jäävät osat muodostavat koulutusjoukon.
Tämä prosessi tuottaa viisi tarkkuuspistettä, yhden kustakin jaosta. Näiden pisteiden keskiarvo antaa mallin keskimääräisen suorituskyvyn.
Pythonissa ristivalidointipisteet voidaan laskea cross_val_score()
-funktiolla, joka löytyy sklearn.model_selection
-moduulista.
Vaikka esimerkissä käytetään 5 osaa, voit valita minkä tahansa määrän osia ristiinvalidointiin. Voit esimerkiksi käyttää 10 osaa, jolloin 9 osaa varataan opetusjoukolle ja 1 osa testijoukolle. Tämä on säädettävissä cv
-parametrilla cross_val_score()
-funktiossa.
1234567891011import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
Se tarjoaa vakauttavampia ja luotettavampia tuloksia kuin train-test split -menetelmä; kuitenkin se on huomattavasti hitaampi, koska mallin koulutus ja arviointi täytyy suorittaa viisi kertaa (tai n kertaa, jos asetat n osaa), verrattuna vain yhteen kertaan train-test split -menetelmällä.
Ristiinvalidointia käytetään tyypillisesti hyperparametrien virityksessä, jolloin koko ristiinvalidointiprosessi suoritetaan jokaiselle mahdolliselle hyperparametriarvolle.
Esimerkiksi määritettäessä optimaalista naapureiden määrää k-lähimmän naapurin algoritmissa, suoritetaan täysi ristiinvalidointikierros jokaiselle ehdokasarvolle. Tämä menetelmä varmistaa jokaisen hyperparametrin perusteellisen arvioinnin koko aineistolla, mahdollistaen sen arvon valinnan, joka tuottaa johdonmukaisesti parhaan suorituskyvyn.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 3.13
Ristiinvalidointi
Pyyhkäise näyttääksesi valikon
Edellisessä luvussa mallin arviointiin käytettiin train-test-jakoa. Tällä menetelmällä on kaksi merkittävää haittapuolta:
- Rajoitettu opetusdata: vain osa aineistosta käytetään mallin opettamiseen, vaikka suurempi määrä dataa yleensä parantaa suorituskykyä.
- Riippuvuus jaosta: koska jako tehdään satunnaisesti, tulokset voivat vaihdella huomattavasti eri ajojen välillä.
Näiden ongelmien ratkaisemiseksi käytetään vaihtoehtoista arviointimenetelmää nimeltä ristivalidointi.
Ensiksi jaa koko aineisto viiteen yhtä suureen osaan, joita kutsutaan taitoksiksi (folds).
Seuraavaksi käytä yhtä taitosta testijoukkona ja yhdistä loput taitokset muodostamaan opetusjoukko.
Kuten missä tahansa arviointiprosessissa, koulutusjoukkoa käytetään mallin opettamiseen, kun taas testijoukkoa käytetään sen suorituskyvyn mittaamiseen.
Prosessi toistetaan siten, että kukin osa toimii kerran testijoukkona, kun taas jäljelle jäävät osat muodostavat koulutusjoukon.
Tämä prosessi tuottaa viisi tarkkuuspistettä, yhden kustakin jaosta. Näiden pisteiden keskiarvo antaa mallin keskimääräisen suorituskyvyn.
Pythonissa ristivalidointipisteet voidaan laskea cross_val_score()
-funktiolla, joka löytyy sklearn.model_selection
-moduulista.
Vaikka esimerkissä käytetään 5 osaa, voit valita minkä tahansa määrän osia ristiinvalidointiin. Voit esimerkiksi käyttää 10 osaa, jolloin 9 osaa varataan opetusjoukolle ja 1 osa testijoukolle. Tämä on säädettävissä cv
-parametrilla cross_val_score()
-funktiossa.
1234567891011import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
Se tarjoaa vakauttavampia ja luotettavampia tuloksia kuin train-test split -menetelmä; kuitenkin se on huomattavasti hitaampi, koska mallin koulutus ja arviointi täytyy suorittaa viisi kertaa (tai n kertaa, jos asetat n osaa), verrattuna vain yhteen kertaan train-test split -menetelmällä.
Ristiinvalidointia käytetään tyypillisesti hyperparametrien virityksessä, jolloin koko ristiinvalidointiprosessi suoritetaan jokaiselle mahdolliselle hyperparametriarvolle.
Esimerkiksi määritettäessä optimaalista naapureiden määrää k-lähimmän naapurin algoritmissa, suoritetaan täysi ristiinvalidointikierros jokaiselle ehdokasarvolle. Tämä menetelmä varmistaa jokaisen hyperparametrin perusteellisen arvioinnin koko aineistolla, mahdollistaen sen arvon valinnan, joka tuottaa johdonmukaisesti parhaan suorituskyvyn.
Kiitos palautteestasi!