Regressione lineare e polinomiale : Esempi in Python e in R

Ultimo articolo sulla regressione lineare e su quella polinomiale, con i codici da eseguire in Python e in R.

il
Sviluppatore / Ingegnere informatico / Funzionario, Collaboratore di IProgrammatori

Nei precedenti due articoli abbiamo spiegato a cosa servono le tecniche di Regressione Lineare e di Regressione Polinomiale e abbiamo anche mostrato un esempio in linguaggio C#.

Trattandosi di un argomento che interessa prevalentemente l’ambito statistico, abbiamo pensato di fornire gli stessi esempi anche in codice Python e in codice R.

Per il primo, abbiamo utilizzato l’IDE PyCharm che è disponibile gratuitamente nella versione Community Edition. Per il secondo, abbiamo installato RStudio, anche questo disponibile in modo gratuito.

Esempi in Python

Per eseguire questi esempi ricordatevi di installare i package numpy, matplotlib e scikit-learn.

Codice per l’esempio di Regressione lineare:

import matplotlib.pyplot as plt
# Dati
superficie = [50, 60, 70, 80, 90]
prezzo = [180000, 210000, 240000, 270000, 300000]
# Coefficienti della retta di regressione
beta_0 = 30000
beta_1 = 3000
# Calcolo della retta di regressione
retta_regressione = [beta_0 + beta_1 * x for x in superficie]
# Creazione del grafico
plt.scatter(superficie, prezzo, color='blue', label='Dati osservati')
plt.plot(superficie, retta_regressione, color='red', label='Linea di regressione')
plt.xlabel('Superficie (m²)')
plt.ylabel('Prezzo (EUR)')
plt.title('Regressione Lineare: Superficie vs Prezzo')
plt.legend()
plt.grid(True)
plt.show()

Codice per l’esempio di Regressione polinomiale:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
# Dati
superficie = np.array([50, 60, 70, 80, 90]).reshape(-1, 1)
prezzo = np.array([150000, 175000, 200000, 240000, 300000])
# Trasformazione polinomiale di grado 2
poly = PolynomialFeatures(degree=2)
superficie_poly = poly.fit_transform(superficie)
# Modello di regressione lineare
model = LinearRegression()
model.fit(superficie_poly, prezzo)
# Predizioni
prezzo_predetto = model.predict(superficie_poly)
# Creazione del grafico
plt.scatter(superficie, prezzo, color='blue', label='Dati osservati')
plt.plot(superficie, prezzo_predetto, color='red', label='Regressione polinomiale')
plt.xlabel('Superficie (m²)')
plt.ylabel('Prezzo (EUR)')
plt.title('Regressione Polinomiale: Superficie vs Prezzo')
plt.legend()
plt.grid(True)
plt.show()

Esempi in R

Codice per l’esempio di Regressione lineare:

# Dati
superficie <- c(50, 60, 70, 80, 90)
prezzo <- c(180000, 210000, 240000, 270000, 300000)
# Creazione del data frame
dati <- data.frame(superficie, prezzo)
# Modello di regressione lineare
modello <- lm(prezzo ~ superficie, data = dati)
# Stampa del riassunto del modello
summary(modello)
# Calcolo della linea di regressione
dati$prezzo_predetto <- predict(modello)
# Creazione del grafico
plot(dati$superficie, dati$prezzo, main="Regressione Lineare: Superficie vs Prezzo", 
    xlab="Superficie (m²)", ylab="Prezzo (EUR)", pch=19, col="blue")
lines(dati$superficie, dati$prezzo_predetto, col="red", lwd=2)
grid()

Codice per l’esempio di Regressione polinomiale:

# Dati
superficie <- c(50, 60, 70, 80, 90)
prezzo <- c(150000, 175000, 200000, 240000, 300000)
# Creazione del data frame
dati <- data.frame(superficie, prezzo)
# Modello di regressione polinomiale di grado 2
modello <- lm(prezzo ~ poly(superficie, 2), data = dati)
# Stampa del riassunto del modello
summary(modello)
# Calcolo della linea di regressione
dati$prezzo_predetto <- predict(modello, newdata = dati)
# Creazione del grafico
plot(dati$superficie, dati$prezzo, main="Regressione Polinomiale: Superficie vs Prezzo", 
    xlab="Superficie (m²)", ylab="Prezzo (EUR)", pch=19, col="blue")
lines(dati$superficie, dati$prezzo_predetto, col="red", lwd=2)
grid()

Come potete vedere dai grafici, i risultati sono esattamente gli stessi dell’articolo precedente: