Solucionadores de HMM genéricos em bioinformática?
Modelos ocultos de Markov (HMMs) são usados ​​extensivamente em bioinformática e foram adaptados para previsão de genes, classificação de famílias de proteínas e uma variedade de outros problemas. Na verdade, o tratado de Durbin, Eddy e colegas é um dos volumes definidores neste campo.
Embora os detalhes de cada uma dessas diferentes aplicações de HMMs sejam diferentes, o núcleo matemático o modelo permanece inalterado e existem algoritmos eficientes para calcular a probabilidade da sequência observada dado o modelo, ou (talvez mais útil) a sequência oculta mais provável dada a sequência de estados observados.
Assim, parece plausível que poderia haver uma biblioteca de software genérica para resolver HMMs. Até onde sei, esse não é o caso, e a maioria dos bioinformáticos acaba escrevendo HMMs do zero. Talvez haja uma boa razão para isso? (Além do fato óbvio de que já é difícil, quase impossível, conseguir financiamento para construir e fornecer suporte de longo prazo para software de ciência de código aberto. As pressões acadêmicas incentivam a construção de uma nova ferramenta sobre a qual você pode publicar um artigo muito mais do que construir e estendendo as ferramentas existentes.)
Existe alguma biblioteca genérica do solver HMM? Em caso afirmativo, isso seria tentador o suficiente para os bioinformáticos usarem em vez de escrever seus próprios do zero?
Você faz parecer que "escrever HMMs do zero" é um grande esforço. ;-) Dito isso, é claro que faz sentido ter implementações existentes dos algoritmos relevantes.
Eu também recomendaria dar uma olhada em romã, um bom pacote Python para modelos gráficos probabilísticos. Inclui solucionadores de HMMs e muito mais. Por baixo do capô, ele usa código Cythonised, então também é bastante rápido.
Certamente, existem bibliotecas de software para trabalhar com HMMs. Para uma implementação de propósito geral em C ++, dê uma olhada nos algoritmos SeqAn HMM.
Para seus propósitos, ou seja, "computar… a sequência oculta mais provável dada a sequência observada declara ", você invocaria viterbiAlgorithm com sua sequência observada e o gráfico HMM.
Mais fundamentalmente, acho que a maioria das implementações maduras existentes são provavelmente encontradas no domínio do processamento de sinal , que os usa há mais tempo do que a biologia e onde a maior parte da teoria subjacente foi desenvolvida.
Se bem me lembro, o Dynamite de Ewan Birney (um compilador-compilador) apresentado no ISMB 1997 tinha essa funcionalidade, também há algum código aqui no GitHub https://github.com/birney/wise3 que pelo menos menciona Dynamite. Suspeito que Ewan está muito ocupado ultimamente para trabalhar nisso, embora ele tenha tweetado sobre soprar poeira de seu antigo Dynamite, desculpe o código do Dynamite: https://twitter.com/ewanbirney/status/788121636973142016