Linear Regression Μηχανικής Μάθησης
- Προηγούμενη Σελίδα Διάγραμμα Διακυμάνσεων
- Επόμενη Σελίδα Πολυωνυμική Επιστροφή
Επιστροφή
Όταν προσπαθείτε να βρείτε τη σχέση μεταξύ μεταβλητών, χρησιμοποιείται ο όρος "επιστροφή" (regression).
Στην μηχανική μάθηση και τη στατιστική μοντελοποίηση, αυτή η σχέση χρησιμοποιείται για την πρόβλεψη των αποτελεσμάτων μελλοντικών γεγονότων.
Γραμμική εξίσωση
Η γραμμική εξίσωση χρησιμοποιεί τη σχέση μεταξύ σημείων δεδομένων για να σχεδιάσει μια ευθεία γραμμή μεταξύ όλων των σημείων δεδομένων.
Αυτή η γραμμή μπορεί να χρησιμοποιηθεί για την πρόβλεψη μελλοντικών τιμών.

Στη μηχανική μάθηση, η πρόβλεψη του μέλλοντος είναι πολύ σημαντική.
Μέθοδος λειτουργίας
Το Python παρέχει μερικές μεθόδους για την αναζήτηση σχέσεων μεταξύ σημείων δεδομένων και την απόδοση γραμμικής εξίσωσης. Θα σας δείξουμε πώς να χρησιμοποιήσουμε αυτές τις μεθόδους αντί για μαθηματικές εξισώσεις.
Στο παρακάτω παράδειγμα, ο άξονας x αντιπροσωπεύει την ηλικία του αυτοκινήτου και ο άξονας y την ταχύτητα. Έχουμε καταγράψει την ηλικία και την ταχύτητα 13 αυτοκινήτων που περνούν από τον σταθμό χρέωσης. Ας δούμε αν τα δεδομένα που συλλέξαμε μπορούν να χρησιμοποιηθούν για γραμμική εξίσωση:
Παράδειγμα
Πρώτα να σχεδιάσουμε το διάγραμμα διασποράς:
import matplotlib.pyplot as plt x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] plt.scatter(x, y) plt.show()
Τα αποτελέσματα:

Παράδειγμα
εισαγωγή scipy
και να σχεδιάσουμε τη γραμμική εξίσωση:
import matplotlib.pyplot as plt from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept mymodel = list(map(myfunc, x)) plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
Τα αποτελέσματα:

Παράδειγμα εξήγησης
Εισαγωγή των απαιτούμενων μοντέλων:
import matplotlib.pyplot as plt from scipy import stats
Δημιουργία πινάκων που εκπροσωπούν τις τιμές του άξονα x και y:
x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
Εκτέλεση μιας μεθόδου που επιστρέφει μερικούς σημαντικούς κλειδιά της γραμμικής εξίσωσης:
slope, intercept, r, p, std_err = stats.linregress(x, y)
Δημιουργία μιας που χρησιμοποιεί slope
και intercept
Η συνάρτηση τιμών επιστρέφει νέες τιμές. Αυτές οι νέες τιμές δείχνουν την θέση που η αντίστοιχη τιμή του άξονα x θα τοποθετηθεί στον άξονα y:
def myfunc(x): return slope * x + intercept
Εκτέλεση της συνάρτησης για κάθε τιμή του πίνακα x. Αυτό θα παράξει έναν νέο πίνακα, όπου ο άξονας y έχει νέες τιμές:
mymodel = list(map(myfunc, x))
Δημιουργία αρχικού διαγράμματος διασποράς:
plt.scatter(x, y)
Δημιουργία γραμμικής εξίσωσης:
plt.plot(x, mymodel)
Εμφάνιση γραφήματος:
plt.show()
R-Squared
Είναι σημαντικό να γνωρίζουμε πόσο καλή είναι η σχέση μεταξύ των τιμών του άξονα x και του άξονα y, γιατί αν δεν υπάρχει σχέση, η γραμμική εξίσωση δεν μπορεί να χρησιμοποιηθεί για την πρόβλεψη τίποτα.
Η σχέση μετράται με μια τιμή που ονομάζεται r-square (r-square).
Το εύρος του r-square είναι από 0 έως 1, όπου 0 σημαίνει μη σχετικό και 1 σημαίνει 100% σχετικό.
Το Python και το μοντέλο Scipy θα υπολογίσουν για σένα αυτό το όρισμα, πρέπει απλώς να παρέχεις τις τιμές x και y του:
Παράδειγμα
Πώς είναι η προσαρμογή των δεδομένων μου στη γραμμική εξίσωση;
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
Σημειώσεις:Το αποτέλεσμα -0.76 δείχνει ότι υπάρχει κάποια σχέση, αλλά όχι τέλεια σχέση, αλλά δείχνει ότι μπορούμε να χρησιμοποιήσουμε τη γραμμική εξίσωση στις μελλοντικές μας προβλέψεις.
Πρόβλεψη μελλοντικών τιμών
Τώρα, μπορούμε να χρησιμοποιήσουμε τις συλλέγμενες πληροφορίες για να προβλέψουμε μελλοντικές τιμές.
Για παράδειγμα: ας προσπαθήσουμε να προβλέψουμε την ταχύτητα ενός αυτοκινήτου με 10 χρόνια ιστορίας.
Για το σκοπό αυτό, χρειαζόμαστε τα ίδια με το προηγούμενο παράδειγμα: myfunc()
Συνάρτηση:
def myfunc(x): return slope * x + intercept
Παράδειγμα
Πρόβλεψη ταχύτητας ενός αυτοκινήτου με 10 χρόνια ζωής:
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept speed = myfunc(10) print(speed)
Η πρόβλεψη ταχύτητας είναι 85.6 και μπορούμε επίσης να το διαβάσουμε από το διάγραμμα:

Κακή προσαρμογή;
Δημιουργούμε μια παράδειγμα όπου η γραμμική εξίσωση δεν είναι η καλύτερη μέθοδος πρόβλεψης μέλλοντων τιμών.
Παράδειγμα
Τα αυτές τα δεδομένα των πινακίδων x και y θα οδηγήσουν σε πολύ κακή ταινία γραμμικής ανάλυσης:
import matplotlib.pyplot as plt from scipy import stats 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] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept mymodel = list(map(myfunc, x)) plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
Τα αποτελέσματα:

και τιμή r-squared;
Παράδειγμα
Πρέπει να έχετε一个非常 χαμηλή τιμή r-squared.
import numpy from scipy import stats 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] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
Τα αποτελέσματα: 0.013 δείχνει πολύ κακή σχέση και μας λέει ότι ο συλλογισμός αυτός δεν είναι κατάλληλος για γραμμικό ανάλυση.
- Προηγούμενη Σελίδα Διάγραμμα Διακυμάνσεων
- Επόμενη Σελίδα Πολυωνυμική Επιστροφή