koneoppiminen - monomittainen regressio
- Edellinen Sivu Lineaarinen Regressio
- Seuraava Sivu Monivaiheinen Regressio
Monimutkainen regressio (Polynomial Regression)
Jos tietojen kohteet eivät selvästikään sovellu lineaariseen regressioon (läpäisee tietopisteiden väliset suorat), monimutkainen regressio saattaa olla ihanteellinen valinta.
Kuten lineaariregressiossa, polynomiregressio käyttää muuttujia x ja y välillä olevaa suhdetta löytääkseen parhaan tavan piirtää datapisteiden viivat.

Toimintamekanismi
Pythonilla on joitakin tapoja löytää tietojen välisiä suhteita ja piirtää polynomiregressiolinjan.
Alapuoleisessa esimerkissä rekisteröimme 18 autoa, jotka kulkevat läpi tietyn maksukanavan.
Olemme tallentaneet autojen nopeuden ja läpikulun ajankohdan (tunti).
x-akseli edustaa päivän tuntia, y-akseli nopeutta:
Esimerkki
Ensimmäinen askel on piirtää pisteiden joukko:
import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] plt.scatter(x, y) plt.show()
Tulos:

Esimerkki
tuo numpy
ja matplotlib
ja sitten piirrä polynomiregressiolinja:
import numpy import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(1, 22, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Tulos:

Esimerkki selityksestä
Tuo tarvittavat moduulit:
import numpy import matplotlib.pyplot as plt
Luo taulukko, joka edustaa x- ja y-akselin arvoja:
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
NumPy:llä on tapa rakentaa polynomimalli:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Määritä sitten rivien näyttö tapa, aloitamme paikasta 1 ja päätymme paikkaan 22:
myline = numpy.linspace(1, 22, 100)
Piirrä alkuperäinen pisteiden joukko:
plt.scatter(x, y)
Piirrä polynomiregressiolinja:
plt.plot(myline, mymodel(myline))
Näytä kaaviot:
plt.show()
R-Squared
On tärkeää tietää, kuinka hyvin x- ja y-akselin arvojen välillä on suhde, koska ilman suhdetta polynomiregressio ei voi ennustaa mitään.
Tämä suhde mitataan arvon nimellä r-squared (r-neliö).
R-squared -arvon alue on 0-1, jossa 0 tarkoittaa epäriippuvuutta ja 1 tarkoittaa 100% riippuvuutta.
Python ja Sklearn-moduuli laskentaa tämän arvon puolestasi, sinun täytyy vain syöttää x- ja y-taulukot:
Esimerkki
Kuinka hyvin minun dataani sovittaa polynomiregressio?
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Huomautus:Tulos 0.94 osoittaa hyvän suhteen, ja voimme käyttää polynomiregressiota tulevissa ennusteissa.
Ennusta tulevaisuuden arvoja
Nyt voimme käyttää keräämiämme tietoja tulevien arvojen ennustamiseen.
Esimerkiksi: yritetään ennustaa autojen nopeutta noin 17 tunnin ajalla, kun ne kulkevat läpi maksukanavan:
Tätä varten tarvitsemme saman esimerkin: mymodel Taulukko:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Esimerkki
Ennusta 17 tunnin kuluttua autojen nopeutta:
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) speed = mymodel(17) print(speed)
Esimerkin ennustusnopeus on 88.87, ja sen voimme nähdä myös kuvassa:

Huono sovitus?
Lähdetään luomaan esimerkki, jossa polynomiregressio ei ole paras tapa ennustaa tulevaisuuden arvoja.
Esimerkki
Nämä x- ja y-aksojen arvot aiheuttavat polynomiregression sopivuuden erittäin huonoksi:
import numpy import matplotlib.pyplot as plt x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(2, 95, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Tulos:

Mikä on r-squared-arvo?
Esimerkki
Varmasti saat erittäin alhaisen r-squared-arvon.
import numpy from sklearn.metrics import r2_score x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Tulos: 0.00995 osoittaa erittäin heikon suhteen ja kertoo, että tietojoukko ei sovellu polynomiregressiolle.
- Edellinen Sivu Lineaarinen Regressio
- Seuraava Sivu Monivaiheinen Regressio