koneoppiminen - koulutus/testaus

Evaluate the model

In machine learning, we create models to predict the results of certain events, just like in the previous chapter when we understood weight and engine displacement, we predicted the carbon dioxide emissions of cars.

To measure whether the model is good enough, we can use a method called training/test.

What is training/test

Training/test is a method to measure the accuracy of the model.

It is called training/test because we divide the dataset into two groups: training set and test set.

80% for training, 20% for testing.

You can use the training set to train the model.

You can use the test set to test the model.

Training the model means creating the model.

Testing the model means testing the accuracy of the model.

Start with the dataset.

Start with the dataset to be tested.

Our dataset shows 100 customers in a store and their shopping habits.

Esimerkki

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
plt.scatter(x, y)
plt.show()

Tulos:

X-akseli edustaa ostamisen alkamista minuuteina.

Y-akseli edustaa ostoksiin käytettyä summaa.


Suorita Esimerkki

Koulutus- ja testijoukon erottaminen

Koulutusjoukko tulisi olla alkuperäisen tiedon 80 prosenttia satunnaisesta valinnasta.

Testitietojoukko tulisi olla 20 prosenttia jäljelle jääneistä.

train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]

Näytetään koulutusjoukko

Näytetään samanlaiset kuviot kuin koulutusjoukossa:

Esimerkki

plt.scatter(train_x, train_y)
plt.show()

Tulos:

Se näyttää alkuperäiseltä tietojoukolta, joten se näyttää olevan järkevä valinta:


Suorita Esimerkki

Näytetään testitietojoukko

Varmistaaksemme, että testitietojoukko ei ole täysin erilainen, tarkastelemme myös testitietojoukkoa.

Esimerkki

plt.scatter(test_x, test_y)
plt.show()

Tulos:

Testitietojoukko näyttää myös alkuperäiseltä tietojoukolta:


Suorita Esimerkki

Sovitetaan tietojoukko

Tietojoukon rakenne? Uskon, että paras sopiva malli on polynomial regression, joten piirretään polynomial regressionin viiva.

Jotta voimme piirtää viivan tietojen pisteiden läpi, käytämme matplotlib-moduulin plott() Menetelmä:

Esimerkki

Piirretään läpi tietojen pisteiden polynomial regressionin viiva:

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
myline = numpy.linspace(0, 6, 100)
plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()

Tulos:


Suorita Esimerkki

Tämä tulos voi tukea suosituksiamme tietojoukon sopivuudesta polynomial regressioniin, vaikka ennustamalla tietojoukon ulkopuolisia arvoja voisi tuottaa joitakin omituisia tuloksia. Esimerkiksi: tämä rivi osoittaa, että joku asiakas shoppaa kaupassa 6 minuuttia ja tekee ostoksen, joka maksaa 200 euroa. Tämä voi olla merkki ylivalistumisesta.

Mutta mitä tulee R-squared scoreen? R-squared score antaa hyvän kuvan tietojoukon sopivuudesta malliin.

R2

Muistatko R2:n, myös tunnettu R-neliönä (R-squared)?

Se mittaa x- ja y-akselin välistä suhdetta, arvot vaihtelevat 0:sta 1:een, joista 0 tarkoittaa, että suhdetta ei ole olemassa, ja 1 tarkoittaa täydellistä vastaavuutta.

sklearn-moduuli sisältää nimeltään rs_score() Tämä menetelmä, joka auttaa meitä löytämään tämän suhteen.

Tässä meidän täytyy mitata asiakkaiden viettämä aika kaupassa ja heidän kuluttamansa summa välillä.

Esimerkki

Kuinka hyvin koulutusdatamme sopii polynomial regressioniin?

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
r2 = r2_score(train_y, mymodel(train_x))
print(r2)

Suorita Esimerkki

Huomautus:Tulos 0.799 osoittaa hyvän suhteen.

Testitietojen käyttöönotto

Nyt, ainakin koulutusdatan osalta, olemme rakentaneet melko hyvän mallin.

Sitten meidän täytyy käyttää testidataa mallin testaamiseen, jotta voimme varmistaa, että se antaa samanlaisia tuloksia.

Esimerkki

Ratkaise R2 -kerroin käyttäen testidataa: }}

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
r2 = r2_score(test_y, mymodel(test_x))
print(r2)

Suorita Esimerkki

Huomautus:Tuloksen 0,809 mukaan malli sopii myös testipakettiin, ja olemme varmoja, että voimme käyttää tätä mallia ennustamaan tulevia arvoja.

Ennustettu Arvo

Nyt kun olemme varmistaneet, että mallimme on hyvä, voimme aloittaa uusien arvojen ennustamisen.

Esimerkki

Jos ostava asiakas viettää 5 minuuttia kaupassa, kuinka paljon hän/heidän tulee kuluttaa?

print(mymodel(5))

Suorita Esimerkki

Tämä esimerkki ennustaa, että asiakas käytti 22,88 dollaria, mikä näyttää vastaavan kaaviota: