Campioni di addestramento senza etichette: includere o non includere?
Sto lavorando su un problema di classificazione multi-etichetta. Ogni campione è in grado di prendere più di una singola etichetta. A volte ai campioni non sono associate etichette.
Il mio set di dati contiene il 50% di campioni con 1 o più etichette associate. I restanti non hanno alcuna etichetta. Sono sicuro che tra i futuri campioni "di prova" ci sarà una popolazione che non ha etichette attaccate.
Finora, ho eliminato i campioni del 50% senza etichette e addestrato un classificatore multietichetta. Di recente, mi sono reso conto che questo modello finirà per prevedere le etichette per un campione anche quando nessuna delle etichette sembra appropriata per esso. Questo mi lascia con 2 opzioni:
- Aggiungi una nuova etichetta chiamata "NONE", che è uguale a 1 per i campioni senza etichette e 0 per i campioni annotati da etichetta.
- Basta addestrare il classificatore multietichetta su tutte le etichette standard. Lascia che il modello capisca da solo quale combinazione di caratteristiche non si qualifica per nessuna etichetta.
Sto pensando nella giusta direzione? Mi piacerebbe anche conoscere i vostri suggerimenti su questo problema.
Risposte
Permettere$n$essere il numero di etichette distinte. Il problema con la tua prima soluzione proposta è che il tuo metodo multi-etichetta ora deve imparare che l'etichetta "NONE" non si verifica mai insieme ad altre etichette. Se il metodo multi-etichetta non presuppone nulla sulla distribuzione delle etichette, allora deve imparare tutto$2^n-1$combinazioni di etichette in cui "NONE"=1 e almeno un'altra etichetta è 1, non si verificano mai. Inoltre, non impedisce di prevedere tutti zeri.
Poiché il tuo problema ha molti campioni senza alcuna etichetta, una soluzione semplice ed efficace è costruire il tuo classificatore gerarchico. Crea due classificatori: il primo è un classificatore binario che rileva solo se tutte le etichette sono zero o meno. Per addestrare questo classificatore binario, trasforma semplicemente i tuoi campioni senza etichette nell'etichetta "A" e tutte le altre etichette nell'etichetta "B". Cioè, una "A" da questo classificatore binario significa nessuna etichetta e una "B" significa che esiste almeno un'etichetta. Il secondo classificatore è qualsiasi classificatore multi-etichetta che desideri, ma addestrato solo su campioni con almeno un'etichetta. Nella fase di previsione/test, questo secondo classificatore viene chiamato solo se il primo classificatore binario prevede l'etichetta "B" (almeno un'etichetta). Dettagli su classificatori gerarchici più elaborati possono essere trovati in:https://www.researchgate.net/publication/306040749_Consistency_of_Probabilistic_Classifier_Trees
Altre soluzioni comuni utilizzano uno di questi quattro metodi multietichetta in combinazione con un classificatore multiclasse (es: K-nn e SVM): rilevanza binaria, catena di classificazione e set di potenza etichetta. Scikit-learn implementa questo metodo. Suggerisco Classifier Chain, che tiene conto delle dipendenze tra le etichette, poiché dalla tua domanda sembra che tu voglia che l'algoritmo preveda abbastanza bene quando non ci sono etichette. Anche Label Powerset è una buona soluzione, a meno che tu non abbia "molte" etichette ($n\geq 20$) e dati insufficienti.