2015-12-13 27 views
6

Sto usando un classificatore multiclasse (un Support Vector Machine, tramite One-Vs-All) per classificare i campioni di dati. Diciamo che attualmente ho classi distinte n.Come scoprire nuove classi in un algoritmo di apprendimento automatico di classificazione?

Tuttavia, nello scenario che sto affrontando, è possibile che un nuovo campione di dati può appartenere a un nuova classen+1 che non è stato visto prima.

Quindi immagino si possa dire che ho bisogno di una forma di apprendimento online, poiché all'inizio non vi è un set di allenamento distinto adatto a tutti i dati che appaiono in seguito. Invece ho bisogno che SVM si adatti dinamicamente a nuove classi che potrebbero apparire in futuro.

quindi mi chiedo su se e come posso ...

  1. identificare che un nuovo campione di dati non lo fa abbastanza in forma nelle classi esistenti, ma invece dovrebbe comportare la creazione di una nuova classe.

  2. integrare questa nuova classe nel classificatore esistente.

posso vagamente in mente un paio di idee che potrebbero essere gli approcci per risolvere questo problema:

  1. Se nessuno dei classificatori SVM binari (come ho uno per ogni classe, nel caso OVA) prevede una probabilità abbastanza alta (es.> 0.5) per il nuovo campione di dati, potrei presumere che questo nuovo campione di dati possa rappresentare una nuova classe.

  2. Potrei formare un nuovo classificatore binario per quella nuova classe e aggiungerlo al SVM multiclasse.

Tuttavia, questi sono solo i miei pensieri ingenui. Mi chiedo se ci sia un approccio "corretto" per questo invece, ad es. usando un algoritmo di Clustering per trovare tutte le classi.

O forse il mio approccio di provare a utilizzare un SVM per questo non è nemmeno appropriato per questo tipo di problema?

L'aiuto su questo è molto apprezzato.

+0

Vuoi continuare ad usare SVM? Qual è la gamma di classi di cui stai parlando? – Mido

+0

- No, non ho necessariamente bisogno di usare SVM. Lo sto solo usando come sembra essere l'algoritmo basato sul kernel più comune. - Non so se sto capendo correttamente la tua domanda sull'intervallo di classi - le classi saranno probabilmente in un intervallo di una dozzina o due fino a cento classi distinte o così. – Oliver

+0

È necessario considerare che non è possibile addestrare un SVM in una classe con un singolo punto dati. Ciò significa che quando trovi un punto che probabilmente appartiene a una nuova classe, dovrai aspettare di ottenere più punti vicini prima di addestrare un classificatore per quella classe. Il problema sorge quando inizi a ottenere due punti che non puoi classificare dove ognuno di essi appartiene a una classe diversa. – Mido

risposta

1

Come in qualsiasi altro problema di apprendimento automatico, se non si dispone di un criterio di qualità, si fa schifo.

Quando le persone dicono "classificazione", hanno supervisionato l'apprendimento in mente: c'è una verità di fondo contro cui è possibile addestrare e controllare i propri algoritmi. Se possono apparire nuove classi, questa verità fondamentale è ambigua. Immagina che una classe sia "cavallo" e tu vedi molti cavalli: cavalli neri, cavalli marroni, persino bianchi. E all'improvviso vedi una zebra. Whoa! È una nuova classe o solo un cavallo insolito? La risposta dipenderà dal modo in cui userai le etichette della tua classe. Lo stesso SVM non può decidere, perché SVM non usa queste etichette, le produce solo. La decisione spetta a un umano (o ad un algoritmo decisionale che sa cosa è "buono" e "cattivo", cioè ha la sua "funzione di perdita" o "funzione di utilità").

Quindi è necessario un supervisore. Ma come puoi aiutare questo supervisore?Due opzioni vengono in mente:

  1. Anomaly Detection. Questo può aiutarti con le prime occorrenze di nuove classi. Dopo la prima zebra che il tuo algoritmo vede, può alzare un allarme: "C'è qualcosa di insolito!". Ad esempio, in sklearn è possibile utilizzare vari algoritmi dalla foresta casuale a SVM di una classe per rilevare osservazioni insolite. Quindi il tuo supervisore può guardarli e decidere se meritano di formare una classe completamente nuova.

  2. Clustering. Può aiutarti a prendere una decisione sulla divisione delle lezioni. Ad esempio, dopo la prima zebra, hai deciso che non valeva la pena di creare una nuova classe. Ma nel tempo, il tuo algoritmo ha accumulato dozzine di immagini. Quindi se si esegue un algoritmo di clustering su tutte le osservazioni etichettate come "cavalli", si potrebbe finire con due cluster ben separati. E sarà di nuovo il supervisore a decidere, se i cavalli a strisce debbano essere staccati da quelli semplici in una nuova classe.

Se si desidera che questa decisione di essere puramente Authomatic, è possibile dividere le classi se il rapporto di entro-cluster distanza media tra il cluster distanza è abbastanza basso. Ma funzionerà bene solo se hai una buona metrica di distanza, in primo luogo. E ciò che è "buono" è di nuovo definito da come usi i tuoi algoritmi e quale sia il tuo obiettivo finale.