Data Preprocessing
La preelaborazione dei dati trasforma tabelle, testo e immagini grezzi in input puliti, normalizzati e in un formato fisso, adatti al modello. Passaggi comuni, regole per evitare la fuga di dati e codice.
Il preprocessing dei dati è l'insieme di trasformazioni che converte i dati grezzi nell'input numerico pulito e formattato in modo coerente che un modello di machine learning (ML) si aspetta, applicate nello stesso modo durante l'addestramento e l'inferenza. Per i dati tabellari significa gestire i valori mancanti, codificare le categorie come numeri e ridimensionare le caratteristiche. Per le immagini significa decodificare i file, ridimensionarli alla dimensione di input della rete, ordinare i canali di colore e scalare i valori dei pixel. Il preprocessing è di fatto parte del modello: una rete addestrata su immagini RGB con valori scalati tra 0 e 1 produce previsioni inaffidabili se riceve immagini BGR con valori da 0 a 255, anche se i suoi pesi non sono cambiati.
Fasi comuni di preprocessing#
- Pulizia dei dati: rimozione dei duplicati, dei file danneggiati e dei valori impossibili, oltre alla correzione di etichette o unità incoerenti.
- Imputazione: riempimento dei valori mancanti con una statistica, come la mediana della colonna, una stima basata su un modello o una categoria separata «mancante», oppure eliminazione delle righe con troppi valori assenti.
- Codifica: conversione delle categorie in numeri, usando la codifica one-hot per categorie non ordinate, come il colore; codici ordinali per quelle ordinate, come la taglia; e indici interi per i nomi delle classi.
- Scalatura e normalizzazione: la scalatura min-max mappa una caratteristica nell'intervallo 0–1, mentre la standardizzazione sottrae la media e divide per la deviazione standard. In questo modo una caratteristica misurata in millimetri non sovrasta una misurata in metri nei modelli basati sulla distanza e la discesa del gradiente converge più rapidamente. Molti modelli preaddestrati su ImageNet in torchvision si aspettano che ogni canale RGB sia standardizzato con medie pari a 0.485, 0.456 e 0.406 e deviazioni standard pari a 0.229, 0.224 e 0.225.
- Ridimensionamento: adeguamento di ogni immagine alla dimensione di input della rete tramite deformazione, ritaglio centrale o letterboxing, che scala l'immagine per adattarla e aggiunge padding nella parte restante, così gli oggetti mantengono le proporzioni.
- Tokenizzazione: suddivisione del testo in token e associazione di ciascuno a un ID intero di un vocabolario fisso.
Alle fasi generali si aggiungono quelle specifiche del dominio. Le scansioni TC vengono sottoposte a windowing, che mappa un intervallo di unità Hounsfield, ad esempio quello che mostra il tessuto polmonare, alle intensità di visualizzazione viste dal modello; l'audio viene ricampionato a una frequenza fissa e spesso convertito in spettrogramma.
Adatta sui dati di addestramento, applica ovunque#
Le statistiche usate nel preprocessing, come medie e deviazioni standard delle caratteristiche, valori di imputazione e vocabolari delle categorie, si calcolano solo sulla partizione di addestramento, si salvano e poi si applicano senza modifiche ai dati di validazione, test e produzione. Calcolarle sull'intero dataset prima della suddivisione permette alle informazioni del set di test di influenzare gli input di addestramento: è una forma di data leakage che gonfia i punteggi di valutazione. Una Pipeline di scikit-learn impone questa regola adattando le fasi di preprocessing solo sui dati passati a fit. Applicare un preprocessing diverso al momento del servizio, ad esempio un altro metodo di ridimensionamento o un decoder di immagini diverso, causa un disallineamento tra addestramento e servizio: il modello ottiene buoni risultati offline e peggiori in produzione.
Preprocessing delle immagini per i modelli di visione#
I modelli per immagini richiedono un layout dei tensori fisso. OpenCV decodifica le immagini come array di interi a 8 bit di altezza × larghezza × canale, nell'ordine BGR, mentre le reti PyTorch si aspettano batch di tensori float in ordine RGB con i canali per primi. La previsione di YOLO26 in Ultralytics esegue automaticamente questi passaggi: ridimensiona ogni immagine in modo che il lato più lungo corrisponda a imgsz, pari a 640 pixel per impostazione predefinita, senza deformarla; aggiunge pixel grigi di valore 114 fino a ottenere un quadrato di 640 × 640 per i modelli esportati a forma fissa oppure solo fino al multiplo successivo dello stride di 32 pixel per i modelli PyTorch; inverte l'ordine BGR in RGB, riordina l'array con i canali per primi e divide per 255. Lo script seguente con OpenCV e NumPy esegue manualmente il letterboxing quadrato:
import urllib.request
import cv2
import numpy as np
# Download a sample photo and read it as a BGR uint8 array of shape (height, width, 3)
urllib.request.urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")
image = cv2.imread("bus.jpg")
# Resize so the longer side is 640 pixels, keeping the aspect ratio
scale = 640 / max(image.shape[:2])
resized = cv2.resize(image, None, fx=scale, fy=scale, interpolation=cv2.INTER_LINEAR)
# Letterbox: center the resized image on a 640x640 canvas of gray (114) padding
canvas = np.full((640, 640, 3), 114, dtype=np.uint8)
top, left = (640 - resized.shape[0]) // 2, (640 - resized.shape[1]) // 2
canvas[top : top + resized.shape[0], left : left + resized.shape[1]] = resized
# Reorder BGR to RGB and HWC to CHW, scale pixels to 0-1, and add a batch dimension
tensor = canvas[:, :, ::-1].transpose(2, 0, 1).astype(np.float32) / 255.0
batch = tensor[None]
print(f"{image.shape} uint8 -> {batch.shape} float32 in [{batch.min():.1f}, {batch.max():.1f}]")Lo script stampa (1080, 810, 3) uint8 -> (1, 3, 640, 640) float32 in [0.0, 1.0]: la foto da 1080 × 810 diventa un batch di una singola immagine, con il layout e l'intervallo di valori previsti da un rilevatore PyTorch e con barre grigie che riempiono gli 80 pixel su ciascun lato.
Preprocessing dei dati e termini correlati#
- Etichettatura dei dati: creazione dei target di ground truth, come classi e riquadri, che il preprocessing converte poi nel formato numerico letto durante l'addestramento.
- Ingegneria delle caratteristiche: creazione di nuove variabili di input sulla base della conoscenza del dominio, ad esempio l'indice di massa corporea ricavato dalle colonne di altezza e peso.
- Batch normalization: un livello interno alla rete che standardizza le attivazioni intermedie durante l'addestramento e l'inferenza. La normalizzazione dell'input nel preprocessing avviene una sola volta, prima che i dati raggiungano la rete.
- Aumento dei dati: trasformazioni casuali come ribaltamenti, variazioni dei colori e mosaici, applicate solo durante l'addestramento per creare copie diversificate di ogni esempio. Il preprocessing è deterministico e identico in fase di addestramento e inferenza.










