Mekaaninen oppiminen - lineaarinen regressio
- Edellinen sivu Leviäisdiagrammi
- Seuraava sivu Monimutkainen polynomiregressio
Palautus
Kun yrität löytää muuttujien välisiä suhteita, käytetään termiä “regression” (palautus).
Tietokoneoppimisessa ja tilastollisessa mallinnuksessa tämä suhde käytetään tulevien tapahtumien tulosten ennustamiseen.
Lineaarinen regressio
Lineaarinen regressio piirtää suoran kaiken datan välillä käyttäen tietojen välisiä suhteita.
Tämä viiva voidaan käyttää tulevien arvojen ennustamiseen.

Mekaanikassa tulevaisuuden ennustaminen on erittäin tärkeää.
Toimintamekanismi
Python tarjoaa joitakin menetelmiä tietojen välisissä suhteiden löytämiseen ja lineaarisen regressiolinjan piirtämiseen. Näytämme, miten näitä menetelmiä käytetään matemaattisten kaavojen sijaan.
Seuraavassa esimerkissä x-akseli edustaa autojen ikää, y-akseli nopeutta. Olemme tallentaneet 13 autoa, jotka ovat kuluneet läpi liikenneveron, ikä ja nopeus. Tarkistetaan, voidaanko keräämämme tiedot käyttää lineaarisen regression:
Esimerkki
Ensiksi piirretään pisteiden joukko:
import matplotlib.pyplot as plt x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] plt.scatter(x, y) plt.show()
Tulos:

Esimerkki
tuodaan scipy
ja piirretään lineaarinen regressiolinja:
import matplotlib.pyplot as plt from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): palauta kaltevuus * x + etäisyys mymodel = list(map(myfunc, x)) plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
Tulos:

Esimerkki selityksestä
Tuodaan tarvittavat moduulit:
import matplotlib.pyplot as plt from scipy import stats
Luo taulukko, joka edustaa x- ja y-akselin arvoja:
x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
Suorita menetelmä, joka palauttaa lineaarisen regression tärkeät avainsanat:
slope, intercept, r, p, std_err = stats.linregress(x, y)
Luo käyttäen slope
ja intercept
Arvon funktio palauttaa uuden arvon. Tämä uusi arvo edustaa vastaavaa x-arvoa, joka asetetaan y-akselille:
def myfunc(x): palauta kaltevuus * x + etäisyys
Suorita funktio x-taulukon jokaiselle arvolle. Tämä tuottaa uuden taulukon, jossa y-akseli on uudet arvot:
mymodel = list(map(myfunc, x))
Piirrä alkuperäinen pisteiden joukko:
plt.scatter(x, y)
Piirrä lineaarinen regressiolinja:
plt.plot(x, mymodel)
Näytä kuva:
plt.show()
R-Squared
On tärkeää tietää, kuinka hyvin x-akselin ja y-akselin arvot ovat yhteydessä toisiinsa, sillä ilman suhdetta lineaarinen regressio ei voi ennustaa mitään.
Tämä suhde mitataan arvon nimellä r-squared (r-neliö).
R-squared-arvon alue on 0-1, joista 0 tarkoittaa mittaamatonta ja 1 tarkoittaa 100%:n vastaavuutta.
Python ja Scipy-moduuli laskentavat tämän arvon puolestasi, sinun on vain tarjottava sille x- ja y-arvot:
Esimerkki
Miten tietoni sovittuvat lineaariseen regressioon?
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
Huomautus:Tulos -0.76 osoittaa, että on olemassa jokin suhde, mutta se ei ole täydellinen suhde, mutta se osoittaa, että voimme käyttää lineaarista regressiota tulevien ennusteiden tekemiseen.
Ennusta tulevaisuuden arvoja
Nyt voimme käyttää keräämiämme tietoja tulevien arvojen ennustamiseen.
Esimerkiksi: yritetään ennustaa 10-vuotiaan autojen nopeutta.
Tätä varten tarvitsemme samaa kuin edellisessä esimerkissä myfunc()
Funktio:
def myfunc(x): palauta kaltevuus * x + etäisyys
Esimerkki
Ennusta 10-vuotiaan autojen nopeutta:
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): palauta kaltevuus * x + etäisyys speed = myfunc(10) print(speed)
Esimerkin ennustusnopeus on 85.6, ja voimme myös lukea sen kuvasta:

Huono sovitus?
Luo esimerkki, jossa lineaarinen regressio ei ole paras tapa ennustaa tulevaisuuden arvoja.
Esimerkki
Nämä x- ja y-aksojen arvot aiheuttavat erittäin huonon sovitustuloksen lineaariseen regressioon:
import matplotlib.pyplot as plt from scipy import stats 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] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): palauta kaltevuus * x + etäisyys mymodel = list(map(myfunc, x)) plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
Tulos:

ja r-squared-arvosta?
Esimerkki
Olet saanut erittäin alhaisen r-squared-arvon.
import numpy from scipy import stats 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] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
Tulos: 0.013 ilmaisee erittäin huonon suhteen ja kertoo, että tietojoukko ei sovellu lineaariseen regressioon.
- Edellinen sivu Leviäisdiagrammi
- Seuraava sivu Monimutkainen polynomiregressio