Polynomial Regression Μηχανικής Μάθησης
- Προηγούμενη Σελίδα Ανάγνωση Παράθυρου
- Επόμενη Σελίδα Πολυπαραγοντική Ανάλυση
Πολυωνυμική Ανάλυση (Polynomial Regression)
Εάν τα σημεία δεδομένων σας δεν ταιριάζουν显然 σε μια γραμμική καμπύλη (μέσω των σημείων δεδομένων), η πολυωνυμική ανάλυση είναι μια ιδανική επιλογή.
Ως και η γραμμική ανάλυση, η πολυωνυμική ανάλυση χρησιμοποιεί τη σχέση μεταξύ των μεταβλητών x και y για να βρει τον καλύτερο τρόπο να σχεδιάσει τη γραμμή των σημείων δεδομένων.

Μέθοδος λειτουργίας
Το Python έχει μερικές μεθόδους για να βρει τη σχέση μεταξύ των σημείων δεδομένων και να σχεδιάσει τη γραμμή πολυωνυμικής ανάλυσης. Θα σας δείξουμε πώς να χρησιμοποιήσετε αυτές τις μεθόδους αντί για μαθηματικές εξισώσεις.
Στο παρακάτω παράδειγμα καταγράψαμε 18 αυτοκίνητα που περνούσαν από μια συγκεκριμένη γέφυρα φόρου.
Έχουμε καταγράψει την ταχύτητα των αυτοκινήτων και τον χρόνο διέλευσης (ώρες).
Ο άξονας x αντιπροσωπεύει τις ώρες της ημέρας, ο άξονας y αντιπροσωπεύει την ταχύτητα:
Παράδειγμα
Πρώτα σχεδιάστε το διάγραμμα σημείων:
import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] plt.scatter(x, y) plt.show()
Αποτελέσματα:

Παράδειγμα
εισαγωγή numpy
και matplotlib
Στη συνέχεια, σχεδιάστε τη γραμμή πολυωνυμικής ανάλυσης:
import numpy import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(1, 22, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Αποτελέσματα:

Αιτιολογία παραδείγματος
Εισαγωγή των απαιτούμενων μοντέλων:
import numpy import matplotlib.pyplot as plt
Δημιουργία πινάκων που εκπροσωπούν τις τιμές του άξονα x και του άξονα y:
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
Το NumPy έχει μια μέθοδο που μας επιτρέπει να δημιουργήσουμε μοντέλα πολυωνυμικής ανάλυσης:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Ύστερα καθορίστε τον τρόπο εμφάνισης των γραμμών, ξεκινώντας από τη θέση 1 και τελειώνοντας στη θέση 22:
myline = numpy.linspace(1, 22, 100)
Σχεδίαση του αρχικού διαγράμματος σημείων:
plt.scatter(x, y)
Δημιουργία γραμμής πολυωνυμικής ανάλυσης:
plt.plot(myline, mymodel(myline))
Εμφάνιση γραφημάτων:
plt.show()
R-Squared
Είναι σημαντικό να γνωρίζουμε πόσο καλή είναι η σχέση μεταξύ των τιμών του άξονα x και του άξονα y, γιατί αν δεν υπάρχει σχέση, η πολυωνυμική ανάλυση δεν μπορεί να χρησιμοποιηθεί για την πρόβλεψη.
Η σχέση μετράται με την τιμή του r-squared (r-squared).
Η εμβέλεια του r-squared είναι από 0 έως 1, όπου 0 σημαίνει μη σχετικό και 1 σημαίνει 100% σχετικό.
Το Python και το modul Sklearn θα υπολογίσουν για εσάς την τιμή, πρέπει απλώς να εισάγετε τα πίνακες x και y:
Παράδειγμα
Πώς είναι η προσαρμογή των δεδομένων μου στην πολυωνυμική ανάλυση;
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Σημειώσεις:Το αποτέλεσμα 0.94 δείχνει ότι υπάρχει καλή σχέση, και μπορούμε να χρησιμοποιήσουμε την πολυωνυμική ανάλυση για μελλοντικές προβλέψεις.
Πρόβλεψη μελλοντικών τιμών
Τώρα, μπορούμε να χρησιμοποιήσουμε τις πληροφορίες που συλλέξαμε για να προβλέψουμε μελλοντικές τιμές.
Για παράδειγμα: δοκιμάστε να προβλέψετε την ταχύτητα των αυτοκινήτων που περνούν από τον φόρο αυτοκινήτου περίπου στις 17:00;
Για το σκοπό αυτό, χρειαζόμαστε τα ίδια παραδείγματα όπως παραπάνω: mymodel Πίνακας:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Παράδειγμα
Πρόβλεψη ταχύτητας του αυτοκινήτου μετά τις 17:00;
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) speed = mymodel(17) print(speed)
Η ταχύτητα πρόβλεψης είναι 88.87, όπως επίσης μπορούμε να δούμε στο διάγραμμα:

Κακή προσαρμογή;
Δημιουργήστε μια παράδειγμα όπου η πολυωνυμική ανάλυση δεν είναι η καλύτερη μέθοδος πρόβλεψης μέλλοντων τιμών.
Παράδειγμα
Αυτές οι τιμές των αξιοτήτων του x και y θα οδηγήσουν σε πολύ κακή συσχέτιση πολυωνυμικής ανάλυσης:
import numpy import matplotlib.pyplot as plt x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(2, 95, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Αποτελέσματα:

Τιμή του r-squared;
Παράδειγμα
Πρέπει να λάβετε一个非常 χαμηλή τιμή του r-squared.
import numpy from sklearn.metrics import r2_score x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Αποτελέσματα: 0.00995 δείχνει κακή σχέση και μας λέει ότι ο οπτικός δείκτης δεν είναι κατάλληλος για πολυωνυμική ανάλυση.
- Προηγούμενη Σελίδα Ανάγνωση Παράθυρου
- Επόμενη Σελίδα Πολυπαραγοντική Ανάλυση