Kurssisisältö
Lineaarinen Regressio Pythonilla
Lineaarinen Regressio Pythonilla
Ylisovittaminen
Ylisopeutus
Tarkastellaan kahta alla olevaa regressiosuoraa. Kumpi niistä on parempi?
Mittarit kertovat meille, että toinen on parempi. Käytämme siis sitä ennustamaan uusia arvoja! 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 ylisovittaa opetusdatan. Ylisopeutus tarkoittaa, että rakennettu malli on liian monimutkainen ja sopii täydellisesti opetusdataan, mutta ei ennusta aiemmin näkemättömiä tapauksia kovin hyvin.
Aliharsinta
On olemassa myös toinen käsite, aliharsinta. Tämä tarkoittaa, että rakennettu malli on liian yksinkertainen, eikä se sovi edes opetusdataan hyvin. Tällöin myös näkemättömien tapausten ennusteet ovat vääriä.
Voimme yrittää arvioida, ali- vai ylisovittaako malli visuaalisesti.
Tiedämme jo, ettei monen muuttujan lineaarista regressiota voi visualisoida helposti. Onko olemassa jokin muu tapa arvioida, ali- vai ylisovittaako malli? Kyllä on.
Koulutus- ja testijoukon jako
Haluamme tietää, miten malli suoriutuu näkemättömillä havaintoarvoilla. Tätä varten tarvitsemme 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 voimme rakentaa mallin koulutusjoukolla, 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ä haluat käyttää noin 20–30 % koulutusjoukosta testijoukkona, ja loput 70–80 % jää koulutusjoukoksi. Scikit-learn tarjoaa yksinkertaisen funktion joukon satunnaiseen jakamiseen:
Esimerkiksi, jakaaksesi opetusjoukon 70 % koulutus- ja 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!