Calcolare la regressione lineare o polinomiale dei dati in Python

Questo programma calcola una regressione lineare o polinomiale su alcuni dati forniti e visualizza il risultato tramite un grafico.

Utilizza due moduli esterni del linguaggio Python:

  • numpy viene utilizzato per le operazioni matematiche e per calcolare i coefficienti del polinomio.
  • matplotlib è usato per creare e visualizzare il grafico.

Pertanto, uno dei primi passi è importare queste librerie nel programma

import numpy as np
import matplotlib.pyplot as plt

Per prima cosa definisco due array `x` e `y` che rappresentano i dati osservati (5 coppie di valori).

x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 4, 6])

Poi calcolo la regressione polinomiale tramite il metodo polyfit(x,y,n) dove n è il grado del polinomio della funzione di regressione.

In questo caso opto per un polinomio di terzo grado.

coefficients = np.polyfit(x, y, 3)

La funzione np.polyfit(x, y, 3) calcola i coefficienti di un polinomio di terzo grado (quattro coefficienti) che meglio approssima i dati nei punti \(x\) e \(y\).

In questo caso i coefficienti sono i seguenti:

print(coefficients)

array([ 0.16666667, -1.57142857, 5.26190476, -2. ])

Una volta generati i coefficienti, li utilizzo per definire una funzione polinomiale usando il metodo poly1d()

polynomial = np.poly1d(coefficients)

Poi genero i valori previsti dalla curva polinomiale per gli stessi valori \(x\).

y_pred_poly = polynomial(x)

Infine, visualizzo un grafico che mostra i punti dei dati osservati come scatter plot (punti blu) e la curva del polinomio di terzo grado in verde.

plt.figure(figsize=(8, 6))
plt.scatter(x, y, color='blue', label='Dati osservati') # Punti osservati
plt.plot(np.linspace(min(x), max(x), 100), polynomial(np.linspace(min(x), max(x), 100)), color='green', label='Curva polinomiale di terzo grado')
plt.title("Regressione polinomiale di terzo grado", fontsize=14)
plt.xlabel("x", fontsize=12)
plt.ylabel("y", fontsize=12)
plt.legend()
plt.grid(True)
plt.show()

Questa sequenza mi permette di visualizzare il grafico della curva che approssima i punti.

Il risultato è un grafico che illustra come il polinomio di terzo grado si adatta ai dati.

la regressione dei dati

E per ottenere una regressione lineare?

Basta modificare il grado del polinomio che approssima i dati.

coefficients = np.polyfit(x, y, 1)

In questo caso la funzione np.polyfit(x, y, 1) calcola i coefficienti di un polinomio di primo grado (due coefficienti) che approssima i dati nei punti \(x\) e \(y\) con una retta di regressione.

esempio retta di regressione

E ovviamento man mano che aumento il grado della regressione il grafico approssima meglio i punti

Ad esempio, se imposto un polinomio di grado 6

coefficients = np.polyfit(x, y, 6)

La curva della regressione passa esattamente per i punti osservati.

la regressione con un polinomio di sesto grafo

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base
  1. Il linguaggio Python
  2. Come installare Python sul PC
  3. Come scrivere un programma in Python
  4. Come usare Python in modalità interattiva
  5. Le variabili
  6. I numeri
  7. Gli operatori logici
  8. Le strutture iterative ( o cicli )
  9. Le strutture condizionali
  10. Le eccezioni
  11. I file in python
  12. Le classi
  13. I moduli