Regressione polinomiale nel machine learning
- Pagina precedente Regressione lineare
- Pagina successiva Regressione multivariata
Regressione polinomiale (Polynomial Regression)
Se i punti dei dati non sembrano adatti alla regressione lineare (una retta che attraversa i punti dei dati), la regressione polinomiale potrebbe essere la scelta ideale.
Come la regressione lineare, la regressione polinomiale utilizza la relazione tra le variabili x e y per trovare il miglior metodo per tracciare la linea dei punti di dati.

Principio di funzionamento
Python ha alcuni metodi per trovare la relazione tra i punti di dati e disegnare la retta di regressione polinomiale. Vi mostreremo come utilizzare questi metodi invece di formule matematiche.
Nell'esempio seguente, abbiamo registrato 18 veicoli che passano attraverso una determinata stazione di pedaggio.
Abbiamo registrato la velocità dei veicoli e il tempo di transito (ora).
L'asse x rappresenta l'ora del giorno, l'asse y rappresenta la velocità:
Esempio
Prima di tutto, disegna il grafico di dispersione:
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()
Risultato:

Esempio
importa numpy
e matplotlib
e poi disegna la retta di regressione polinomiale:
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()
Risultato:

Esempio di spiegazione
Importa i moduli necessari:
import numpy import matplotlib.pyplot as plt
Crea un array che rappresenta i valori dell'asse x e 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 ha un metodo che ci permette di costruire un modello polinomiale:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Poi specifica il modo di visualizzazione della riga, partendo dalla posizione 1 fino alla posizione 22:
myline = numpy.linspace(1, 22, 100)
Disegna il grafico di dispersione originale:
plt.scatter(x, y)
Disegna la retta di regressione polinomiale:
plt.plot(myline, mymodel(myline))
Mostra il grafico:
plt.show()
R-Squared
È importante sapere quanto bene le valori dell'asse x e y sono correlati, se non ci sono relazioni, la regressione polinomiale non può essere utilizzata per prevedere nulla.
Questa relazione è misurata da un valore chiamato r quadrato (r-squared).
L'intervallo del valore di r quadrato è da 0 a 1, dove 0 rappresenta l'irrelazione e 1 rappresenta il 100% di relazione.
Python e il modulo Sklearn calcoleranno questo valore per te, tutto ciò che devi fare è inserire gli array x e y:
Esempio
Come si adatta il mio dati nella regressione polinomiale?
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)))
Nota:Il risultato 0.94 indica una buona relazione, possiamo utilizzare la regressione polinomiale per le previsioni future.
Previsione di valori futuri
Ora, possiamo utilizzare le informazioni raccolte per prevedere valori futuri.
Ad esempio: proviamo a prevedere la velocità dei veicoli che passano attraverso il pedaggio intorno alle 17:00 di sera:
Per questo, dobbiamo avere lo stesso esempio di sopra mymodel Array:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Esempio
Prevedere la velocità di passaggio del veicolo dopo le 17:00 del pomeriggio:
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)
La velocità di previsione dell'esempio è 88.87, e possiamo vederlo anche nel grafico:

Pessima adattamento?
Creiamo un esempio in cui la regressione polinomiale non è il miglior metodo per prevedere valori futuri.
Esempio
Questi valori degli assi x e y causano una scarsa adattabilità della regressione polinomiale:
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()
Risultato:

Qual è il valore di r-squared?
Esempio
Dovresti ottenere un valore molto basso di 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)))
Risultato: 0.00995 indica una relazione molto debole e ci dice che il set di dati non è adatto alla regressione polinomiale.
- Pagina precedente Regressione lineare
- Pagina successiva Regressione multivariata