Mekaaninen oppiminen - lineaarinen regressio

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:


Suorita esimerkki

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:


Suorita esimerkki

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)

Suorita esimerkki

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)

Suorita esimerkki

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:


Suorita esimerkki

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)

Suorita esimerkki

Tulos: 0.013 ilmaisee erittäin huonon suhteen ja kertoo, että tietojoukko ei sovellu lineaariseen regressioon.