Ordinamento di più tag | Risoluzione dei problemi relativi all'ordinamento di più etichette

Contenuti

introduzione

Per qualche ragione, problemi di regressione e classificazione finiscono per catturare la maggior parte dell'attenzione nel mondo del machine learning. Le persone non si rendono conto dell'ampia varietà di problemi di apprendimento automatico che possono esistere.

Per me, In secondo luogo, Amo esplorare diversi tipi di problemi e condividere il mio apprendimento con la comunità qui.

In precedenza, condiviso le mie conoscenze sugli algoritmi genetici con la comunità. Continuando con la mia ricerca, Intendo trattare un argomento che ha un problema molto meno diffuso ma è un problema persistente nella comunità della scienza dei dati, qual è la classificazione di più tag?.

In questo articolo, Ti darò una spiegazione intuitiva di cosa comporta l'ordinamento multi-tag, insieme a un'illustrazione di come risolvere il problema. Spero che ti mostri l'orizzonte di ciò che la scienza dei dati comprende. Quindi andiamo avanti!

Sommario

  1. Che cos'è l'ordinamento multi-tag??
  2. Multiclasse v / s Multi-etichetta
  3. Caricamento e generazione di set di dati di etichette multiple
  4. Tecniche per risolvere un problema di classificazione di più etichette
    1. Metodo di trasformazione del problema
    2. Metodo dell'algoritmo adattato
    3. L'ensemble si avvicina
  5. Casi studio

1. Che cos'è l'ordinamento multi-tag??

Diamo un'occhiata all'immagine qui sotto.

beautiful_scenery_05_hd_picture_166257-1808404

E se ti chiedessi se questa immagine contiene una casa?? L'opzione sarà oh NO.

Considera un altro caso, come tutte le cose (o etichette) sono rilevanti per questa immagine.

screenshot-2017-25-08-at-11-04-32-pm-2363102

Questo tipo di problemi, dove abbiamo un insieme di variabili target, sono conosciuti come classificazione di tag multipli i problemi. Quindi, C'è differenza tra questi due casi?? Chiaramente, sì, perché nel secondo caso qualsiasi immagine può contenere un diverso insieme di questi tag multipli per immagini diverse.

Ma prima di approfondire i tag multipli, Volevo solo chiarire una cosa, poiché molti di voi potrebbero essere confusi su come questo differisca dal problema delle classi multiple.

Quindi, cerchiamo di capire la differenza tra queste due serie di problemi.

2. Multi-etichetta v / s multi-classe

Considera un esempio per capire la differenza tra questi due. Per questo, Spero che l'immagine qui sotto renda le cose abbastanza chiare. Cerchiamo di capirlo.

screenshot-2017-08-20-at-12-20-24-am-2116411

Per qualsiasi film, il Central Film Certification Board, rilascia un certificato in base al contenuto del film.

Ad esempio, se guardi in alto, questo film è stato valutato come 'U / UN’ (che significa "sorveglianza dei genitori per i bambini di età inferiore a" 12 anni’) certificato. Esistono altri tipi di classi di certificati come 'UN’ (Riservato agli adulti) oh 'U’ (Visualizzazione pubblica illimitata), ma è certo che ogni film può essere classificato solo con uno solo di questi tre tipi di certificati.

In sintesi, ci sono più categorie ma a ogni istanza ne viene assegnata una sola, così, questi problemi sono noti come classificazione multiclasse guaio.

Ancora, se guardi indietro alla foto, questo film è stato classificato nel genere della commedia e del romanticismo. Ma c'è una differenza nel fatto che questa volta ogni film potrebbe rientrare in uno o più set di categorie differenti.

Perciò, ogni istanza può essere assegnata a più categorie, ecco perché questi tipi di problemi sono noti come classificazione di tag multipli guaio, dove abbiamo una serie di etichette di destinazione.

Eccellente! Ora puoi distinguere tra un problema multi-etichetta e multi-classe. Quindi, iniziamo ad affrontare questo tipo di problemi.

3. Caricamento e generazione di set di dati di etichette multiple

Scikit-learn ha fornito una libreria separata scikit-multilearn per l'ordinamento di più tag.

Per una migliore comprensione, iniziamo a fare pratica con un set di dati multi-etichetta. Puoi trovare un set di dati del mondo reale nel deposito fornito dal pacchetto MULAN. Questi set di dati sono presenti in formato ARFF.

Quindi, per iniziare con uno di questi set di dati, guarda il codice Python qui sotto per caricarlo nel tuo notebook jupyter. Qui ho scaricato il set di dati del lievito dal repository.

importa scipy
da scipy.io import arff
dati, meta = scipy.io.arff.loadarff('/Users/shubhamjain/Documents/yeast/yeast-train.arff')
df = pd.DataFrame(dati)

Ecco come appare il set di dati.

screen-shot-2017-08-26-at-2-48-29-pm-2076083

Qui, Per rappresenta gli attributi o variabili indipendenti e Classe rappresenta le variabili target.

Per scopi pratici, abbiamo un'altra opzione per generare un set di dati di tag multipli artificiali.

da sklearn.datasets import make_multilabel_classification

# questo genererà un set di dati multi-etichetta casuale
X, y = make_multilabel_classification(sparse = Vero, n_labels = 20,
return_indicator="scarso", allow_unlabeled = False)

Comprendiamo i parametri usati sopra.

scarso: È vero, restituisce un array sparso, dove matrice sparsa indica una matrice che ha un gran numero di elementi nulli.

n_labels: Il numero medio di etichette in ogni istanza.

indicatore_ritorno: e "scarso"’ Ritorno E in formato indicatore binario sparse.

allow_unlaoted: e Certo, alcune istanze potrebbero non appartenere a nessuna classe.

Avrai notato che abbiamo usato ovunque una matrice sparsa, e scikit-multilearn consiglia inoltre di utilizzare i dati in modo sparso perché è molto raro che un set di dati del mondo reale sia denso. In genere, il numero di etichette assegnate a ciascuna istanza è molto inferiore.

Bene, ora abbiamo i nostri set di dati pronti, quindi impariamo rapidamente le tecniche per risolvere il problema multi-tag.

4. Tecniche per risolvere un problema di classificazione di più etichette

Fondamentalmente, ci sono tre metodi per risolvere un problema di classificazione di etichette multiple, vale a dire:

  1. Trasformazione del problema
  2. Algoritmo adattato
  3. L'ensemble si avvicina

4.1 Trasformazione del problema

In questo metodo, proveremo a trasformare il nostro problema con più etichette in un problema con una singola etichetta.

Questo metodo può essere fatto in tre modi diversi come:

  1. Rilevanza binaria
  2. catene di smistamento
  3. Etichetta Powerset

4.1.1 Rilevanza binaria

Questa è la tecnica più semplice, che fondamentalmente tratta ogni tag come un problema di classificazione di una singola classe separata.

Ad esempio, consideriamo un caso come mostrato di seguito. Abbiamo il set di dati in questo modo, dove X è la caratteristica indipendente e Y è la variabile target.
screenshot-2017-08-21-at-1-42-27-am-4915810

In rilevanza binaria, questo problema è diviso in 4 diversi problemi di classificazione di singole classi, come mostrato nella figura sottostante.

screenshot-2017-08-21-at-1-46-00-am-5139109

Non dobbiamo farlo manualmente, la libreria multi-learning fornisce la sua implementazione in Python. Quindi, vediamo rapidamente la sua implementazione nei dati generati casualmente.

# usando la rilevanza binaria
da skmultilearn.problem_transform import BinaryRelevance
da sklearn.naive_bayes import GaussianNB

# inizializza il classificatore multi-etichetta di rilevanza binaria
# con un classificatore di base gaussiano ingenuo
classificatore = Rilevanza binaria(gaussianoNB())

# treno
classificatore.fit(X_treno, y_train)

# prevedere
previsioni = classificatore.predizione(X_test)

NOTA: Qui, abbiamo usato l'algoritmo Naive Bayes, ma puoi usare qualsiasi altro algoritmo di ordinamento.

Ora, in un problema di classificazione di più tag, non possiamo semplicemente usare le nostre normali metriche per calcolare l'accuratezza delle nostre previsioni. Per quello scopo, noi useremo punteggio di precisione metrica. Questa funzione calcola la precisione del sottoinsieme, il che significa che l'insieme di etichette previsto deve corrispondere esattamente al vero insieme di etichette.

Quindi, calcoliamo la precisione delle previsioni.

da sklearn.metrics import precision_score
precision_score(y_test,predizioni)

Perciò, abbiamo ottenuto un punteggio di precisione di 45%, non è poi così male. Vediamo rapidamente i suoi pro e contro.

È il metodo più semplice ed efficiente, pero el único inconveniente de este método es que no considera la correlación de etiquetas porque trata cada variabile de destino de forma independiente.

4.1.2 catene di smistamento

In questo, il primo classificatore viene addestrato solo sui dati di input e quindi ogni classificatore successivo viene addestrato sullo spazio di input e tutti i classificatori precedenti nella catena.

Cerchiamo di capirlo con un esempio. Nel set di dati mostrato di seguito, abbiamo X come spazio di input e Y come etichette.

screenshot-2017-25-08-at-12-41-13-am-7733854

Nelle catene di classificatori, questo problema diventerebbe 4 diversi problemi di tag singolo, come mostrato di seguito. Qui il colore giallo è lo spazio di input e la parte bianca rappresenta la variabile di destinazione.

screen-shot-2017-25-08-at-11-31-58-pm-8059426

Questo è abbastanza simile alla rilevanza binaria, l'unica differenza è che forma stringhe per preservare la mappatura delle etichette. Quindi, proviamo a implementarlo usando la libreria multi-learning.

# usando catene di classificatori
da skmultilearn.problem_transform import ClassifierChain
da sklearn.naive_bayes import GaussianNB

# inizializza le catene di classificatori classificatore multi-etichetta
# con un classificatore di base gaussiano ingenuo
classificatore = ClassificatoreCatena(gaussianoNB())

# treno
classificatore.fit(X_treno, y_train)

# prevedere
previsioni = classificatore.predizione(X_test)

precision_score(y_test,predizioni)
0.21212121212121213

Possiamo vedere che usando questo abbiamo ottenuto una precisione di circa 21%, che è molto meno del binario Rilevanza. Ciò potrebbe essere dovuto all'assenza di correlazione dei tag, poiché abbiamo generato i dati in modo casuale.

4.1.3 Etichetta Powerset

In questo, trasformiamo il problema in un problema multiclasse con un classificatore multiclasse addestrato su tutte le combinazioni di etichette univoche trovate nei dati di training.

Capiamo con un esempio.

screenshot-2017-25-08-at-12-46-30-am-6950408

In questo, troviamo che x1 e x4 hanno le stesse etichette, allo stesso modo, x3 e x6 hanno lo stesso set di etichette. Perciò, il gruppo di alimentazione delle etichette trasforma questo problema in un unico problema multiclasse, come mostrato di seguito.

screenshot-2017-25-08-at-12-46-37-am-1080850

Perciò, label powerset ha assegnato una classe univoca a ogni possibile combinazione di etichette presente nel training set.

Vediamo la sua implementazione in Python.

# utilizzando Label Powerset
da skmultilearn.problem_transform import LabelPowerset
da sklearn.naive_bayes import GaussianNB

# inizializza il classificatore multi-etichetta Label Powerset
# con un classificatore di base gaussiano ingenuo
classificatore = LabelPowerset(gaussianoNB())

# treno
classificatore.fit(X_treno, y_train)

# prevedere
previsioni = classificatore.predizione(X_test)

precision_score(y_test,predizioni)
0.5757575757575758

Questo ci dà la massima precisione tra i tre di cui abbiamo discusso finora.. L'unico aspetto negativo di questo è che con l'aumento dei dati di allenamento, aumentare il numero delle classi. Perciò, aumenta la complessità del modello e porterebbe a una minore precisione.

Ora, Diamo un'occhiata al secondo metodo per risolvere il problema della classificazione multi-etichetta.

4.2 Algoritmo adattato

Algoritmo adattato, Come suggerisce il nome, adattare l'algoritmo per eseguire direttamente la classificazione di più etichette, invece di trasformare il problema in diversi sottoinsiemi di problemi.

Ad esempio, la versione multi-tag di kNN è rappresentata da MLkNN. Quindi, implementiamolo rapidamente nel nostro set di dati generato casualmente.

da skmultilearn.adapt import MLkNN

classificatore = MLkNN(k=20)

# treno
classificatore.fit(X_treno, y_train)

# prevedere
previsioni = classificatore.predizione(X_test)

precision_score(y_test,predizioni)
0.69

Eccellente! Ha raggiunto un punteggio di precisione di 69% nei tuoi dati di prova.

Sci-kit learn fornisce un supporto per la classificazione multi-tag integrato in alcuni algoritmi come Random Forest e Ridge regression. Perciò, può chiamarli direttamente e prevedere l'output.

Puoi controllare il libreria di apprendimento multiplo per maggiori informazioni su altri tipi di algoritmi personalizzati.

4.3 L'ensemble si avvicina

Ensemble produce sempre risultati migliori. La libreria Scikit-Multilearn fornisce diverse funzioni di classificazione degli insiemi, che puoi usare per ottenere i migliori risultati.

Per l'attuazione diretta, puoi consultare qui.

5. Casi studio

I problemi di classificazione di più tag sono molto comuni nel mondo reale. Quindi, diamo un'occhiata ad alcune delle aree in cui possiamo trovarne l'uso.

1. Classificazione audio

Abbiamo già visto canzoni classificate in diversi generi. Sono anche classificati sulla base di emozioni o stati d'animo come “calma rilassante”, “tristezza-solitudine”, eccetera.

Fonte: Collegamento

2. Classificazione delle immagini

Anche l'ordinamento di più etichette utilizzando le immagini ha una vasta gamma di applicazioni. Le immagini possono essere etichettate per indicare oggetti diversi, persone o concetti.

screen-shot-2017-25-08-at-12-17-31-am-4812029

3. Bioinformatica

La classificazione di etichette multiple è ampiamente utilizzata nel campo della bioinformatica, ad esempio, la classificazione dei geni nel dataset del lievito.

Viene anche utilizzato per prevedere più funzioni proteiche utilizzando varie proteine ​​non etichettate.. Puoi controllare questo carta per maggiori informazioni.

4. Categorizzazione del testo

Tutti dovrebbero controllare le notizie di Google una volta. Quindi, ciò che fa Google News è taggare tutte le notizie in una o più categorie in modo che vengano visualizzate in categorie diverse. Ad esempio, Guarda la foto sotto.

screen-shot-2017-08-26-at-3-53-31-pm-2722253

Fonte immagine: Google News

Quella stessa notizia è presente nelle categorie dell'India, Tecnologia, Più recente, eccetera. perché è stato classificato in queste diverse etichette. Perciò, è un problema di classificazione di più tag.

Ci sono molte altre aree, quindi esplora e commenta qui sotto se vuoi condividerlo con la community.

6. Note finali

In questo articolo, ti ha introdotto al concetto di più problemi di classificazione dei tag. Ho anche trattato gli approcci per risolvere questo problema e casi d'uso pratici in cui potrebbe essere necessario gestirlo utilizzando la libreria multi-learning in Python.
Spero che questo articolo ti dia un vantaggio quando ti trovi di fronte a questo tipo di problemi. Se hai dei dubbi / suggerimento, Sentiti libero di contattarmi qui sotto!

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.