Δέντρο αποφάσεων

Αξιολόγηση μοντέλου

Στη μηχανική μάθηση, δημιουργούμε μοντέλα για να προβλέψουμε τα αποτελέσματα ορισμένων συμβάντων, όπως στο προηγούμενο κεφάλαιο όταν καταλάβαμε το βάρος και το όγκο του κινητήρα, προβλέψαμε τις εκπομπές CO2 του αυτοκινήτου.

Για να αξιολογήσουμε αν το μοντέλο είναι αρκετά καλό, μπορούμε να χρησιμοποιήσουμε έναν τρόπο που ονομάζεται εκπαίδευση/δοκιμή.

Τι είναι η εκπαίδευση/δοκιμή

Η εκπαίδευση/δοκιμή είναι ένας τρόπος μέτρησης της ακρίβειας του μοντέλου.

Ο λόγος που λέγεται εκπαίδευση/δοκιμή είναι ότι διαιρούμε τη βάση δεδομένων σε δύο ομάδες: σύνολο εκπαίδευσης και σύνολο δοκιμών.

80% για εκπαίδευση, 20% για δοκιμή.

Μπορείτε να χρησιμοποιήσετε το σύνολο εκπαίδευσης για να εκπαιδεύσετε το μοντέλο.

Μπορείτε να χρησιμοποιήσετε το σύνολο δοκιμών για να δοκιμάσετε το μοντέλο.

Η εκπαίδευση του μοντέλου σημαίνει τη δημιουργία του μοντέλου.

Η δοκιμή του μοντέλου σημαίνει τη δοκιμή της ακρίβειας του μοντέλου.

Αρχίζουμε από τη βάση δεδομένων.

Αρχίζουμε από την δεδομένη βάση δεδομένων που θα δοκιμάσουμε.

Η συλλογή δεδομένων μας παρουσιάζει 100 πελάτες καταστημάτων και τις συνήθειες αγοράς τους.

Παράδειγμα

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

Τα αποτελέσματα:

Ο κάθετη άξονας αντιπροσωπεύει το λεπτό που περνά πριν την αγορά.

Η οριζόντια άξονας αντιπροσωπεύει το ποσό που δαπανάται στην αγορά.


Εκτέλεση παραδείγματος

Διαχωρισμός εκπαίδευσης/δοκιμής

Η συλλογή εκπαίδευσης πρέπει να είναι η τυχαία επιλογή του 80% των αρχικών δεδομένων.

Η συλλογή δοκιμής πρέπει να είναι το 20% που απομένει.

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

Εμφάνιση συλλογής εκπαίδευσης

Εμφάνιση διαγράμματος σποράς όπως στο σύνολο εκπαίδευσης:

Παράδειγμα

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

Τα αποτελέσματα:

Φαίνεται να είναι παρόμοια με την αρχική συλλογή δεδομένων, οπότε φαίνεται να είναι μια λογική επιλογή:


Εκτέλεση παραδείγματος

Εμφάνιση συλλογής δοκιμής

Για να διασφαλίσουμε ότι η συλλογή δοκιμής δεν είναι εντελώς διαφορετική, πρέπει να δούμε και τη συλλογή δοκιμής.

Παράδειγμα

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

Τα αποτελέσματα:

Η συλλογή δοκιμής φαίνεται να είναι παρόμοια με την αρχική συλλογή δεδομένων:


Εκτέλεση παραδείγματος

Προσαρμογή δεδομένων

Τι είναι το σύνολο δεδομένων; Πιστεύω ότι η πιο κατάλληλη προσαρμογή είναι η πολυωνυμική αναγνωριστική σχέση, οπότε ας ζωγραφίσουμε μια γραμμή πολυωνυμικής αναγνωριστικής σχέσης.

Για να ζωγραφίσουμε μια γραμμή που περνάει από τα δεδομένα, χρησιμοποιούμε του moduлю matplotlib plott() Μέθοδος:

Παράδειγμα

Διαγράψτε την πολυωνυμική αναγνωριστική γραμμή που περνάει από τα δεδομένα;

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

Τα αποτελέσματα:


Εκτέλεση παραδείγματος

Το αποτέλεσμα μπορεί να υποστηρίξει την πρότασή μας για την προσαρμογή πολυωνυμικής αναγνωριστικής σχέσης στα δεδομένα, ακόμα και αν προσπαθήσουμε να προβλέψουμε τιμές εκτός του συνόλου δεδομένων και μας δίνει μερικά παράξενα αποτελέσματα. Για παράδειγμα: η γραμμή αυτή δείχνει ότι ένας πελάτης που περνά 6 λεπτά στο κατάστημα θα ολοκληρώσει μια αγορά αξίας 200.

Αλλά τι για την R-squared score; Η R-squared score δείχνει καλά την προσαρμογή του συνόλου δεδομένων στο μοντέλο.

R2

Θυμάστε το R2, γνωστό και ως R squared (R-squared);

Ο οποίος μετρά τη σχέση μεταξύ των άξονων x και y, με τιμές από 0 έως 1, όπου 0 σημαίνει ότι δεν υπάρχει σχέση και 1 σημαίνει πλήρη σχέση.

Ο модуль sklearn έχει ένα όνομα rs_score() Η μέθοδος, η οποία θα μας βοηθήσει να βρούμε αυτή τη σχέση.

Εδώ, πρέπει να μετρήσουμε τη σχέση μεταξύ του χρόνου που περνά ο πελάτης στο κατάστημα και του ποσού που δαπανά.

Παράδειγμα

Πώς είναι η ταινία των δεδομένων εκπαίδευσης στην πολυωνυμική αναγνωριστική σχέση;

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)

Εκτέλεση παραδείγματος

Σημειώσεις:Το αποτέλεσμα 0.799 δείχνει καλή σχέση.

Εισαγωγή συλλογής δοκιμής

Προς το παρόν, τουλάχιστον όσον αφορά τα δεδομένα εκπαίδευσης, έχουμε δημιουργήσει ένα καλή μοντέλο.

Καθώς, πρέπει να χρησιμοποιήσουμε δεδομένα δοκιμής για να δοκιμάσουμε το μοντέλο και να ελέγξουμε αν δίνει τα ίδια αποτελέσματα.

Παράδειγμα

Ας确定了在使用测试数据时的R2分数:

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)

Εκτέλεση παραδείγματος

Σημειώσεις:Το αποτέλεσμα 0,809 δείχνει ότι το μοντέλο είναι κατάλληλο και για το σύνολο των δεδομένων δοκιμής, είμαστε βέβαιοι ότι μπορούμε να χρησιμοποιήσουμε το μοντέλο για την πρόβλεψη μελλοντικών τιμών.

Πρόβλεψη τιμών

Τώρα που έχουμε διασφαλίσει ότι το μοντέλο μας είναι καλή, μπορούμε να ξεκινήσουμε να προβλέπουμε νέες τιμές.

Παράδειγμα

Αν ο πελάτης που αγοράζει μείνει στο κατάστημα για 5 λεπτά, πόσα χρήματα θα δαπανήσει;

print(mymodel(5))

Εκτέλεση παραδείγματος

Η πρόβλεψη αυτού του παραδείγματος είναι ότι ο πελάτης έχει δαπανήσει 22,88 δολάρια, φαίνεται να ταιριάζει με το γράφημα: