Classificatore per etichette di classe incerte


11

Diciamo che ho un set di istanze con etichette di classe associate. Non importa come queste istanze siano state etichettate, ma quanto sia certa la loro appartenenza alla classe. Ogni istanza appartiene esattamente a una classe. Diciamo che posso quantificare la certezza di ogni appartenenza alla classe con un attributo nominale che va da 1 a 3 (molto sicuro o incerto, rispettivamente).

Esiste una sorta di classificatore che prende in considerazione una tale misura di certezza e se sì, è disponibile nel toolkit WEKA?

Immagino che questa situazione si verifichi abbastanza spesso, ad esempio quando gli esempi sono classificati da esseri umani che non sono sempre completamente sicuri. Nel mio caso, devo classificare le immagini e talvolta un'immagine potrebbe appartenere a più di una classe. Se ciò accade, conferisco alla classe un'alta incertezza, ma la classifico ancora con una sola classe.

O ci sono altri approcci a questo problema, senza un classificatore specializzato? Ad esempio prendendo solo "certe" classificazioni per la formazione? Temo che in questo caso ci saranno più classificazioni errate perché i casi "di frontiera" non sono coperti.


1
Ogni voce appartiene esattamente a una classe? Oppure è possibile che alcune voci appartengano alla classe 12 con certezza 1 e alla classe 34 con certezza 2?
user31264

Ogni voce appartiene esattamente a una classe, in questo caso.
wnstnsmth,

Risposte:


8

Innanzitutto, come già spiegato da @Marc Claesen, la classificazione semi-supervisionata è una delle tecniche per occuparsi della situazione in cui si sa che le classi sono veramente distinte, ma non si è certi a quale classe appartenga effettivamente il caso.

Tuttavia, ci sono anche situazioni correlate, in cui la "realtà" non è così chiara e l'assunto di avere classi davvero distinte non è soddisfatto: i casi limite possono essere una realtà "fisica" (vedi sotto per gli articoli su un'applicazione dove abbiamo incontrato una tale condizione).

C'è un presupposto cruciale per i classificatori semi-supervisionati che è necessario assicurarsi che sia soddisfatto: il presupposto che nello spazio delle caratteristiche, i limiti di classe si presentano con una bassa densità del campione . Questo è indicato come presupposto del cluster.
Anche se la realtà alla base dei tuoi dati ha classi distinte, il tuo set di dati potrebbe avere casi sproporzionatamente più borderline: ad esempio se la tua tecnica di classificazione è mirata a classificare casi difficili, mentre i casi chiari e facili non sono di interesse e già i tuoi dati di allenamento riflettono questo situazione.

prendendo solo "certe" classificazioni per la formazione? Temo che in questo caso ci saranno più classificazioni errate perché i casi "di frontiera" non sono coperti.

Concordo pienamente con te sul fatto che escludere i casi limite sia spesso una cattiva idea: rimuovendo tutti i casi difficili si finisce con un problema artificialmente facile. IMHO è anche peggio che l'esclusione dei casi limite di solito non si ferma alla formazione del modello, ma anche i casi limite sono esclusi dai test, quindi testando il modello solo con casi facili. Con ciò non ti accorgeresti nemmeno che il modello non funziona bene con i casi limite.

Ecco due articoli che abbiamo scritto su un problema che differisce dal tuo in quanto nella nostra applicazione anche la realtà può avere classi "miste" (una versione più generale del tuo problema: anche l'incertezza nelle etichette di riferimento).

I collegamenti vanno alla pagina del progetto di un pacchetto R che ho sviluppato per eseguire i calcoli delle prestazioni. Ci sono ulteriori collegamenti sia alla pagina web ufficiale che ai miei manoscritti dei giornali. Anche se non ho usato Weka finora, capisco che un'interfaccia per R è disponibile .


considerazioni pratiche:

  • Sebbene l'approccio di copia ed etichetta in modo diverso sia semplice, in pratica non funziona bene con tutti i classificatori e le implementazioni. Ad esempio, AFAIK non è in alcun modo in grado di dire libSVMall'ottimizzazione mediante convalida incrociata che tutte le copie di ciascun punto dati devono essere conservate nella stessa piega di convalida incrociata. Pertanto libSVM, la messa a punto probabilmente produrrebbe un modello fortemente overfit.
  • Anche per la regressione logistica, ho scoperto che molte implementazioni non consentivano le etichette di appartenenza parziali di cui avevo bisogno.
  • L'implementazione che ho usato per i documenti sopra è in realtà una ANN senza livello nascosto che utilizza la funzione di collegamento sigmoidal ( nnet::multinom).

La tua prima considerazione pratica, sebbene vera, non si applica libsvmin particolare. Gli libsvmautori forniscono una versione alternativa di ogni versione in cui è possibile una classificazione ponderata per istanza, evitando del tutto questo problema. Sono questo genere di cose che mi spingono ad usare direttamente le librerie di algoritmi, invece di wrapper come Weka / scipy / ... csie.ntu.edu.tw/~cjlin/libsvmtools/#weights_for_data_instances
Marc Claesen,

@MarcClaesen: grazie - non l'avevo visto. Ma non avresti bisogno di fornire due istanze dello stesso caso, una ponderata dire con 1/3 di classe A e l'altra con 2/3 di classe B? In ogni caso, non aver bisogno di fornire molte copie dei casi chiari renderà la messa a punto meno problematica (per i miei dati devo comunque fare la suddivisione esternamente poiché ho una struttura di dati "gerarchica" con misurazioni multiple dei casi reali )
cbeleites insoddisfatto di SX il

@cbeiteles quando un'istanza può appartenere a più classi, dovrai effettivamente fornirla più volte, anche con questa ponderazione dell'istanza. Non avevo considerato quella possibilità.
Marc Claesen,

6

Questa è una delle generalizzazioni della classificazione che vengono affrontate nell'apprendimento semi-supervisionato. Se si dispone di una misurazione di certezza, è possibile utilizzare approcci che consentano di ponderare le istanze di allenamento. Maggiore è la certezza, maggiore è il peso dell'istanza corrispondente. Esempi di tali approcci includono SVM ponderato per istanza e regressione logistica.

Sono sicuro che Weka abbia implementazioni di questi algoritmi. Se tutto il resto fallisce, campionare più istanze dalle istanze con elevata certezza. È possibile utilizzare questo approccio per SVM o LR tradizionali.

Esempio: SVM

Se non sbaglio, weka ha interfacce per LIBSVM . LIBSVM consente di risolvere SVM ponderate per classe in tutte le sue versioni e SVM ponderate per istanza in versioni speciali di ogni versione. Presumo che Weka non supporti quest'ultimo (che è ciò di cui hai bisogno).

SVM ponderato per classe riduce al minimo la seguente funzione obiettivo: con l'iperpiano di separazione nello spazio delle caratteristiche, le variabili lente (quale modello di formazione dell'errata classificazione) e e l'insieme di vettori di supporto appartenenti rispettivamente alla classe positiva e negativa. Utilizzando i pesi e è possibile assegnare diverse penalità di classificazione errata tra le classi. w ξ P N C p o s C n e g

minw,ξw2+CposiPξi+CnegiNξi,
wξPNCposCneg

Sulla base della tua domanda, sembra che tu voglia idealmente usare 6 pesi diversi (2 classi 3 livelli di certezza). È possibile ottenere questo risultato per molti approcci duplicando campioni dei punti con elevata certezza.×

Ad esempio, in termini di SVM, l'utilizzo della stessa istanza di dati due volte produce una soluzione identica al raddoppio del valore associato . Questo è un modo molto semplice per assegnare penalità di classificazione errata elevate a determinate istanze di dati. È possibile seguire lo stesso approccio per la regressione logistica.C


(+1) eccolo! Duplicando le istanze con diverse etichette e pesi delle istanze (ovvero le certezze delle etichette), si possono anche applicare algoritmi come foreste casuali, Naive Bayes ecc. I pesi delle istanze sono così comuni che weka deve avere studenti che lo supportano. Rapidminer (concorrente di weka) lo fa. Impostando la certezza su 1, si può persino modellare problemi multi-etichetta "nitidi".
Steffen,

Hai ragione, WEKA supporta LIBSVM, ma non supporta la ponderazione delle istanze, afaik. L'idea di duplicare istanze è un'ottima idea, penso, soprattutto perché ogni discente "tradizionale" può affrontarla.
wnstnsmth,

2

La difficoltà del problema dipende fortemente da quanto possano essere errate le etichette incerte. Se le etichette incerte hanno ragione, diciamo, il 90% delle volte, probabilmente puoi cavartela semplicemente usando la regressione logistica. D'altra parte, se le etichette sono sbagliate quasi la metà delle volte, potrebbe essere necessario ricorrere ad alcune tecniche speciali. Ecco una pugnalata che ho preso per un problema molto simile. (Abbiamo avuto più osservazioni per etichetta, ma per il resto l'impostazione è abbastanza simile.)


-5

Ho avuto una breve esperienza con il riconoscimento e la classificazione delle immagini.

Le foreste casuali sono una tecnica facile da usare. L'ho implementato su R, dovrebbe essere disponibile anche su Weka. Tuttavia, la facilità d'uso supera l'accuratezza delle previsioni. Se hai un set di addestramento abbastanza grande, può classificare più etichette.

Ha funzionato abbastanza bene per riconoscere le cifre scritte a mano, ma se le tue immagini sono più complesse, solo una versione di prova ti direbbe se funziona bene.


4
Cosa c'entra questo con le etichette di classe incerte?
wnstnsmth,
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.