Maskininlärning - Träning/test

Evaluera modellen

I maskininlärning skapar vi modeller för att förutsäga resultatet av vissa händelser, precis som i föregående kapitel när vi förutsåg koldioxidutsläppet från bilar när vi förstod vikten och motorns effekt.

För att mäta om modellen är tillräckligt bra, kan vi använda en metod som kallas träning/test.

Vad är träning/test

Träning/test är en metod för att mäta modellens noggrannhet.

Anledningen till att det kallas träning/test är att vi delar upp datasetet i två grupper: trändataset och testdataset.

80% används för träning, 20% används för test.

Du kan använda trändataset för att träna modellen.

Du kan använda testdataset för att testa modellen.

Träna modellen innebär att skapa modellen.

Testa modellen innebär att testa modellens noggrannhet.

Börja med dataset.

Börja med att testa dataset.

Vår dataset visar 100 kunder i affären och deras inköpsvanor.

Exempel

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-axeln representerar antalet minuter innan köp.

Y-axeln representerar beloppet som spenderas på köp.


Kör Exempel

Dela upp träning/TEST

Träningset bör vara en slumpmässig urval av 80% av det ursprungliga datasetet.

Testdatasetet bör vara de resterande 20%.

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

Visa träningset

Visa samma scatterplot som träningset:

Exempel

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

Resultat:

Det ser ut som det ursprungliga datasetet, så det verkar vara ett rimligt val:


Kör Exempel

Visa testdatasetet

För att säkerställa att testdatasetet inte är helt annorlunda måste vi också titta på testdatasetet.

Exempel

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

Resultat:

Testdatasetet ser också ut som det ursprungliga datasetet:


Kör Exempel

Passa datasetet

Hur ser datasetet ut? Jag tror att det bästa är att passa ett polynomregression, så låt oss rita en polynomregressionlinje.

För att rita en linje genom datapunkterna använder vi matplotlib-modulens plott() Metod:

Exempel

Rita en polynomregressionlinje genom datapunkterna:

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 Exempel

Detta resultat kan stödja vårt förslag att använda polynomregression för att passera datasetet, även om vi försöker förutsäga värden utanför datasetet kan ge oss några konstiga resultat. Till exempel: denna rad indikerar att en kund handlar i 6 minuter i affären, kommer att slutföra ett köp värderat till 200. Detta kan vara ett tecken på överfitting.

Men vad är R-squared score? R-squared score visar mycket bra hur väl min dataset passar modellen.

R2

Kom ihåg R2, också kallad R-kvadrat (R-squared)?

Den mäter förhållandet mellan x-axeln och y-axeln, med ett värde på 0 till 1, där 0 betyder inget förhållande och 1 betyder fullt förhållande.

Sklearn-modulen har en modul som heter rs_score() Metoden, som kommer att hjälpa oss att hitta detta förhållande.

Här måste vi mäta kundernas tid i affären och hur mycket de spenderar.

Exempel

Hur passar vår träningdata i polynomregression?

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)

Kör Exempel

Kommentar:Resultatet 0.799 visar att relationen är bra.

Introducera testdataset

För närvarande, minst i träningdata, har vi byggt ett bra modell.

Sedan, måste vi använda testdata för att testa modellen för att kontrollera om den ger samma resultat.

Exempel

Låt oss fastställa R2-score när vi använder testdata:

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)

Kör Exempel

Kommentar:Resultatet 0.809 indikerar att modellen också är lämplig för testdata, och vi är övertygade om att vi kan använda modellen för att förutsäga framtida värden.

Förutsägningsvärden

Nu när vi har fastställt att vår modell är bra, kan vi börja förutsäga nya värden.

Exempel

Hur mycket kommer en kund att spendera om han eller hon stannar i butiken i 5 minuter?

print(mymodel(5))

Kör Exempel

Exempeln förutsäger att kunden har spenderat 22.88 dollar, vilket verkar korrelera med diagrammet: