Ristivalidointi
Edellisessä luvussa mallin arviointiin käytettiin train-test-jakoa. Tällä menetelmällä on kaksi pääasiallista haittapuolta:
- Rajoitettu määrä koulutusdataa: vain osa aineistosta käytetään koulutukseen, 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ä ristiinvalidointi.
Ensiksi jaa koko aineisto viiteen yhtä suureen osaan, joita kutsutaan taitoksiksi.
Seuraavaksi käytä yhtä taitosta testijoukkona ja yhdistä loput taitokset muodostaaksesi koulutusjoukon.
Kuten missä tahansa arviointiprosessissa, koulutusjoukkoa käytetään mallin opettamiseen, kun taas testijoukkoa käytetään mallin suorituskyvyn mittaamiseen.
Prosessi toistetaan siten, että jokainen 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 ristvalidointipisteet 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 käytetään opetusjoukkona ja 1 osa testijoukkona. 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 vakampia 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, kun määritetään 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, jolloin voidaan valita arvo, joka tuottaa johdonmukaisesti parhaan suorituskyvyn.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain how cross-validation improves model evaluation compared to train-test split?
What are some common use cases for cross-validation in machine learning?
How do I choose the number of folds for cross-validation?
Awesome!
Completion rate improved to 3.13
Ristivalidointi
Pyyhkäise näyttääksesi valikon
Edellisessä luvussa mallin arviointiin käytettiin train-test-jakoa. Tällä menetelmällä on kaksi pääasiallista haittapuolta:
- Rajoitettu määrä koulutusdataa: vain osa aineistosta käytetään koulutukseen, 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ä ristiinvalidointi.
Ensiksi jaa koko aineisto viiteen yhtä suureen osaan, joita kutsutaan taitoksiksi.
Seuraavaksi käytä yhtä taitosta testijoukkona ja yhdistä loput taitokset muodostaaksesi koulutusjoukon.
Kuten missä tahansa arviointiprosessissa, koulutusjoukkoa käytetään mallin opettamiseen, kun taas testijoukkoa käytetään mallin suorituskyvyn mittaamiseen.
Prosessi toistetaan siten, että jokainen 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 ristvalidointipisteet 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 käytetään opetusjoukkona ja 1 osa testijoukkona. 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 vakampia 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, kun määritetään 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, jolloin voidaan valita arvo, joka tuottaa johdonmukaisesti parhaan suorituskyvyn.
Kiitos palautteestasi!