2010-07-11 9 views
7

Ho un set di dati di classe binaria (0/1) con una grande inclinazione verso la classe "0" (circa 30000 vs 1500). Ci sono 7 funzioni per ogni istanza, nessun valore mancante.Come sovradimensionare di proposito i classificatori di alberi Weka?

Quando uso il J48 o di qualsiasi altro albero classificatore, ottengo quasi tutti i "1" casi erroneamente classificati come "0".

Impostare il classificatore su "non eseguito", impostando il numero minimo di istanze per foglio su 1, impostando il fattore di confidenza su 1, aggiungendo un attributo fittizio con numero ID di istanza - tutto ciò non ha aiutato.

non riesco proprio a creare un modello che overfits i miei dati!

Inoltre ho provato quasi tutti gli altri classificatori Weka fornisce, ma ho ottenuto risultati simili.

Utilizzando IB1 ottiene il 100% di precisione (convoglio sul convoglio) e quindi non è un problema di più istanze con gli stessi valori delle caratteristiche e classi diverse.

Come si crea un albero completamente unpruned? Oppure costringere Weka a sovraffaticare i miei dati?

Grazie.

Aggiornamento: Ok, questo è assurdo. Ho usato solo circa 3100 negativi e 1200 esempi positivi, e questo è l'albero ho ottenuto (non potati!):

J48 unpruned tree 
------------------ 

F <= 0.90747: 1 (201.0/54.0) 
F > 0.90747: 0 (4153.0/1062.0) 

Inutile dire che, IB1 dà ancora al 100% di precisione.

Aggiornamento 2: Non so come mi sono perso: SimpleCart non funziona e offre un treno al 100% di precisione sul treno; SimpleCart potato non è influenzato come J48 e ha un rapporto falso positivo positivo e negativo.

+0

possibile domanda relativa: http://stackoverflow.com/ questions/2519997/different-weights-of-false-positive-and-false-negative-in-neural-network – Amro

risposta

2

La soluzione rapida e sporca consiste nel ricampionare. Butta via tutti i 1500 esempi positivi e allenati su un set di dati bilanciati. Sono abbastanza sicuro che ci sia un componente resample in Weka per farlo.

L'altra soluzione è usare un classificatore con un costo variabile per ogni classe. Sono abbastanza sicuro che libSVM ti permetta di fare questo e so che Weka può avvolgere libSVM. Comunque non ho usato Weka da un po 'quindi non posso essere di molto aiuto pratico qui.

+0

Grazie. Non sono sicuro che il ricampionamento funzionerebbe - dagli esperimenti che ho fatto sembra che anche su un set di dati piuttosto bilanciato (1000 esempi per ogni classe) J48 e altri classificatori (eccetto SimpleCart) ottengano risultati ridicoli - FP o FN molto alti per la classe " 0 "o molto alto per la classe" 1 "(e l'altra classe è classificata per lo più correttamente). Per quanto riguarda la classificazione sensibile ai costi - me ne sono completamente dimenticato, ci penserò presto. Grazie! – Haggai

+0

L'approccio sensibile ai costi ha funzionato. Non riesco ancora a capire perché il J48 non registrato non mi dia una precisione del 100% sul set di allenamento, o perché un set di dati piuttosto bilanciato con J48 abbia comunque dato risultati ridicoli. Ma almeno ora ho qualcosa su cui lavorare. Grazie! – Haggai

5

Weka contiene due meta-classificatori di interesse:

Essi consentono di effettuare qualsiasi algoritmo di costo-sensibili (non limitato ad SVM) e di specificare un matrice dei costi (penalità dei vari errori); si assegnerebbe una penalità più elevata per classificare erroneamente le istanze come da 0 rispetto a quelle fornite per erroneamente la classificazione 0 come 1.

Il risultato è che l'algoritmo avrebbe quindi provare a:

minimizzare i costi di errata classificazione atteso (piuttosto che la classe più probabile)

+1

Grazie, è esattamente la soluzione che ho usato. – Haggai

Problemi correlati