Squilibrio di classe nell'apprendimento automatico supervisionato


47

Questa è una domanda in generale, non specifica di alcun metodo o set di dati. Come affrontare un problema di squilibrio di classe nell'apprendimento automatico supervisionato in cui il numero di 0 è circa il 90% e il numero di 1 è circa il 10% nel set di dati. Come possiamo addestrare in modo ottimale il classificatore.

Uno dei modi che seguo è il campionamento per bilanciare il set di dati e quindi addestrare il classificatore e ripeterlo per più campioni.

Sento che questo è casuale, c'è qualche struttura per affrontare questo tipo di problemi.

Risposte:


45

Esistono molti framework e approcci. Questo è un problema ricorrente.

Esempi:

  • Sottocampionamento . Seleziona un sottocampione degli insiemi di zeri in modo tale che le dimensioni corrispondano all'insieme di quelli. Vi è un'evidente perdita di informazioni, a meno che non si utilizzi un framework più complesso (ad esempio, dividerei il primo set su 9 sottoinsiemi più piccoli, reciprocamente esclusivi, formando un modello su ciascuno di essi e raggruppando i modelli).
  • Sovracampionamento . Produrre quelli artificiali fino a quando la percentuale è del 50% / 50%. Il mio precedente datore di lavoro lo utilizzava per impostazione predefinita. Ci sono molti framework per questo (penso che SMOTE sia il più popolare, ma preferisco trucchi più semplici come Noisy PCA ).
  • One Class Learning . Supponi solo che i tuoi dati abbiano alcuni punti reali (quelli) e un sacco di rumore casuale che non esiste fisicamente trapelato nel set di dati (tutto ciò che non è uno è rumore). Utilizzare un algoritmo per denunziare i dati anziché un algoritmo di classificazione.
  • Addestramento sensibile ai costi . Utilizzare una funzione di costo asimmetrica per bilanciare artificialmente il processo di formazione.

Alcune recensioni illuminate, in ordine crescente di complessità tecnica \ livello di dettagli:

Oh, a proposito, il 90% / 10% non è sbilanciato. I set di dati relativi alla frode delle transazioni con carta sono spesso divisi al 99,97% / 0,03%. Questo è sbilanciato.


Ho appena notato che il Noisy PCA che ho citato può essere visto come Oversampling, Regularization o Jitter, a seconda dei dettagli di implementazione.
Lucas Gallindo,

Grazie Lucas per le risorse. Aiuta molto. Ho un problema peculiare a portata di mano in cui tutti i miei campioni sono etichettati come '1'. Tuttavia, in realtà, questo campione ha un'impurità minima, cioè ci sono alcuni record che in realtà dovrebbero essere "0" ma sono etichettati come "1". Credo che questo tipo di problema appartenga a una classificazione di classe. La mia comprensione è corretta. Esiste un framework comune usato per identificarli, inizialmente stavo provando il clustering ma non funziona.
NG_21

1
Tutti questi algoritmi necessitano di alcuni dati etichettati come zero e altri come uno con il 100% di centralità sulla correttezza dell'etichetta (o qualcosa di molto vicino al 100%). Ne hai tutti, ma sai che una piccola percentuale di questi dati è etichettata erroneamente, una situazione diversa. Senza alcuna conoscenza del dominio dell'applicazione, lo attaccherei usando Anomaly Detection, quindi eticherei le anomalie come zero. Quindi prova alcuni algoritmi di classificazione (One Class Learning, forse). Con la conoscenza del dominio dell'applicazione, chiederei prima l'aiuto di un esperto di dominio.
Lucas Gallindo,

13

Questo dipende fortemente dal metodo di apprendimento. La maggior parte degli approcci per scopi generali ha uno (o più) modi per affrontarlo. Una correzione comune consiste nell'assegnare una penalità di classificazione errata più elevata alla classe di minoranza, costringendo il classificatore a riconoscerle (SVM, regressione logistica, reti neurali, ...).

Anche la modifica del campionamento è una possibilità come hai menzionato. In questo caso, il sovracampionamento della classe di minoranza è di solito una soluzione migliore del sottocampionamento della classe di maggioranza.

Alcuni metodi, come le foreste casuali, non richiedono modifiche.


Grazie. Puoi indicare qualsiasi risorsa in cui è spiegato con alcuni esempi. C'è un modo per raggiungere questo obiettivo in R / Python senza ricorrere alla codifica dell'algoritmo da zero.
NG_21

1
Controlla la prima funzione su questo pacchetto R: cran.r-project.org/web/packages/unbalanced/unbalanced.pdf
Lucas Gallindo,

7
Perché la foresta casuale non ha bisogno di modifiche? Penso che puoi ancora assegnare il peso della classe
mac

4

Spesso il problema non è la frequenza ma la quantità assoluta di casi nella classe di minoranza. Se non hai abbastanza variazione nel target rispetto alla variazione nelle caratteristiche, allora potrebbe significare che l'algoritmo non può classificare le cose in modo molto preciso.

Una cosa è che la penalità di errata classificazione potrebbe essere utilizzata nella fase di classificazione e non nella fase di stima dei parametri, se presente. Alcuni metodi non hanno il concetto di parametro, ma producono semplicemente etichette di classe o probabilità di classe.

Quando si dispone di uno stimatore probabilistico, è possibile prendere una decisione di classificazione in base a motivi teorici informativi o con una combinazione di valore aziendale.


1

Aggiungi due trucchi: 1. usa CDF, conta la frequenza nei tuoi dati di allenamento o usa una validazione molto grande (se il tuo set di test non cambierà, ma il set di validazione deve avere la stessa distribuzione con il set di allenamento), quindi ordina la tua previsione e ottieni il primo X% (il conteggio della frequenza precedente) per una classe e le altre sono campione ponderato altro / 2., il modello tenderà alla classe di campione ponderata, è possibile utilizzare la varianza del campione v. ad es. peso = 1/2 (1- (vmax - vi) / vmax)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.