Maskinlæring - Træning/Testing

Evaluér modellen

I maskinlæring opretter vi modeller for at forudsige resultaterne af visse begivenheder, ligesom vi i det forrige kapitel forudsagde koldioxidemissionerne fra biler, når vi forstod vægt og motorvolumen.

For at måle, om modellen er tilstrækkelig god, kan vi bruge en metode kaldet træning/test.

Hvad er træning/test

Træning/test er en metode til at måle modellens nøjagtighed.

Det kaldes træning/test, fordi vi opdeler datasettet i to grupper: træningsdatasettet og testdatasettet.

80% bruges til træning, 20% bruges til test.

Du kan bruge træningsdatasettet til at træne modellen.

Du kan bruge testdatasettet til at teste modellen.

At træne modellen betyder at oprette modellen.

At teste modellen betyder at teste modellens nøjagtighed.

Start med datasettet.

Start med de data, der skal testes.

Vores dataset viser 100 kunder i butikken og deres indkøbsvaner.

Eksempel

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()

Resultat:

X-aksen viser antallet af minutter før købet.

Y-aksen viser det beløb, der bruges på købet.


Kør Eksempel

Opdel træningsdata/testdata

Træningsdata bør være en tilfældig valgt 80% af det oprindelige data.

Testdata bør være de resterende 20%.

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

Vis træningsdata

Vis scatterplot sammenlignet med træningsdata:

Eksempel

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

Resultat:

Det ser ud som det oprindelige data set, så det ser ud til at være et rimeligt valg:


Kør Eksempel

Vis testdata

For at sikre, at testdata ikke er helt forskellige, skal vi også se på testdata.

Eksempel

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

Resultat:

Testdata ser også ud som det oprindelige data set:


Kør Eksempel

Tilpas data sets

Hvad ser data sets ud? Jeg mener, at det mest passende er at tilpasse med polynomisk regression, så lad os tegne en polynomisk regressionlinje.

For at tegne en linje gennem data punkterne bruger vi matplotlib-modulens plott() Metode:

Eksempel

Tegn en polynomisk regressionlinje gennem data punkterne:

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()

Resultat:


Kør Eksempel

Dette resultat kan støtte vores anbefaling om at tilpasse data sets med polynomisk regression, selvom vi forsøger at forudsige værdier uden for data sets, kan det give nogle mærkelige resultater. For eksempel: denne linje viser, at en kunde, der handler i 6 minutter, kan gennemføre en handel for 200.

Men hvad med R-squared score? R-squared score indikerer godt mine data sets tilpasning til modellen.

R2

Har du husket R2, også kendt som R-kvadrat (R-squared)?

Den måler forholdet mellem x-aksen og y-aksen, og tager værdier fra 0 til 1, hvor 0 betyder ingen relation og 1 betyder fuldstændig korrelation.

Sklearn-modulen har en funktion kaldet rs_score() Metoden, som vil hjælpe os med at finde denne relation.

Her skal vi måle kundernes opholdstid i butikken og deres udgifter.

Eksempel

Hvordan passer vores træningsdata til polynomisk regression?

import numpy
fra 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)

Kør Eksempel

Kommentar:Resultatet 0,799 viser en god relation.

Introduktion af testdata

I øjeblikket har vi mindst i træningsdata opbygget en god modell.

Så skal vi bruge testdata til at teste modellen for at kontrollere, om den giver de samme resultater.

Eksempel

Lad os bestemme R2-score, når vi bruger testdata:

import numpy
fra 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)

Kør Eksempel

Kommentar:Resultatet 0.809 indikerer, at modellen også er egnet til testdata, og vi er sikre på, at vi kan bruge modellen til at forudsige fremtidige værdier.

Forudsige Værdier

Nu hvor vi har bekræftet, at vores model er god, kan vi begynde at forudsige nye værdier.

Eksempel

Hvis en købskunde opholder sig i butikken i 5 minutter, hvor meget vil de bruge?

print(mymodel(5))

Kør Eksempel

Dette eksempel forudsiger, at kunden brugte 22.88 dollars, hvilket ser ud til at korresponderer med diagrammet: