Alcuni modi per gestire dati sbilanciati nel machine learning

Alcuni modi per gestire dati sbilanciati nel machine learning

23 Marzo 2022 ai 0
5 modi per gestire dei dati sbilanciati nel machine learning

Se ti devi occupare di classificazione, ti capiterà molto spesso la situazione in cui i tuoi dati siano sbilanciati per quanto riguarda il tag di classificazione. Creare modelli su un dataset che contiene delle classi sbilanciate è una grande sfida per chi si occupa di machine learning, perché purtroppo lo sbilanciamento distorce il modello verso la previsione della classe maggioritaria.

Quindi, gestire dati sbilanciati nel machine learning, ovvero nel dataset è essenziale prima di addestrare il modello. Ci sono varie cose da tenere a mente mentre si lavora con dati non equilibrati.

In questo articolo, discuteremo varie tecniche per gestire lo squilibrio delle classi per addestrare un modello di apprendimento automatico che sia solido e efficace, come ad esempio il sovracampionamento della classe minoritaria o – viceversa – il sottocampionamento della maggioritaria, o infine un combinato tra le due.

Oppure, potrebbe essere necessario anche creare dei dati artificiali, o bilanciare il class-weight.

Scelta delle metriche

Scegliendo una metrica errata come l’accuratezza potrebbe sembrare che vada tutto bene, ma in realtà si ottiene una forte distorsione verso l’etichetta della classe di maggioranza. 

Cosa scegliere quindi come metrica?

Possiamo usare metriche AUC e ROC, oppure precisione, richiamo e punteggio F1. Volendo, anche la matrice di confusione per la visualizzazione di TP, FP, FN, TN.

Dopo aver scelto la metrica che meglio si adatta al tuo caso di studio, è il momento di passare alle tecniche di ribilanciamento.

I 5 modi per gestire dei dati sbilanciati

1) Sovracampionamento della classe minoritaria

Li avrai sentiti nominare Upsampling o Oversampling: è un primo modo per ri-bilanciare la classe di dati, e prevede di creare punti di dati artificiali o duplicati del campione della classe minoritaria per bilanciare l’etichetta della classe. Le tecniche di sovracampionamento sono diverse, e si trovano molti articoli di approfondimento online.

2) Sottocampionamento della classe di maggioranza

Il sottocampionamento (noto anche come Downsampling o Undersampling) prevede di rimuovere o ridurre la maggioranza dei campioni di classe per ribilanciare l’etichetta di classe. Ci sono varie tecniche di sottocampionamento incluse nel pacchetto imblearn, tra cui il sottocampionamento casuale, o i collegamenti Tomek, il campionamento NearMiss e infine l’ENN (Edited Nearest Neighbours), giusto per citare le più utilizzate.

È comunque tutto contenuto nella documentazione di imblearn (versione 0.8.0) per dati sbilanciati nel machine learning.

3) Combinare tecniche di sovracampionamento e sottocampionamento

Le tecniche di sottocampionamento non sono raccomandate in quanto rimuovono la maggior parte dei punti di dati della classe; sarebbero da preferire, ove possibile, le tecniche di sovracampionamento, anche se è meglio ancora combinare le tecniche di sottocampionamento e sovracampionamento per creare un set di dati bilanciato e solido, adatto all’addestramento del modello.

L’idea è di usare prima una tecnica di sovracampionamento per creare punti di dati duplicati e artificiali e usare tecniche di sottocampionamento per rimuovere il rumore o i punti di dati non necessari che sono stati generati.

La libreria Imblearn viene fornita con l’implementazione di tecniche combinate di sovracampionamento e sottocampionamento come Smote-Tomek, che prevede un combinato di Smote (Oversampler) e TomekLinks (Undersampler). C’è poi Smote-ENN: Smote (Oversampler) combinato con ENN (Undersampler).

Nella documentazione di Imblearn sono comunque presenti nel dettaglio tutte queste tecniche.

4) Generare dati artificiali

Il mio consiglio è di non abusare delle tecniche di sottocampionamento, perché rimuovono i punti di dati della classe di maggioranza. Un modo decisamente più efficace è generare punti di dati artificiali di campioni di minoranza, il che in sostanza costituisce una tecnica di sovracampionamento. L’idea è quella di generare punti di dati artificiali di campioni di classe minoritaria nella regione vicina o nelle vicinanze dei campioni di classe minoritaria.

Si usa ad esempio SMOTE (Synthetic Minority Over-Sampling Technique), una tecnica popolare di sovracampionamento che usa l’algoritmo k-nearest neighbor per creare dati artificiali.

Ci sono varie varianti di SMOTE, tra cui:

  • SMOTENC: variante SMOTE per caratteristiche continue e categoriche
  • SMOTEN: variante SMOTE per dati con solo caratteristiche categoriche
  • Borderline SMOTE: nuovi campioni artificiali saranno generati utilizzando i campioni borderline
  • SVMSMOTE: usa un algoritmo SVM per individuare i campioni da utilizzare per generare nuovi campioni artificiali
  • KMeansSMOTE: sovracampiona usando il clustering k-Means prima di sovracampionare usando SMOTE
  • Sintetico adattivo (ADASYN): simile a SMOTE, con la differenza che genera un numero diverso di campioni a seconda di una stima della distribuzione locale della classe da sovracampionare.

Anche qui ti può essere utile la documentazione di Imblearn.

5) Bilanciare class_weight 

Come abbiamo detto, il sottocampionamento rimuove i punti di dati della classe maggioritaria, il che comporta una perdita di dati, mentre sovracampionamento crea punti di dati artificiali della classe minoritaria. Durante l’addestramento del machine learning, si può usare il parametro class_weight per gestire lo squilibrio nel set di dati.

Scikit-learn viene fornito con i parametri class_weight per tutti gli algoritmi di machine learning. Grazie a class_weight il peso di classe diventa inversamente proporzionale alla frequenza di classe nei dati di input.

Formula di calcolo:

n_samples / (n_classes * np.bincount(y))

Conclusione

Gestire dati sbilanciati nel machine learning può essere una grande sfida se si vuole ottenere un machine learning che sia abbastanza robusto. I 5 modi discussi in questo articolo possono essere usati per gestire lo squilibrio prima di addestrare un modello.

Si può anche usare un apprendimento sensibile ai costi o penalizzare gli algoritmi che aumentano il costo di classificazione delle classi maggioritarie.

Inoltre, gli alberi di decisione e la random forest dovrebbero essere preferiti rispetto ad altri algoritmi di apprendimento automatico, dato che funzionano di norma bene su dati squilibrati.

Se non hai trovato quello che cercavi puoi provare ad usare il nostro bot di intelligenza artificiale.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *