Maskinlæring - Træning/Testing
- Forrige Side Zoom
- Næste Side Beslutningstræ
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.

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:

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:

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:

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)
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)
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))
Dette eksempel forudsiger, at kunden brugte 22.88 dollars, hvilket ser ud til at korresponderer med diagrammet:

- Forrige Side Zoom
- Næste Side Beslutningstræ