Maschinelles Lernen – Trainieren/Testen
Bewerten Sie Ihr Modell
Beim maschinellen Lernen erstellen wir Modelle, um das Ergebnis bestimmter Ereignisse vorherzusagen, wie im vorherigen Kapitel, wo wir den CO2-Ausstoß eines Autos vorhergesagt haben, wenn wir das Gewicht und die Motorgröße kannten.
Um zu messen, ob das Modell gut genug ist, können wir eine Methode namens Train/Test verwenden.
Was ist Trainieren/Testen
Trainieren/Testen ist eine Methode zum Messen der Genauigkeit Ihres Modells.
Es heißt Train/Test, weil Sie den Datensatz in zwei Sätze aufteilen: einen Trainingssatz und einen Testsatz.
80 % für Schulungen und 20 % für Tests.
Sie trainieren das Modell mit dem Trainingsset.
Sie testen das Modell mit dem Testset.
Das Modell trainieren bedeutet , das Modell zu erstellen .
Das Modell testen bedeutet, die Genauigkeit des Modells zu testen.
Beginnen Sie mit einem Datensatz
Beginnen Sie mit einem Datensatz, den Sie testen möchten.
Unser Datensatz zeigt 100 Kunden in einem Geschäft und ihre Einkaufsgewohnheiten.
Beispiel
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()
Ergebnis:
Die x-Achse stellt die Anzahl der Minuten dar, bevor ein Kauf getätigt wird.
Die y-Achse stellt den Geldbetrag dar, der für den Kauf ausgegeben wurde.
In Zug/Test aufteilen
Der Trainingssatz sollte eine zufällige Auswahl von 80 % der Originaldaten sein.
Der Testsatz sollte die restlichen 20 % betragen.
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
Zeigen Sie den Trainingssatz an
Zeigen Sie dasselbe Streudiagramm mit dem Trainingssatz an:
Beispiel
plt.scatter(train_x,
train_y)
plt.show()
Ergebnis:
Es sieht aus wie der Originaldatensatz, also scheint es eine faire Auswahl zu sein:
Zeigen Sie das Testset an
Um sicherzustellen, dass das Testing-Set nicht völlig anders ist, werden wir uns auch das Testing-Set ansehen.
Beispiel
plt.scatter(test_x,
test_y)
plt.show()
Ergebnis:
Der Testsatz sieht auch wie der ursprüngliche Datensatz aus:
Passen Sie den Datensatz an
Wie sieht der Datensatz aus? Meiner Meinung nach wäre die beste Anpassung eine polynomiale Regression , also ziehen wir eine Linie der polynomialen Regression.
Um eine Linie durch die Datenpunkte zu ziehen, verwenden wir die
plot()
Methode des Moduls matplotlib:
Beispiel
Zeichnen Sie eine Polynom-Regressionsgerade durch die Datenpunkte:
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()
Ergebnis:
Das Ergebnis kann meinen Vorschlag stützen, dass der Datensatz zu einer Polynomregression passt, obwohl es uns einige seltsame Ergebnisse liefern würde, wenn wir versuchen würden, Werte außerhalb des Datensatzes vorherzusagen. Beispiel: Die Linie zeigt an, dass ein Kunde, der 6 Minuten im Geschäft verbringt, einen Einkauf im Wert von 200 tätigen würde. Das ist wahrscheinlich ein Zeichen für Overfitting.
Aber was ist mit dem R-Quadrat-Score? Der R-Quadrat-Score ist ein guter Indikator dafür, wie gut mein Datensatz zum Modell passt.
R2
Erinnerst du dich an R2, auch bekannt als R-Quadrat?
Es misst die Beziehung zwischen der x-Achse und der y-Achse, und der Wert reicht von 0 bis 1, wobei 0 keine Beziehung bedeutet und 1 vollständig verbunden bedeutet.
Das sklearn-Modul hat eine aufgerufene Methode r2_score()
, die uns hilft, diese Beziehung zu finden.
In diesem Fall möchten wir das Verhältnis zwischen den Minuten, die ein Kunde im Geschäft verweilt, und dem Geld, das er ausgibt, messen.
Beispiel
Wie gut passen meine Trainingsdaten in eine 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)
Hinweis: Das Ergebnis 0,799 zeigt, dass eine OK-Beziehung vorliegt.
Bringen Sie das Testset mit
Jetzt haben wir ein Modell erstellt, das in Ordnung ist, zumindest was die Trainingsdaten betrifft.
Jetzt wollen wir das Modell auch mit den Testdaten testen, um zu sehen, ob wir das gleiche Ergebnis erhalten.
Beispiel
Lassen Sie uns den R2-Score finden, wenn Sie Testdaten verwenden:
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)
Hinweis: Das Ergebnis 0,809 zeigt, dass das Modell auch zum Testsatz passt, und wir sind zuversichtlich, dass wir das Modell verwenden können, um zukünftige Werte vorherzusagen.
Werte vorhersagen
Nachdem wir festgestellt haben, dass unser Modell in Ordnung ist, können wir mit der Vorhersage neuer Werte beginnen.
Beispiel
Wie viel Geld gibt ein kaufender Kunde aus, wenn er 5 Minuten im Laden bleibt?
print(mymodel(5))
Das Beispiel sagte voraus, dass der Kunde 22,88 Dollar ausgeben würde, was dem Diagramm zu entsprechen scheint: