Kurssisisältö
Lineaarinen Regressio Pythonilla
Lineaarinen Regressio Pythonilla
Mittarit
Mallia rakentaessa on tärkeää mitata sen suorituskykyä.
Tarvitsemme mallille pisteytyksen, joka kuvaa tarkasti, kuinka hyvin se sopii aineistoon. Tätä pistettä kutsutaan metriksi, ja erilaisia metriikoita on useita.
Tässä luvussa keskitymme yleisimmin käytettyihin metriikoihin.
Käytämme seuraavaa merkintätapaa:
Olemme jo tutustuneet yhteen metriikkaan, SSR (Sum of Squared Residuals), jota minimoimme löytääksemme optimaaliset parametrit.
Merkintätavallamme SSR:n kaava voidaan esittää seuraavasti:
tai yhtä lailla:
Tämä metriikka soveltui hyvin mallien vertailuun, kun havaintojen määrä oli sama. Se ei kuitenkaan anna käsitystä mallin suorituskyvystä. Tässä syy:
Oletetaan, että sinulla on kaksi mallia eri harjoitusaineistoilla (kuvassa alla).
Ensimmäinen malli näyttää sopivan hyvin, mutta sillä on silti korkeampi SSR kuin toisella mallilla, joka visuaalisesti sopii aineistoon huonommin. Tämä johtuu vain siitä, että ensimmäisessä mallissa on paljon enemmän havaintopisteitä, joten summa on suurempi, mutta keskimäärin ensimmäisen mallin residuaalit ovat pienempiä. Siksi neliöityjen residuaalien keskiarvon käyttäminen metriikkana kuvaisi mallia paremmin. Juuri tätä tarkoittaa Mean Squared Error (MSE).
MSE
tai yhtä lailla:
MSE-metriikan laskemiseen Pythonilla voit käyttää NumPyn funktioita:
mse = np.mean((y_true-y_pred)**2)
Tai voit käyttää Scikit-learnin mean_squared_error()
-metodia:
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_true, y_pred)
Missä y_true
on taulukko todellisista tavoitearvoista ja y_pred
on taulukko samoille piirteille ennustetuista tavoitearvoista.
Ongelma on, että virhe esitetään neliöitynä. Esimerkiksi, jos mallin MSE talojen hintojen ennustamisessa on 49 dollars². Olemme kiinnostuneita hinnasta, emme hinnan neliöstä, kuten MSE antaa, joten haluamme ottaa MSE:n neliöjuuren ja saada 7 dollars. Nyt meillä on metriikka, jolla on sama yksikkö kuin ennustetulla arvolla. Tätä metriikkaa kutsutaan nimellä Root Mean Squared Error (RMSE).
RMSE
RMSE-metriikan laskemiseen Pythonilla voit käyttää NumPyn funktioita:
rmse = np.sqrt(np.mean((y_true-y_pred)**2))
Tai voit käyttää Scikit-learnin mean_squared_error()
-metodia parametrilla squared=False
:
from sklearn.metrics import mean_squared_error
rmse = mean_squared_error(y_true, y_pred, squared=False)
MAE
SSR:ssä residuaalit korotettiin toiseen potenssiin, jotta merkki saatiin poistettua. Toinen lähestymistapa on ottaa residuaalien itseisarvot korottamisen sijaan. Tämä on Mean Absolute Errorin (MAE) perusajatus.
tai yhtä lailla
Se on sama kuin MSE, mutta jäännösten neliöimisen sijaan otetaan niiden itseisarvot.
Vaikka MAE on samankaltainen kuin MSE, koska se käyttää jäännösten itseisarvoja, se on kestävämpi poikkeaville arvoille, sillä se ei korosta suuria virheitä yhtä paljon kuin MSE. Tämän vuoksi MAE on usein parempi valinta, kun aineistossa on poikkeavia arvoja, koska sen arvo ei kasva suhteettomasti muutaman äärimmäisen virheen vuoksi.
MAE-metriikan laskemiseen Pythonilla voit käyttää NumPyn funktioita:
mae = np.mean(np.fabs(y_true-y_pred))
Tai voit käyttää Scikit-learnin mean_absolute_error()
-metodia:
from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(y_true, y_pred)
Parametrien valintaan käytettiin SSR-metriikkaa. Tämä johtui siitä, että se soveltui hyvin matemaattisiin laskelmiin ja mahdollisti normaalin yhtälön johtamisen. Mallien vertailuun voidaan kuitenkin käyttää myös muita metriikoita.
Mallien vertailussa SSR, MSE ja RMSE valitsevat aina identtisesti, mikä malli on parempi ja mikä huonompi. MAE voi joskus suosia eri mallia kuin SSR/MSE/RMSE, koska nämä rankaisevat suuria residuaaleja huomattavasti enemmän. Yleensä kannattaa valita yksi metriikka etukäteen ja keskittyä sen minimointiin.
Nyt voit varmasti todeta, että toinen malli on parempi, koska kaikki sen metriikat ovat pienempiä. Kuitenkin pienemmät metriikat eivät aina tarkoita, että malli on parempi.
Kiitos palautteestasi!