Ylisovittaminen
Ylisyöttäminen
Tarkastele alla olevia kahta regressiosuoraa. Kumpi niistä on parempi?
Mittarit osoittavat, että toinen malli on parempi. Käytämme siis sitä uusien arvojen ennustamiseen! Tarvitsemme ennusteet arvoille X_new = [0.2,0.5,2.7]
. Kun saimme todelliset tavoitearvot juuri ennustamillemme X_new
-arvoille, kävi ilmi, että ensimmäinen malli antoi huomattavasti paremman ennusteen.
Tämä johtuu siitä, että toinen malli ylisyöttää opetusdatan. Ylisyöttäminen tarkoittaa, että rakennettu malli on liian monimutkainen ja sopii täydellisesti opetusdataan, mutta ei ennusta uusia, näkemättömiä havaintoja kovin hyvin.
Aliharjoittelu
On olemassa myös toinen käsite, alihajoittelu. Tämä tarkoittaa, että rakennettu malli on liian yksinkertainen, eikä se sovi edes harjoitusaineistoon kunnolla. Tällöin myös ennusteet näkemättömille tapauksille ovat vääriä.
Voimme yrittää päätellä, ali- vai ylisovittaako malli visuaalisesti.
Tiedämme jo, ettei monen muuttujan lineaarista regressiota voi visualisoida helposti. Onko olemassa toinen tapa arvioida, ali- vai ylisovittaako malli? Kyllä on.
Koulutus- ja testijoukon jako
Halutaan tietää, miten malli suoriutuu näkemättömillä havaintoarvoilla. Tätä varten tarvitaan näkemättömiä havaintoja, joilla on todelliset tavoitearvot. Todelliset tavoitearvot ovat kuitenkin vain koulutusjoukossa. Ratkaisuna on jakaa koulutusjoukko kahteen osaan: koulutusjoukkoon ja testijoukkoon.
Nyt voidaan rakentaa malli koulutusjoukon avulla, laskea metriikat koulutusjoukolla (nähdyt havainnot) ja sen jälkeen laskea metriikat testijoukolla (näkemättömät havainnot).
On olennaista jakaa koulutusjoukko satunnaisesti. Yleensä noin 20–30 % koulutusjoukosta käytetään testijoukkona ja loput 70–80 % jätetään koulutusjoukoksi. Scikit-learn tarjoaa yksinkertaisen funktion joukon satunnaiseen jakamiseen:
Esimerkiksi, jakaaksesi opetusjoukon 70 % koulutus-/30 % testijoukkoon, voit käyttää seuraavaa koodia:
from sklearn.model_selection import train_test_split # import the function
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 5.26
Ylisovittaminen
Pyyhkäise näyttääksesi valikon
Ylisyöttäminen
Tarkastele alla olevia kahta regressiosuoraa. Kumpi niistä on parempi?
Mittarit osoittavat, että toinen malli on parempi. Käytämme siis sitä uusien arvojen ennustamiseen! Tarvitsemme ennusteet arvoille X_new = [0.2,0.5,2.7]
. Kun saimme todelliset tavoitearvot juuri ennustamillemme X_new
-arvoille, kävi ilmi, että ensimmäinen malli antoi huomattavasti paremman ennusteen.
Tämä johtuu siitä, että toinen malli ylisyöttää opetusdatan. Ylisyöttäminen tarkoittaa, että rakennettu malli on liian monimutkainen ja sopii täydellisesti opetusdataan, mutta ei ennusta uusia, näkemättömiä havaintoja kovin hyvin.
Aliharjoittelu
On olemassa myös toinen käsite, alihajoittelu. Tämä tarkoittaa, että rakennettu malli on liian yksinkertainen, eikä se sovi edes harjoitusaineistoon kunnolla. Tällöin myös ennusteet näkemättömille tapauksille ovat vääriä.
Voimme yrittää päätellä, ali- vai ylisovittaako malli visuaalisesti.
Tiedämme jo, ettei monen muuttujan lineaarista regressiota voi visualisoida helposti. Onko olemassa toinen tapa arvioida, ali- vai ylisovittaako malli? Kyllä on.
Koulutus- ja testijoukon jako
Halutaan tietää, miten malli suoriutuu näkemättömillä havaintoarvoilla. Tätä varten tarvitaan näkemättömiä havaintoja, joilla on todelliset tavoitearvot. Todelliset tavoitearvot ovat kuitenkin vain koulutusjoukossa. Ratkaisuna on jakaa koulutusjoukko kahteen osaan: koulutusjoukkoon ja testijoukkoon.
Nyt voidaan rakentaa malli koulutusjoukon avulla, laskea metriikat koulutusjoukolla (nähdyt havainnot) ja sen jälkeen laskea metriikat testijoukolla (näkemättömät havainnot).
On olennaista jakaa koulutusjoukko satunnaisesti. Yleensä noin 20–30 % koulutusjoukosta käytetään testijoukkona ja loput 70–80 % jätetään koulutusjoukoksi. Scikit-learn tarjoaa yksinkertaisen funktion joukon satunnaiseen jakamiseen:
Esimerkiksi, jakaaksesi opetusjoukon 70 % koulutus-/30 % testijoukkoon, voit käyttää seuraavaa koodia:
from sklearn.model_selection import train_test_split # import the function
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
Kiitos palautteestasi!