Quale algoritmo di classificazione statistica può prevedere vero / falso per una sequenza di input?


14

Data una sequenza di input, devo determinare se questa sequenza ha una certa proprietà desiderata. La proprietà può essere solo vera o falsa, ovvero ci sono solo due possibili classi a cui una sequenza può appartenere.

L'esatta relazione tra la sequenza e la proprietà non è chiara, ma credo che sia molto coerente e dovrebbe prestarsi alla classificazione statistica. Ho un gran numero di casi su cui addestrare il classificatore, anche se potrebbe essere leggermente rumoroso, nel senso che c'è una leggera probabilità che a una sequenza venga assegnata la classe sbagliata in questo set di addestramento.

Dati di formazione di esempio:

Sequence 1: (7 5 21 3 3) -> true
Sequence 2: (21 7 5 1) -> true
Sequence 3: (12 21 7 5 11 1) -> false
Sequence 4: (21 5 7 1) -> false
...

In termini approssimativi, la proprietà è determinata dall'insieme di valori nella sequenza (ad es. La presenza di un "11" significa che la proprietà sarà quasi sicuramente falsa), così come l' ordine dei valori (ad es. "21 7 5 "aumenta significativamente la possibilità che la proprietà sia vera).

Dopo l'allenamento, dovrei essere in grado di dare al classificatore una sequenza mai vista prima, come (1 21 7 5 3), e dovrebbe produrre la sua sicurezza che la proprietà è vera. Esiste un noto algoritmo per addestrare un classificatore con questo tipo di ingressi / uscite?

Ho considerato l'ingenuo classificatore bayesiano (che non è davvero adattabile al fatto che l'ordine conta, almeno non senza rompere gravemente l'assunto che gli input siano indipendenti). Ho anche studiato l'approccio del modello Markov nascosto, che sembra essere inapplicabile perché è disponibile un solo output, anziché un output per input. Cosa mi sono perso?


Hai modo di misurare la distanza tra una coppia di sequenze? È nota la lunghezza minima e / o massima della sequenza?
Craig Wright,

@CraigWright Non esiste una misura di distanza applicabile che mi venga in mente. Si può ipotizzare una lunghezza massima dell'ordine di 12 e un minimo di circa 4. Inoltre, ci sono circa 30 valori distinti (non sono naturali illimitati; solo una serie abbastanza piccola di possibilità)
Roman Starkov

Quali sono le variabili a risposta multipla che menzioni? Stavo leggendo il tuo problema in quanto si tratta di un output binario e forse potresti semplicemente creare variabili fittizie Var1.1, Var1.12, ..., Var12.12
B_Miner

@B_Miner Potrei fraintendere come funziona l'HMM, ma sembra che funzioni come segue: gli do da mangiare la mia sequenza di input (abcde) e produce una sequenza nascosta che corrisponde meglio a quella, cioè (a 'b' c 'd' e ' ). Non penso che le variabili fittizie possano risolvere questo; Ho bisogno di una classificazione vero / falso per l'intera sequenza.
Roman Starkov,

@romkyns, non è proprio così che funziona un HMM. Un HMM è un processo probabilistico. Data una sequenza ed un HMM M , è possibile calcolare la probabilità che M output sarebbe s (usando la programmazione dinamica, l'algoritmo in avanti). Inoltre, data una serie di sequenze di allenamento, puoi trovare l'HMM M che ha la massima probabilità di produrre quelle sequenze di allenamento (usando l'algoritmo Baum-Welch). Quindi gli HMM potrebbero essere qualcosa da provare qui. Tuttavia, ci saranno alcuni dettagli da compilare. sMMsM
DW

Risposte:


9

Potresti provare approcci probabilistici simili all'ingenuo classificatore di Bayes ma con ipotesi più deboli. Ad esempio, invece di fare la forte ipotesi di indipendenza, fai una supposizione di Markov:

p(X|c)=p(X0|c)Πtp(Xt|Xt-1,c)

è l'etichetta della classe, x è la sequenza. È necessario stimare due distribuzioni condizionali, una per c = 1 e una per c = 0 .cxc=1c=0

Secondo la regola di Bayes:

p(c=1x)=p(xc=1)p(c=1)p(xc=1)p(c=1)+p(xc=0)p(c=0).

Quali distribuzioni scegliere per dipende da quali altre ipotesi è possibile effettuare sulle sequenze e sulla quantità di dati disponibili.p(xtxt1,c)

Ad esempio, puoi usare:

p(xtxt1,c)=π(xt,xt1,c)iπ(xi,xt1,c)

Con distribuzioni come questa, se ci sono 21 numeri diversi che si verificano nelle tue sequenze, dovresti stimare parametri π ( x t , x t , c ) più 21 2 = 42 parametri per p ( x 0c ) più 2 parametri per p ( c ) .21212=882π(xt,xt,c)212=42p(x0c)2p(c)

Se i presupposti del modello non vengono rispettati, può essere utile ottimizzare i parametri direttamente rispetto alle prestazioni della classificazione, ad esempio riducendo al minimo la perdita media di log

1#D(x,c)Dlogp(cx)

usando la discesa gradiente.


(+1) Mi piace questo. Tuttavia, per ottenere stime affidabili per tutti potrebbero essere necessarie enormi quantità di datip(xt|xt1,c)
steffen,

Se puoi fare più ipotesi sulle distribuzioni coinvolte, potresti cavartela con molti meno parametri. Se, ad esempio, sapessi che era binomiale ed E [ x tx t - 1 , c ] = x t - 1 , dovresti stimare solo due parametri, uno per ogni valore di c . Ovviamente, se non puoi fare ipotesi e non hai abbastanza dati, non puoi fare molto. Non c'è pranzo libero.p(xtxt1,c)E[xtxt1,c]=xt1c
Lucas,

6

Suggerirei di definire alcune funzionalità e quindi scegliere un algoritmo di apprendimento automatico da applicare a tali funzionalità.

Funzionalità: in sostanza, ogni funzionalità dovrebbe essere qualcosa che può essere calcolata da una particolare sequenza e che ritieni possa essere pertinente al fatto che la sequenza abbia o meno la proprietà. Sulla base della tua descrizione, potresti prendere in considerazione funzioni come le seguenti:

  • ii(7 5 21 3 3)

  • (7 5 21 3 3)7 55 2121 33 3302302

  • "Borsa di trigrammi." Potresti anche considerare i trigrammi, che è una sottosequenza di tre numeri consecutivi dalla sequenza originale. Puoi fare come sopra.

d=30+302+303d

ii

d


Il primo tentativo che ho effettivamente implementato è stato un "sacco di trigrammi" con ingenua classificazione bayesiana. I risultati sono incoraggianti ma non eccezionali. Pensavo che ciò potesse essere correlato al fatto che i trigrammi non sono affatto indipendenti: se ho "1 2 3", è molto probabile che abbia anche un trigramma "2 3 *". Forse dovrei sperimentare un po 'di più le esatte caratteristiche.
Roman Starkov,

Sperimentare di più, sia con diversi set di funzionalità che con diversi algoritmi di apprendimento, è una buona idea. Inoltre, in base alla descrizione del problema, potresti voler aggiungere funzionalità per l'aspetto di ogni singolo numero (sacco di parole, non solo sacco di trigrammi): se usi solo trigrammi, stai rendendo più difficile l'apprendimento dell'algoritmo di apprendimento automatico fatti come "le sequenze che contengono 11 quasi certamente non hanno la proprietà".
DW

2

Quello che stai effettivamente facendo è il test delle ipotesi su serie temporali. Gli HMM funzionerebbero per te, anche se dovresti adattarli al tuo caso particolare.

Onestamente, se non riesci a scrivere una sorta di descrizione matematica di ciò che stai cercando di rilevare, non andrai molto lontano. Forse puoi dirci che tipo di funzionalità ti aspetti di vedere?


1
L'apprendimento automatico ci ha mostrato che possiamo andare molto lontano senza avere idea di cosa cercare.
Bayerj

1

Data una lunghezza massima di 12 sulla sequenza, una rete neurale con 12 ingressi e un'uscita potrebbe funzionare, ma dovresti riempire la fine di ogni sequenza con zero o un valore inerte.


1

Hai provato a utilizzare le reti bayesiane? Questa è la prima cosa a cui penso quando ho bisogno di fondere più dati (che arrivano uno alla volta) per arrivare alle probabilità di una variabile casuale.

Le reti bayesiane non si basano sul presupposto di indipendenza che l'ingenua Bayes fa.

A proposito, i modelli nascosti di Markov sono un caso speciale di reti bayesiane.

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.