Informatica

Esempio di Machine Learning con Python: la Regressione lineare semplice

In questo esempio di machine learning andremo a vedere una regressione lineare con una sola feature in input. Una regressione lineare semplice.

Prima di procedere, vi consiglio di leggere due brevi articoli, dove troverete diverse definizioni:

  1. Che cos’è il Machine Learning, di cosa si occupa e obiettivi
  2. Tipologie di Machine Learning

Visto che useremo Python, se non lo avete ancora sul vostro PC, leggete anche Come installare Python in ambiente Microsoft Windows

Per l’esempio, consideriamo due liste Python: la prima rappresenta valori in input (feature), la seconda i valori in output (target).

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

y = [28, 26, 35, 21, 33, 35, 41, 44, 42, 51]

Queste due liste sono rappresentabili su un grafico a punti a dispersione

Le due liste sul grafico

Dal grafico possiamo notare che i punti, pur non essendo su una stessa retta, comunque hanno una distribuzione quasi lineare, dal punto in basso a sinistra verso il punto in alto a destra. La distribuzione dei punti sul grafico è identificabile come l’andamento delle liste che sono alla base del modello su cui si baserà la nostra macchina ad apprendimento automatico.

Il Modello

Quindi possiamo dire che se la X cresce, anche la Y cresce, come se i punti fossero intorno a una linea immaginaria. L’obiettivo della regressione è proprio quello di individuare questa linea, questa retta. L’individuazione di questa retta ci aiuterebbe a individuare i punti Y per valori di X non presenti nella lista.

Infatti potremmo chiederci come poter predire il valore di Y per una X non compresa nei casi, non compresa nelle due liste ? Praticamente quale sarebbe il valore di Y se X valesse 11, o 12, o 13 ?

La regressione lineare calcola la retta che meglio approssima i punti, cioè la retta che passa tra i punti riducendo al minimo la distanza da ognuno di essi. E visto che la regressione semplice ci darà una retta, è evidente che la predizione non sarà così precisa, ma comunque saremo in grado di valutare un livello plausibile, molto vicino per la Y.

Facciamolo con scikit-learn:

# importiamo il modello di regressione lineare da scikit-learn

import numpy as np

from sklearn.linear_model import LinearRegression

# istanziamo il modello

model=LinearRegression()

# inizializziamo i valori che ci serviranno per istruire la macchina

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

y = [28, 26, 35, 21, 33, 35, 41, 44, 42, 51]

# strutturiamo i dati in forma bidimensionale

X=np.array(x).reshape(-1,1)

# addestriamo il modello

model.fit(X, y)

Il risultato ottenuto dal codice Python è un modello istruito. L’oggetto model è stato istanziato dalla classe della regressione lineare, e dopo aver invocato il modello fit, model ha studiato i dati ed è pronto per fare predizioni.

La predizione

Per avere la predizione dobbiamo invocare il metodo predict, che si occupa di predire scenari futuri. Aggiungiamo la riga

print(model.predict([[11],[12],[13],[14]]))

avviando nuovamente il programma, otterremo i quattro valori predetti in corrispondenza delle features 11, 12, 13 e 14:

Articoli correlati
Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.

[49.8 52.38181818 54.96363636 57.54545455]

Quindi i quattro valori ottenuti in corrispondenza sono:

  • 11 —> 49.8
  • 12 —> 52.38181818
  • 13 —> 54.96363636
  • 14 —> 57.54545455

Come possiamo notare, a valori crescenti di X corrispondono valori crescenti di Y, e la cosa ha senso. Proviamo a vedere cosa succede sul grafico

La retta rossa rappresenta il risultato della regressione. La retta sembra essere l’interpretazione geometrica, e in particolare lineare, della distribuzione dei punti. Praticamente è come dire che il modello scelto per valorizzare la previsione, è un modello semplice e lineare.

Possiamo dire che la previsione non è molto corretta, ma è un’interpretazione.

Come valutare i risultati

Ottenuti i risultati della predizione, sarà importante saper valutare sempre l’efficacia di un modello. Per far questo dobbiamo vedere le metriche che scikit-learn mette a disposizione nel package sklearn.metrics.

Le metriche si basano sul concetto del residuo, cioè quanto la retta si allontana dal vero valore della y per una determinata x. Praticamente per ogni punto la distanza dalla retta del punto stesso.

Possiamo calcolare i residui calcolando la differenza tra il valore reale e il valore predetto, possiamo farlo per i features da 1 a 10:

# calcolo le predizioni per valori di x da 1 a 10

y_pred = model.predict(X)

print(y_pred)

# calcolo i residui

residui = y – y_pred

print(residui)

come risultato ottengo le predizioni

[23.98181818 26.56363636 29.14545455 31.72727273 34.30909091 36.89090909 39.47272727 42.05454545 44.63636364 47.21818182]

e i residui
[ 4.01818182 -0.56363636 5.85454545 -10.72727273 -1.30909091 -1.89090909 1.52727273 1.94545455 -2.63636364 3.78181818]

Ognuno di questi valori misura quanto la retta è passata distante dal punto nel grafico. I punti con residuo maggiore si chiamano outlier, cioè i valori meno allineati con la tendenza generale (ad esempio il quarto -10.72). Il secondo valore è -0.56 e quindi molto allineato con la tendenza generale.

Le Metriche

Per la regressione lineare ci sono metriche molto importanti che scikit-learn mette a disposizione, vediamone alcune:

  • Mean Absolute Error: consiste nella media dei valori assoluti dei residui. Concettualmente misura la distanza di ogni punto dalla retta. Semplice e concreto, si misura con i valori assoluti perchè misura la distanza e non la posizione sopra o sotto la retta. Inoltre il valore assoluto ci assicura che valori opposti non si annullano. Il valore di MAE può essere maggiore o uguale a zero, e più si avvicina allo zero e più la previsione è buona;
  • Mean Squared Error: consiste nella media dei quadrati dei valori assoluti dei residui, come il MAE ma i quadrati. Il valore di MSE è maggiore o uguale a zero, e più si avvicina allo zero e più la previsione è buona;
  • R quadro: un po’ più complicato dei precedenti, ma possiamo dire che mette in relazione gli errori commessi in fase di previsione con la varianza dei dati stessi. Il valore di R quadro è sempre minore o uguale a 1, con la possibilità di avere valori negativi. Se R quadro vale 1 vuol dire che il modello interpreta bene l’andamento, a zero la prestazione è neutra. Se R quadro ha un valore negativo, allora vuol dire che il modello non ha fatto una buona prestazione.

Le funzioni di scikit-learn che ci valorizzano i tre indicatori, sono:

  • mean_absolute_error per MAE
  • mean_squared_error per MSE
  • r2_score per R quadro

applicandole al nostro esempio otteniamo i seguenti valori:

MAE = 3.4254545454545466
MSE = 19.847272727272724
R2 = 0.7348039453865216

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

print(mean_absolute_error(y, y_pred))

print(mean_squared_error(y, y_pred))

print(r2_score(y, y_pred))

Ercole Palmeri: Innovation addicted


Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.

Articoli recenti

Nasce Nim, l’Osservatorio del Nord-Est sull’economia dell’innovazione

Nasce l’Osservatorio del Nordest sull’economia dell’Innovazione Nim, (Numbers Innovation Motion) è un progetto di Galileo Visionary District realizzato in collaborazione…

7 Dicembre 2023

Innovazione del Content Marketing con Memory e Personality

ASKtoAI lancia le innovative funzionalità Memory e Personality, strumenti d'avanguardia per la creazione di contenuti digitali che promettono di migliorare…

6 Dicembre 2023

Discuss apre una nuova era di ricerca qualitativa con GenAI ampliata e innovazione asincrona

Discuss , la piattaforma leader appositamente creata per trasformare le esperienze in insight, ha potenziato le sue capacità di scalare la…

6 Dicembre 2023

Unwrapping Innovation: Blue Lake Packaging annuncia un’alternativa a base di fibra e priva di plastica al nastro e ai dispenser tradizionali

Con le festività che si avvicinano rapidamente, Blue Lake Packaging è entusiasta di offrire un'alternativa ecologica al nastro da imballaggio…

6 Dicembre 2023

Riepilogo del Netlogistik Innovation Day: trasformazione digitale della catena del freddo, innovazioni nel riciclaggio e leadership nella supply chain

Netlogistik , leader in potenti servizi che guidano le aziende verso la trasformazione digitale della catena di fornitura, ha recentemente tenuto…

6 Dicembre 2023

Lattice collabora con NVIDIA per accelerare l’IA edge

Annuncia una soluzione integrata che combina FPGA di Lattice a bassa potenza e bassa latenza con la piattaforma NVIDIA Orin…

6 Dicembre 2023

Evoluzione del tessile: il progetto TEPP della Taiwan Textile Federation ispira l’innovazione sostenibile oltre il 2023

Con un successo clamoroso, il Textile Export Promotion Project (TEPP), guidato dalla Taiwan Textile Federation nel 2023, ha messo in…

5 Dicembre 2023

Lattice continua la rapida espansione del portafoglio di prodotti che rende possibile la prossima era dell’innovazione

Lattice presenta i nuovi FPGA mid-range Lattice Avant-G e Lattice Avant-X, stack di soluzioni specifiche per le applicazioni ampliate e…

5 Dicembre 2023

Scopri di più sulla gestione della conoscenza e sull’innovazione per gli studi legali con un nuovo trattato scritto da esperti

Innovazione per i professionisti della gestione della conoscenza e dell'innovazione (KM&I). Nel settore legale è ora disponibile un riferimento completo…

5 Dicembre 2023

La Fondazione Eclipse lancia il gruppo di lavoro Eclipse Dataspace per promuovere l’innovazione globale nella condivisione affidabile dei dati

La Eclipse Foundation , una delle più grandi fondazioni di software open source al mondo, ha annunciato oggi la formazione dell'Eclipse…

5 Dicembre 2023