Ri regressione lineare nel machine learning
- Pagina precedente Scatter plot
- Pagina successiva Regressione polinomiale
Regression
When you try to find the relationship between variables, the term 'regression' (regression) is used.
In machine learning and statistical modeling, this relationship is used to predict the results of future events.
Regressione lineare
La regressione lineare disegna una retta tra tutti i punti di dati utilizzando la relazione tra i punti di dati.
Questa linea può essere utilizzata per prevedere valori futuri.

Nella machine learning, la previsione del futuro è molto importante.
Principio di funzionamento
Python fornisce alcuni metodi per trovare la relazione tra i punti di dati e tracciare la retta di regressione lineare. Vi mostreremo come utilizzare questi metodi invece di formule matematiche.
Nell'esempio seguente, l'asse x rappresenta l'età dell'auto, l'asse y rappresenta la velocità. Abbiamo registrato l'età e la velocità di 13 auto che passano attraverso il pedaggio. Vediamo se i dati che abbiamo raccolto possono essere utilizzati per la regressione lineare:
Esempio
Prima di tutto, disegna il grafico degli scatter plot:
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()
Risultato:

Esempio
importa scipy
e traccia la retta di regressione lineare:
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()
Risultato:

Esempio di spiegazione
Importa i moduli necessari:
import matplotlib.pyplot as plt from scipy import stats
Crea un array che rappresenta i valori dell'asse x e 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]
Esegui un metodo che restituisce alcuni valori chiave della regressione lineare:
slope, intercept, r, p, std_err = stats.linregress(x, y)
Crea un'istanza che utilizza slope
e intercept
La funzione dei valori restituisce nuovi valori. Questo nuovo valore rappresenta la posizione corrispondente dell'asse y per il valore dell'asse x:
def myfunc(x): return slope * x + intercept
Esegui ogni valore dell'array x con la funzione. Questo produrrà un nuovo array, nel quale l'asse y avrà nuovi valori:
mymodel = list(map(myfunc, x))
Traccia il grafico degli scatter plot originali:
plt.scatter(x, y)
Traccia la retta di regressione lineare:
plt.plot(x, mymodel)
Mostra il grafico:
plt.show()
R-Squared
È importante sapere quanto bene i valori dell'asse x e quelli dell'asse y sono correlati, se non ci sono relazioni, la regressione lineare 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 indica l'irrelazione e 1 indica il 100% di relazione.
Il modulo Python e Scipy calcoleranno questo valore per voi, tutto ciò che dovete fare è fornire i valori di x e y a lui:
Esempio
Come si adatta il mio dati nella regressione lineare?
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)
Nota:Il risultato -0.76 indica una qualche relazione, ma non una relazione perfetta, ma indica che possiamo utilizzare la regressione lineare nelle previsioni future.
Previsione di valori futuri
Ora, possiamo utilizzare le informazioni raccolte per prevedere valori futuri.
Ad esempio: proviamo a prevedere la velocità di un'auto con 10 anni di storia.
Per questo, dobbiamo avere lo stesso myfunc()
Funzione:
def myfunc(x): return slope * x + intercept
Esempio
Prevedere la velocità di un'auto con 10 anni di età:
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)
La velocità di previsione è di 85.6, la possiamo leggere anche dal grafico:

Pessima adattabilità?
Creiamo un esempio in cui la regressione lineare non è il metodo migliore per prevedere valori futuri.
Esempio
Questi valori per l'asse x e y portano a una buona adattabilità della regressione lineare molto debole:
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()
Risultato:

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