Modello di classificazione binaria per dati non bilanciati


14

Ho un set di dati con le seguenti specifiche:

  • Set di dati di addestramento con 193.176 campioni con 2.821 positivi
  • Set di dati di prova con 82.887 campioni con 673 positivi
  • Ci sono 10 funzioni.

Voglio eseguire una classificazione binaria (0 o 1). Il problema che sto affrontando è che i dati sono molto sbilanciati. Dopo aver normalizzato e ridimensionato i dati insieme ad alcune funzionalità ingegneristiche e usando un paio di algoritmi diversi, questi sono i migliori risultati che ho potuto ottenere:

mean square error : 0.00804710026904
Confusion matrix : [[82214   667]
                   [    0     6]]

cioè solo 6 colpi positivi corretti. Questo sta usando la regressione logistica. Ecco le varie cose che ho provato con questo:

  • Diversi algoritmi come RandomForest, DecisionTree, SVM
  • Modifica del valore dei parametri per chiamare la funzione
  • Alcune tecniche di intuizione basate sull'intuizione per includere funzionalità composte

Ora, le mie domande sono:

  1. Cosa posso fare per migliorare il numero di successi positivi?
  2. Come si può determinare se in questo caso c'è un eccesso di vestibilità? (Ho provato a tramare ecc.)
  3. A che punto si potrebbe concludere se forse questo è il miglior adattamento possibile che potrei avere? (che sembra triste considerando solo 6 risultati su 673)
  4. Esiste un modo per far pesare di più le istanze positive del campione in modo che il riconoscimento del pattern migliori, portando a più hit?
  5. Quali grafici grafici potrebbero aiutare a rilevare valori anomali o qualche intuizione su quale modello si adatterebbe meglio?

Sto usando la libreria scikit-learn con Python e tutte le implementazioni sono funzioni di libreria.

modificare:

Ecco i risultati con alcuni altri algoritmi:

Classificatore di foresta casuale (n_estimators = 100)

[[82211   667]
[    3     6]]

Alberi decisionali:

[[78611   635]
[ 3603    38]]

Risposte:


11
  1. Dato che stai eseguendo la classificazione binaria, hai provato a regolare la soglia di classificazione? Dal momento che il tuo algoritmo sembra piuttosto insensibile, proverei ad abbassarlo e verificare se c'è un miglioramento.

  2. È sempre possibile utilizzare le curve di apprendimento o un diagramma di un parametro del modello rispetto all'errore di addestramento e convalida per determinare se il modello è troppo adatto. Sembra che sia inadatto nel tuo caso, ma questa è solo intuizione.

  3. Bene, alla fine dipende dal set di dati e dai diversi modelli che hai provato. A questo punto, e senza ulteriori test, non può esserci una risposta definitiva.

  4. Senza pretendere di essere un esperto dell'argomento, ci sono una serie di tecniche diverse che potresti seguire (suggerimento: primo link su google ), ma secondo me dovresti prima assicurarti di scegliere attentamente la tua funzione di costo, in modo che rappresenti ciò che stai effettivamente cercando.

  5. Non sei sicuro di cosa intendi per intuizione del modello, puoi elaborare?

A proposito, quali sono stati i tuoi risultati con i diversi algoritmi che hai provato? Erano diversi?


1
La regolazione della soglia per la regressione logistica ha fatto il trucco. Grazie per l'elenco delle fonti.
tejaskhot,

Qualcuno può incollare uno snippet di codice su come regolare una soglia di regressione logistica?
Blenz,

0

Poiché i dati sono molto distorti, in tal caso possiamo anche provare l'addestramento dei modelli dopo aver eseguito un campionamento eccessivo dei dati.

SMOTE e ADASYN sono alcune delle tecniche che possiamo usare per sovrastampare i dati.

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.