Come gestire set di dati sbilanciati in PyTorch - Tutorial sul campionatore casuale ponderato

Prova Il Nostro Strumento Per Eliminare I Problemi

I set di dati di machine learning del mondo reale spesso soffrono del problema dello squilibrio tra le classi. Quando una o più classi sono rappresentate da un numero significativamente maggiore di esempi di formazione rispetto ad altre, le prestazioni del modello possono peggiorare drasticamente.

In questo tutorial imparerai diverse tecniche da gestire set di dati sbilanciati in PyTorch , attuando a campionatore casuale pesato per migliorare l'addestramento del modello bilanciando un set di dati di classificazione sbilanciato.

Cos'è un set di dati sbilanciato?

Un set di dati sbilanciato si riferisce a un problema di classificazione in cui le classi non sono equamente rappresentate. Tipicamente c'è una classe maggioritaria con un gran numero di esempi e una o più classi minoritarie con relativamente pochi esempi.

Ad esempio, nel rilevamento delle frodi la normale classe non fraudolenta può avere milioni di esempi mentre la classe fraudolenta ne ha solo poche migliaia. Nella diagnosi medica, i pazienti sani spesso superano in modo significativo i pazienti malati.

Problemi con dati sbilanciati

Quando si addestrano modelli di machine learning su dati sbilanciati, si presentano due problemi principali:

  • Il modello è sbilanciato verso la previsione della classe maggioritaria e ignora la classe minoritaria, portando a scarse prestazioni in rari casi.
  • Non ci sono dati sufficienti affinché il modello possa apprendere le complessità dell’identificazione della classe minoritaria

In sostanza, set di dati sbilanciati portano a modelli distorti che funzionano molto bene sulle classi maggioritarie ma scarsamente sulle classi minoritarie che spesso sono i casi più importanti.

Tecniche per la gestione di set di dati sbilanciati

Quando si ha a che fare con set di dati di classificazione sbilanciati e altamente distorti, esistono due approcci principali per bilanciare la distribuzione delle classi:

  1. Sovracampionamento delle classi minoritarie - Esempi duplicati di classi di minoranza
  2. Sottocampionamento delle classi maggioritarie - Rimuovere gli esempi di classi di maggioranza

Inoltre, speciale sono state sviluppate funzioni di perdita per l'apprendimento sbilanciato che appesantiscono la perdita per concentrarsi maggiormente sulle classificazioni errate delle minoranze.

Problemi con il sottocampionamento e il sovracampionamento

Sebbene il sottocampionamento e il sovracampionamento semplici possano aiutare a bilanciare i set di dati, presentano alcune limitazioni:

  • Il sovracampionamento duplica rari esempi che portano al sovradattamento
  • Il sottocampionamento elimina dati utili dalla classe maggioritaria

Una soluzione è sfruttare metodi di ricampionamento sintetico come SMOTE che generano nuovi esempi significativi di minoranze sintetiche anziché semplici duplicati. Oppure utilizza tecniche avanzate di sottocampionamento che campionano in modo intelligente esempi di classi maggioritarie.

Campionamento casuale ponderato

Una tecnica alternativa consiste nel bilanciare dinamicamente il campionamento dei batch durante l'addestramento utilizzando a campionatore casuale pesato anziché modificare direttamente il set di dati. Il campionatore campionerà più lotti di classi minoritarie per contrastare lo squilibrio.

Il campionamento batch casuale ponderato si allinea bene con il processo di discesa del gradiente stocastico, è semplice da implementare in PyTorch ed evita problemi di duplicazione o eliminazione dei dati.

Implementazione di un campionatore casuale ponderato in PyTorch

PyTorch fornisce un |_+_| classe che può essere utilizzata per campionare lotti con una probabilità specifica ponderando automaticamente le classi in base alla loro frequenza. Ciò consente di bilanciare dinamicamente un set di dati sbilanciato durante l'addestramento.

Segui l'implementazione di un campionatore casuale ponderato per migliorare l'addestramento su un set di dati di classificazione sbilanciato.

Set di dati di classificazione sbilanciato

Innanzitutto viene definito un set di dati personalizzato estremamente sbilanciato con 100 esempi di file classe positiva di minoranza e 10.000 esempi di classe negativa a maggioranza .

Ciò può rappresentare un'attività critica di diagnosi dei guasti della macchina, ad esempio laddove i guasti sono rari rispetto al normale funzionamento.

|_+_|

Ciò fornisce un set di dati estremamente distorto con 100 esempi positivi di minoranza e 10.000 esempi negativi di maggioranza per la classificazione binaria.

Campionatore casuale ponderato

Successivamente vengono calcolate le frequenze delle classi minoritarie e maggioritarie:

|_+_|

Questi conteggi di classe vengono utilizzati per definire i pesi per il campionamento casuale per preferire la classe minoritaria:

|_+_|

Questo imposta il il peso per la classe positiva di minoranza deve essere 100 volte superiore rispetto alla classe maggioritaria negativa. Pertanto è molto più probabile che gli esempi positivi vengano campionati.

Infine viene istanziato un campionatore casuale pesato utilizzando i pesi calcolati e impostati sul dataloader:

|_+_|

Ora i batch campionati dal caricatore dati verranno bilanciati automaticamente nonostante il significativo squilibrio di classi nel set di dati grezzi.

Formazione sui dati sbilanciati

Gestendo correttamente i dati sbilanciati utilizzando tecniche come il campionamento batch ponderato, le prestazioni del modello e la velocità di convergenza spesso migliorano in modo significativo poiché il modello vede un set di dati più bilanciato durante l'addestramento.

Tuttavia, ulteriori tecniche specializzate possono migliorare ulteriormente le prestazioni del modello di dati sbilanciati, tra cui:

  • Funzioni di perdita come Focal Loss che si concentrano maggiormente sugli errori di classe minoritaria
  • Modelli a due fasi che filtrano gli elementi negativi della maggioranza prima della previsione finale
  • L'aumento dei dati come SMOTE sintetizza ulteriori esempi di minoranza

Vedi i riferimenti PyTorch di seguito per maggiori dettagli sull'implementazione di questi algoritmi avanzati di apprendimento sbilanciato.

Conclusione

I set di dati di classificazione sbilanciati degradano significativamente le prestazioni del modello a causa della distorsione verso la previsione della classe maggioritaria. È necessario prestare attenzione per gestire correttamente la distorsione nei dati di addestramento.

Implementare a campionatore casuale ponderato in PyTorch è semplice e fornisce una tecnica efficace per migliorare la convergenza e l'accuratezza sulle classi minoritarie quando i set di dati hanno una distribuzione delle classi sbilanciata.

Per ulteriori miglioramenti delle prestazioni, esplora la ponderazione delle perdite, i classificatori a due stadi, l'aumento dei dati SMOTE e altri algoritmi specializzati per l'apprendimento dei dati sbilanciati.

Altre risorse di dati sbilanciati PyTorch

Guarda Anche: