Come creare una pipeline per il Machine Learning con scikit-learn

In questo articolo studieremo come creare un unico processo (pipeline) che esegua tutte le operazioni necessarie per implementare un algoritmo di Machine Learning. Se nelle lezioni precedenti abbiamo eseguito i vari step uno alla volta, ora vogliamo configurare ed eseguire un’unica pipeline che abbia al suo interno tutto il necessario.

Creiamo la nostra prima pipeline con scikit-learn

Eseguiamo preliminarmente le usuali operazioni di import e di divisione dei dati in training e test, come già spiegato nelle lezioni precedenti

import pandas as pd
f = "https://raw.githubusercontent.com/iantomasinicola/Machine-Learning-con-SQL/main/IrisDataset.csv"
iris = pd.read_csv(filepath_or_buffer = f, 
                             sep = ";", 
                             skiprows = 4)
X=iris.drop(["class","Rownumber"], axis=1)
y=iris["class"]
from sklearn.model_selection import train_test_split
x1,x2,y1,y2 = train_test_split(X, 
                                               y, 
                                               test_size = 0.3, 
                                               random_state = 1)

A questo punto creiamo una pipeline che contenga le operazioni di

  • valorizzazione dei null;
  • standardizzazione delle variabili;
  • addestramento di un algoritmo di regressione logistica.

Importiamo allora i moduli necessari dalla libreria scikit-learn di Python

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

E creiamo la nostra prima pipeline!

my_first_pipeline = Pipeline ([("vn", SimpleImputer(strategy="mean")),
                                                ("sc", StandardScaler()),
                                                ("lr", LogisticRegression(random_state = 0  ))
                                                ])

Eseguiamo il metodo fit della pipeline

A questo punto possiamo eseguire il metodo fit associato alla nostra pipeline

my_first_pipeline.fit(x1,y1)

Otterremo in un solo colpo l’esecuzione di queste cinque operazioni:

  1. eseguire il metodo fit di SimpleImputer passandogli in input x1
  2. trasformare x1 con i dati risultanti dall’addestramento del punto 1
  3. eseguire il metodo fit di StandardScaler sull’output del punto precedente
  4. trasformare i dati del punto 2 in base al fit del punto 3
  5. eseguire il metodo fit dell’algoritmo di regressione logistica sull’output del punto 4

Ecco l’immagine esplicativa mostrata in output da Jupyter per l’istruzione my_first_pipeline.fit(x1,y1)

Output del metodo fit di una pipeline create su scikit-learn

È importante osservare che dopo l’esecuzione della pipeline i dati all’interno di x1 non saranno modificati, di conseguenza potrò continuare ad utilizzare le stesse variabili per rieseguire questa o delle nuove pipeline.

Eseguiamo i metodi predict e score della pipeline

A questo punto potremo ottenere le predizioni sui dati di test e l’accuratezza. In particolare, per ottenere le predizioni scriveremo

my_first_pipeline.predict(x2)

mentre per il calcolo dell’accuratezza

my_first_pipeline.score(x2,y2)

Il risultato ovviamente sarà uguale a quello ottenuto lanciando i vari metodi singolarmente, a patto ovviamente di aver configurato tutto nello stesso modo, compresi i valori del parametro random_state.

Continua a imparare

Torna in alto
Torna su