Skip to main content
All articles
Deep LearningMachine LearningStatistical Learning Theory9 min read

Feature Engineering: Dal Concetto alla Pratica

Scopri il segreto per trasformare dati grezzi in previsioni precise: il Feature Engineering. È la fase nascosta dietro i modelli di intelligenza artificiale che li rende davvero brillanti.…

Written in Italian

On this page5
  1. Feature Engineering
  2. 1. Rappresentazione delle features categoriche
  3. 2. Normalizzazione delle Feature
  4. 3. Normalizzazione delle Istanze
  5. Resta sempre aggiornato

Scopri il segreto per trasformare dati grezzi in previsioni precise: il Feature Engineering. È la fase nascosta dietro i modelli di intelligenza artificiale che li rende davvero brillanti. Immagina di poter dare forma ai tuoi dati in modo tale che il tuo modello possa cogliere sfumature sottili e fare previsioni più accurate. Questo è esattamente ciò che il Feature Engineering fa. È come dare un tocco magico ai tuoi dati per far emergere il loro pieno potenziale predittivo.

Conoscenze preliminari

Feature Engineering

Il Feature Engineering è una fase fondamentale nel processo di creazione di modelli di intelligenza artificiale, ma spesso trascurata. In questo articolo, esploreremo in dettaglio questa importante pratica, che coinvolge la trasformazione e l’ottimizzazione delle variabili di input per massimizzare le prestazioni dei modelli di machine learning. Dalla rappresentazione delle variabili categoriche alla normalizzazione delle feature e delle istanze, ogni passaggio nel Feature Engineering è progettato per migliorare la capacità predittiva del modello. Anche se può sembrare un processo tecnico, capire il Feature Engineering è essenziale per chiunque desideri costruire modelli di machine learning robusti e affidabili.
Negli esempi presentati in questo articolo, abbiamo omesso il codice relativo alla creazione dei grafici poiché è notevolmente più esteso rispetto al resto del testo. Tuttavia, il notebook completo include anche questi script per garantire una visione completa e dettagliata delle analisi svolte.

1. Rappresentazione delle features categoriche

Le features categoriche richiedono un trattamento speciale perché non possono essere utilizzate direttamente in forma testuale. Questo perché i modelli di machine learning si basano su operazioni matematiche e statistiche, e trattare le features categoriche come stringhe di testo potrebbe portare a risultati inaccurati o inefficaci. Invece, è necessario trasformare le features categoriche in un formato numerico o binario che possa essere interpretato correttamente.
In questa sezione analizziamo due delle tecniche più utilizzate: Label encoding e one-hot encoding.

Label encoding

Il label encoding è una tecnica utilizzata per convertire le categorie in numeri.
Immagina di avere una colonna di dati con le categorie “Rosso”, “Verde” e “Blu”. Con il label encoding, assegniamo un numero a ciascuna categoria: ad esempio, “Rosso” diventa 1, “Verde” diventa 2 e “Blu” diventa 3. In questo modo, le categorie sono rappresentate da numeri che i modelli di machine learning possono comprendere e utilizzare per fare previsioni.

Questo codice dimostra l’utilizzo del LabelEncoder per convertire le categorie presenti nella colonna “variety” del dataset iris in numeri. È importante notare l’utilizzo di joblib per salvare l’encoder creato, in quanto consente di applicare sempre lo stesso criterio di conversione anche su nuovi dati, garantendo coerenza e riproducibilità nell’analisi dei dati.

Da notare che utilizzando il label encoding si attribuisce un significato numerico alle categorie, il che potrebbe portare il modello a interpretare erroneamente un ordine di grandezza tra di esse. Ad esempio, nel caso riportato, assegnando i valori 0, 1 e 2 rispettivamente alle categorie ‘Setosa’, ‘Versicolor’ e ‘Virginica’, il modello potrebbe erroneamente dedurre un ordine gerarchico tra queste categorie, quindi definire ‘Virginica’ maggiore di ‘Setosa’ e ‘Versicolor’. Questa deduzione non avrebbe senso, in quanto le categorie non sono ordinate o confrontabili in modo naturale.
Quindi, per evitare confusioni, è preferibile applicare il label encoding alle variabili target o di output, dove è richiesta una rappresentazione numerica, mentre per le variabili di input, come le features categoriche, è preferibile utilizzare tecniche come l’one-hot encoding o altri metodi che non introducono un ordine artificiale tra le categorie

One-hot encoding

L’one-hot encoding è una tecnica che trasforma le features categoriche in un formato numerico che i modelli di machine learning possono comprendere facilmente.
Immagina di avere una colonna “colore” con le categorie “rosso”, “verde” e “blu”. Con l’one-hot encoding, trasformiamo questa colonna in tre nuove colonne: “rosso”, “verde” e “blu”. Ogni riga del dataset avrà un valore “1” nella colonna corrispondente al colore della riga e “0” nelle altre colonne. In questo modo, il modello di machine learning può interpretare facilmente i dati, senza confondersi con i nomi delle categorie.

Il codice sotto riportato illustra un metodo comune per applicare l’one-hot encoding su colonne di un DataFrame. La colonna ‘encoded.variety’ riflette l’applicazione del label encoding, in cui le categorie sono convertite in valori numerici. Le successive tre colonne rappresentano invece l’one-hot encoding, una tecnica in cui ogni categoria viene rappresentata da una colonna binaria. Questa rappresentazione aiuta a distinguere chiaramente le differenze tra le due tecniche di encoding e offre una visione più approfondita di come i dati categorici vengono trasformati per l’analisi da parte dei modelli di machine learning.

2. Normalizzazione delle Feature

La normalizzazione delle feature è una pratica che mira a modificare le caratteristiche dei dati in modo che siano più adatte all’analisi da parte dei modelli di machine learning. In generale, le tecniche di normalizzazione possono includere il ridimensionamento delle features in un determinato intervallo o la standardizzazione in modo che abbiano una media zero e una deviazione standard unitaria. Questo processo è utile perché alcuni algoritmi di machine learning possono essere influenzati dalla scala delle features, e la normalizzazione aiuta a garantire che tutte le features abbiano un impatto equo sui risultati del modello.

Min-Max scaling

Il Min-Max Scaling è una tecnica di normalizzazione delle feature che trasforma i valori delle features in un intervallo specificato, di solito tra 0 e 1. Questo viene fatto sottraendo il valore minimo della feature e dividendolo per la differenza tra il valore massimo e il valore minimo della stessa feature. In pratica, questa tecnica comprime i valori delle features in un intervallo uniforme, rendendo più facile la comparazione tra le features e garantendo che abbiano un impatto equo sui risultati del modello. È particolarmente utile quando si desidera mantenere le relazioni di scala tra i dati, ma si vuole rimuovere la dipendenza dalla scala assoluta dei valori. Di seguito le formule di trasformazione della j-esima feature.

mj=mini∈(o,...,m−1)(xij)Mj=maxi∈(o,...,m−1)(xij)m_j=min_{i\in(o, ... , m-1 )} (x_{ij}) \\ M_j=max_{i\in(o, ... , m-1 )} (x_{ij}) \\ x~j=xj−mjMj−mj\tilde{x}_j= \frac{x_j-m_j}{M_j-m_j}

Come mostrato nel codice sopra riportato, il Min-Max Scaling trasforma i dati in un intervallo compreso tra 0 e 1, mantenendo la relativa posizione dei campioni all’interno della distribuzione originale. Tuttavia, questa trasformazione non preserva la sparsità dei dati, che si riferisce alla presenza di molte osservazioni con valori nulli o vicini a zero all’interno del dataset. Inoltre, il Min-Max Scaling è sensibile agli outliers, cioè ai valori estremamente alti o bassi rispetto alla maggior parte dei dati. Questi valori estremi possono distorcere la scala della trasformazione, comprimendo tutti gli altri valori nell’intervallo, rendendo così più difficile l’interpretazione e l’addestramento del modello.

Max Abs Scaling

Il Max Abs Scaling è una tecnica di normalizzazione delle feature che mira a ridimensionare i dati in modo che il valore assoluto massimo di tutte le features è pari a 1. In pratica, ogni valore della feature viene diviso per il valore assoluto massimo tra tutte le features. Di seguito le formule di trasformazione della j-esima feature.

Mj=maxi∈(o,...,m−1)∣xij∣M_j=max_{i\in(o, ... , m-1 )} |x_{ij}| \\ x~j=xjMj\tilde{x}_{j}= \frac{x_{j}}{M_j}

Dal codice è evidente che questo tipo di ridimensionamento conserva la direzione generale dei dati, limitandoli entro un intervallo specifico, mantenendo allo stesso tempo la loro distribuzione relativa invariata. Il Max Abs Scaling, a differenza del Min-Max Scaling, conserva anche la sparsità dei dati, poiché i valori nulli rimangono immutati secondo la formula di trasformazione. Tuttavia, come accade con il Min-Max Scaling, questo metodo è anch’esso sensibile agli outlier.

Mean Variance Scaling

Il Mean Variance Scaling, o Standardizzazione dei dati, è una tecnica di normalizzazione delle feature che consiste nel trasformare le feature in modo che abbiano una media zero e una deviazione standard unitaria. In pratica, per ogni feature, si sottrae la media dei suoi valori e poi si divide per la deviazione standard. Questo processo fa sì che le feature abbiano una distribuzione con media zero e varianza unitaria, rendendo più facile per i modelli di machine learning confrontare e interpretare i dati. Di seguito le formule di trasformazione della j-esima feature.

μj=1m∑i=om−1xij\mu_j=\frac{1}{m}\sum_{i=o}^{m-1}{x_{ij}}\\ σj=1m∑i=om−1(xij−μj)2\sigma_j=\sqrt{\frac{1}{m}\sum_{i=o}^{m-1}{(x_{ij}-\mu_j)^2}} x~j=xj−μjσj\tilde{x}_j= \frac{x_j-\mu_j}{\sigma_j}

Come si può notare dalle formule di trasformazione e dai grafici, questa tipologia di trasformazione non conserva la sparsità dei dati: i valori che in precedenza erano nulli ora sono modificati. Inoltre, poiché sia la media che la varianza dipendono da tutti i campioni e non solo dal più grande o dal più piccolo, questo metodo, a differenza dei precedenti, non è influenzato dagli outlier.

Whitening

Il whitening è una tecnica avanzata di normalizzazione ampiamente utilizzata nel machine learning e nell’analisi dei dati. Il suo obiettivo principale è quello di rendere i dati “bianchi”, ovvero eliminare la correlazione tra le features e uniformare la loro distribuzione. Questo processo trasforma le features in uno spazio nuovo in cui le variabili sono incorrelate e hanno una deviazione standard pari a 1.
Ciò semplifica l’interpretazione dei dati e può migliorare le prestazioni dei modelli di machine learning, in quanto riduce la ridondanza nei dati e garantisce che le features contengano informazioni diverse tra loro. Tuttavia, il whitening presenta alcune limitazioni: richiede una matrice di covarianza diagonalizzabile ed è computazionalmente costoso. A causa di queste limitazioni si preferisce applicare altre tecniche.

La matrice di covarianza è uno strumento che permette di comprendere le relazioni tra le diverse variabili nei dati. Essenzialmente, misura come le variazioni di una variabile sono associate alle variazioni di altre variabili. Ad esempio, una covarianza positiva indica che le variabili tendono a variare nella stessa direzione, mentre una covarianza negativa indica che variano in direzioni opposte, ed una nulla indica che le variabili sono indipendenti.
per saperne di più leggi questo articolo

Il codice fornito qui sopra offre una possibile implementazione del whitening.
Attraverso i grafici presentati, è evidente l’effetto del whitening sui dati: la trasformazione ha portato a una distribuzione con media zero e varianza unitaria. È interessante notare che, prima della trasformazione, i dati mostravano una relazione lineare tra le due variabili, mentre dopo l’applicazione del whitening questa relazione è scomparsa.

3. Normalizzazione delle Istanze

La Normalizzazione delle Istanze è una pratica comune nel campo del machine learning che si concentra sulla standardizzazione delle singole istanze o campioni di dati all’interno di un dataset. A differenza della normalizzazione delle feature, che si concentra sulla standardizzazione delle colonne o delle variabili del dataset, la normalizzazione delle istanze lavora sulle righe, garantendo che ciascuna istanza abbia una scala uniforme. Questo processo è utile quando si desidera che ogni campione di dati contribuisca in modo equo all’analisi del modello, indipendentemente dalla scala dei suoi valori. È particolarmente utile in situazioni in cui le variabili hanno scale di misura diverse e si desidera evitare che una variabile con valori più grandi o più piccoli influenzi in modo sproporzionato il modello. È molto efficace per gli algoritmi di machine learning sensibili alla scala dei dati, come le reti neurali e i modelli basati su distanze, come il k-Nearest Neighbors (k-NN).

L1

La normalizzazione L1, anche conosciuta come “L1 normalization” o “L1 regularization”, è una tecnica di normalizzazione utilizzata nel machine learning per standardizzare le istanze di dati in modo che la somma assoluta dei valori di ogni istanza sia uguale a 1. Questo processo coinvolge la divisione di ciascuna istanza per la somma assoluta dei suoi valori, garantendo così che la somma degli stessi sia pari a 1.

∣∣x∣∣1=∑i=0m−1∣xi∣||x||_1= \sum_{i=0}^{m-1}{|x_i|} \\ x~j=xj∣∣x∣∣1\tilde{x}_j=\frac{x_j}{||x||_1}

La normalizzazione L1 è particolarmente utile quando si desidera che la distribuzione dei dati sia sparsa e quando si vogliono ridurre al minimo l’effetto di valori anomali o outlier. Questa tecnica è spesso utilizzata in problemi di classificazione e regressione quando si desidera che ogni feature abbia un peso proporzionale alla sua importanza relativa nel modello, senza essere influenzata da valori estremi.

L2

La normalizzazione L2, anche chiamata “L2 normalization” o “L2 regularization”, è una tecnica di normalizzazione utilizzata nel machine learning per standardizzare le istanze di dati in modo che la norma L2 di ciascuna istanza sia uguale a 1. Questo processo coinvolge la divisione di ciascuna istanza per la norma L2 dei suoi valori, garantendo così che la somma dei quadrati dei valori sia pari a 1.

∣∣x∣∣1=∑i=0m−1∣xi∣2||x||_1= \sqrt{\sum_{i=0}^{m-1}{|x_i|^2} }\\ x~j=xj∣∣x∣∣2\tilde{x}_j=\frac{x_j}{||x||_2}

La normalizzazione L2 è particolarmente utile per ridurre l’effetto di variazioni nella scala delle feature e per favorire una migliore generalizzazione dei modelli di machine learning. Questa tecnica è ampiamente utilizzata in problemi di classificazione e regressione per mantenere l’equilibrio tra le feature e per evitare problemi di overfitting.

Scarica il Notebook Completo

📎 normalization.ipynb


Resta sempre aggiornato