Dada uma sequência de entradas, preciso determinar se essa sequência tem uma certa propriedade desejada. A propriedade só pode ser verdadeira ou falsa, ou seja, existem apenas duas classes possíveis às quais uma sequência pode pertencer.
A relação exata entre a sequência e a propriedade não é clara, mas acredito que é muito consistente e deve se prestar à classificação estatística. Eu tenho um grande número de casos para treinar o classificador, embora possa ser um pouco barulhento, no sentido de que há uma pequena probabilidade de que uma sequência seja atribuída à classe errada neste conjunto de treinamento.
Dados de treinamento de exemplo:
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
...
Em termos gerais, a propriedade é determinada pelo conjunto de valores na sequência (por exemplo, a presença de um "11" significa que a propriedade quase certamente será falsa), bem como a ordem dos valores (por exemplo "21 7 5 "aumenta significativamente a chance de a propriedade ser verdadeira).
Após o treinamento, devo ser capaz de fornecer ao classificador uma sequência nunca vista anteriormente, como (1 21 7 5 3)
, e deve gerar sua confiança de que a propriedade é verdadeira. Existe um algoritmo conhecido para treinar um classificador com esse tipo de entradas / saídas?
Eu considerei o classificador bayesiano ingênuo (que não é realmente adaptável ao fato de que a ordem é importante, pelo menos não sem quebrar severamente a suposição de que as entradas são independentes). Também investiguei a abordagem oculta do modelo de Markov, que parece inaplicável porque apenas uma única saída está disponível, em vez de uma saída por entrada. Do que eu senti falta?
fonte
Respostas:
Você pode tentar abordagens probabilísticas semelhantes ao classificador ingênuo de Bayes, mas com suposições mais fracas. Por exemplo, em vez de fazer uma forte suposição de independência, faça uma suposição de Markov:
x c = 1 c = 0c é o rótulo da sua classe, é a sua sequência. Você precisa estimar duas distribuições condicionais, uma para e outra para .x c=1 c=0
Pela regra de Bayes:
Quais distribuições escolher para dependem de quais outras suposições você pode fazer sobre as seqüências e a quantidade de dados disponíveis.p(xt∣xt−1,c)
Por exemplo, você pode usar:
Com distribuições como essa, se houver 21 números diferentes ocorrendo em suas seqüências, você teria que estimar parâmetros mais parâmetros para mais parâmetros para .π ( x t , x t , c )21⋅21⋅2=882 π(xt,xt,c) p ( x 0 ∣ c ) 2 p ( c )21⋅2=42 p(x0∣c) 2 p(c)
Se as suposições do seu modelo não forem atendidas, pode ajudar a ajustar os parâmetros diretamente em relação ao desempenho da classificação, por exemplo, minimizando a perda média de log
usando gradiente-descida.
fonte
Sugiro que você defina alguns recursos e escolha um algoritmo de aprendizado de máquina para aplicar a esses recursos.
Recursos: Basicamente, cada recurso deve ser algo que possa ser calculado a partir de uma sequência específica e que você julgue relevante se a sequência tem a propriedade ou não. Com base na sua descrição, você pode considerar recursos como os seguintes:
"Bolsa de números". Você pode contar quantas vezes cada número possível aparece na sequência. Por exemplo, suponha que cada sequência seja composta apenas dos números de 1 a 30. Então você pode gerar 30 recursos; o ésimo recurso conta quantas vezes o número aparece na sequência. Por exemplo, a sequência gera o vetor de característica (0,0,2,0,1,0,1,0, ..., 0,1,0, ..., 0).i i
(7 5 21 3 3)
"Saco de digramas." Um digram é um par de números consecutivos. Dada uma sequência, você pode extrair todos os seus digramas. Depois, você pode contar quantas vezes cada digrama possível aparece. Por exemplo, a sequência302 302
(7 5 21 3 3)
tem o seguinte como seus digrams:7 5
,5 21
,21 3
, e3 3
. Supondo que a sequência seja composta dos números de 1 a 30, existem digramas possíveis, portanto, você obtém recursos. Dada uma sequência, você pode gerar esse vetor de recurso."Saco de trigramas." Você também pode considerar trigramas, que são uma subsequência de três números consecutivos da sequência original. Você pode fazer o mesmo que acima.
Se você usar os recursos acima, poderá extrair de cada sequência. Em outras palavras, para cada sequência, você associa um vetor de recurso dimensional, que é a coleção de recursos. Depois de ter isso, você pode jogar fora as seqüências originais. Por exemplo, seu conjunto de treinamento se torna um conjunto de pares de entrada / saída, em que a entrada é o vetor de recurso (correspondente a alguma sequência do seu conjunto de treinamento) e a saída é um booleano (indicando se essa sequência tinha a propriedade ou não) .d=30+302+303 d
Outra variação da idéia acima é usar "conjunto de X" em vez de "saco de X". Por exemplo, em vez de contar quantas vezes cada número aparece, você poderia simplesmente gerar um booleano que indica se o número apareceu pelo menos uma vez ou não. Isso pode ou não dar melhores resultados. Em geral, você pode experimentar o conjunto de recursos que usa, para descobrir quais fornecem os melhores resultados (por exemplo, talvez você largue o "saco de trigramas"; ou talvez você possa ter outras idéias para tentar) .i i
Algoritmo de aprendizado de máquina: não estou qualificado para fornecer conselhos sobre como selecionar um algoritmo de aprendizado de máquina; existem muitas possibilidades. Mas, em geral, você aplicará o algoritmo de aprendizado ao seu conjunto de treinamento (os pares de recursos / booleanos de entrada / saída) e tentará usá-lo para prever quais dos valores no conjunto de testes têm a propriedade. Sua seleção do algoritmo de aprendizado de máquina pode depender de vários fatores, incluindo como o tamanho do conjunto de treinamento se compara em relação a (o número de recursos). Sua melhor aposta pode ser tentar vários algoritmos de aprendizado de máquina e ver qual funciona melhor. Convém incluir SVMs (Support Vector Machines) como um dos algoritmos que você tenta.d
fonte
O que você está efetivamente fazendo é testar hipóteses em séries temporais. Os HMMs funcionariam para você, embora você tivesse que adaptá-los ao seu caso particular.
Honestamente, se você não pode escrever algum tipo de descrição matemática do que está tentando detectar, não vai muito longe. Talvez você possa nos contar sobre que tipo de recurso você espera ver?
fonte
Dado um comprimento máximo de 12 na sequência, uma rede neural com 12 entradas e uma saída pode funcionar, mas você teria que preencher o final de cada sequência com zeros ou algum valor inerte.
fonte
Você já tentou usar redes bayesianas? Essa é a primeira coisa em que penso quando preciso mesclar vários dados (chegando um de cada vez) para chegar às probabilidades de uma variável aleatória.
As redes bayesianas não confiam na suposição de independência que Bayes ingênuo faz.
Aliás, os modelos Markov ocultos são um caso especial das redes bayesianas.
fonte