pre-elaborazione

La pre-elaborazione nel Machine Learning

La fase di pre-elaborazione e l’analisi dei dati sono fasi fondamentali, utili a rendere il quanto più possibile pulito il dataset prima di essere affidato al nostro algoritmo di apprendimento. Tutto ciò perché la qualità dei dati e la quantità di informazioni da essi contenute sono fattori chiave per determinare la qualità di apprendimento di un determinato algoritmo.

I dati reali vengono raccolti da diverse origini e processi e possono contenere irregolarità o dati danneggiati in grado di compromettere la qualità del set di dati. Nell’elenco sottostante ho indicato i tipici problemi relativi alla qualità di dati che si verificano:

  • Dati incompleti: nei dati mancano attributi o non sono presenti valori.
  • Dati fastidiosi: i dati contengono record o outlier errati.
  • Dati incoerenti: i dati contengono record in conflitto o discrepanze.

La qualità dei dati è un prerequisito per modelli predittivi di qualità. Per evitare “spazzatura in entrata e in uscita” e migliorare la qualità dei dati e quindi le prestazioni del modello, è fondamentale condurre un’analisi dell’integrità dei dati per individuare tempestivamente problemi relativi ai dati e prendere decisioni in merito alle fasi di elaborazione e pulizia dei dati corrispondenti.

I dati mancanti (NaN)

Può capitare, come nel caso del Titanic Dataset, che alcuni dati all’interno del dataset non siano presenti per vari motivi. Le cause, citate sopra, sono molteplici e vanno dall’errore nel processo di raccolta dei dati o provengono da determinate misurazioni non applicabili. Individuiamo questi dati mancanti con la parola NaN (Not A Number).

Purtroppo, le macchine moderne, non sono ancora in grado di gestire in maniera autonoma i dati NaN e per questo dovremmo occuparci noi nel cercare di rendere il più possibile pulito il dataset in maniera tale da non incorrere in risultati imprevedibili ignorando questi dati. 

Vediamo ora un semplice dataset in formato CSV per cercare di capire meglio il problema:

				
					import pandas as pd
from io import StringIO

csv_data = '''A,B,C,D
1.0,2.0,3.0,4.0
5.0,6.0,,8.0
10.0,11.0,12.0,'''


df = pd.read_csv(StringIO(csv_data))
df
				
			
pre-elaborazione

Leggiamo i dati all’interno di un DataFrame pandas tramite read_csv e le celle mancanti sono state sostituite da valori NaN. La funzione StringIO consente una lettura della stringa assegnata a csv_data in un DataFrame come se fosse un vero CSV su disco rigido. 

				
					df.isnull().sum()

				
			

Con la funzione isnull otteniamo un DataFrame con valori boolean che indicano se una cella è vuota (True). Utilizzando sum otteniamo la somma dei valori mancanti per colonna:

pre-elaborazione

Eliminazione dei campioni e delle caratteristiche con NaN

Utilizziamo, in maniera semplicissima, la funzione dropna in modo da eliminare completamente dal dataset le caratteristiche (colonne) o i campioni (righe) all’interno dei quali sono presenti dai NaN.

				
					df.dropna()
df.dropna(axis=1)
				
			
pre-elaborazione

L’eliminazione dei dati mancanti ha decisamente dei pro ma allo stesso tempo, togliere dal dataset un numero importante di colonne, può causare degli errori di affidabilità del modello determinati da, appunto, una perdita delle informazioni alquanto preziose. 

Per questo ci vengono in aiuto le tecniche di interpolazione

Tecniche di interpolazione

Esse servono a stimare i dati mancanti nella fase di pre-elaborazione, sulla base degli altri campioni del dataset. Una delle tecniche più comuni e utilizzate è l’imputazione media attraverso la quale sostituiamo NaN con la media degli altri valori presenti all’interno della stessa colonna. 

Per questo ci viene in aiuto la classe SimpleImputer di scikit-learn:

				
					from sklearn.impute import SimpleImputer
import numpy as np

imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(df)
imputed_data = imputer.transform(df.values)
imputed_data
				
			

Titanic Dataset

Questa prima fase di pre-elaborazione è una dei passi fondamentali che portano al risultato finale. Nei prossimi capitoli parleremo degli altri necessari passaggi che ci conducono ad analizzare e trattare un dataset di informazioni in maniera corretta. Per capire come funziona il tutto ho realizzato un esercizio molto semplice di Machine Learning riguardante il Titanic Dataset. 

Passa a dargli un’occhiata.

Buon Coding 🙂

Condividi il post

Condividi su facebook
Condividi su google
Condividi su twitter
Condividi su email
Condividi su whatsapp