Ao trabalhar na análise exploratória de dados e no desenvolvimento de algoritmos, percebo que a maior parte do meu tempo é gasta em um ciclo de visualização, gravação de código, execução em pequenos conjuntos de dados e repetição. Os dados que eu tenho tendem a ser do tipo visão por computador / fusão de sensores, e os algoritmos têm muita visão (por exemplo, detecção e rastreamento de objetos etc.), e os algoritmos disponíveis no mercado não funcionam nesse contexto. Acho que são necessárias muitas iterações (por exemplo, para discar o tipo de algoritmo ou ajustar os parâmetros no algoritmo, ou para obter uma visualização correta) e também os tempos de execução, mesmo em um pequeno conjunto de dados, são bastante longos, portanto todos juntos leva um tempo.
Como o próprio desenvolvimento do algoritmo pode ser acelerado e tornado mais escalável?
Alguns desafios específicos:
Como o número de iterações pode ser reduzido? (Especialmente quando que tipo de algoritmo, sem falar nas especificidades dele, não parece ser facilmente previsível sem tentar versões diferentes e examinar seu comportamento)
Como executar em conjuntos de dados maiores durante o desenvolvimento? (Frequentemente, passar de um conjunto de dados pequeno para um grande é quando ocorre um monte de novos comportamentos e novos problemas)
Como os parâmetros do algoritmo podem ser ajustados mais rapidamente?
Como aplicar ferramentas do tipo aprendizado de máquina ao próprio desenvolvimento de algoritmos? (Por exemplo, em vez de escrever o algoritmo manualmente, escreva alguns blocos de construção simples e combine-os da maneira que aprendeu com o problema, etc.)
Primeiramente, se seus dados tiverem tantas variações (em função do tempo, contexto e outras) que dificultem a aplicação de uma única estratégia para lidar com eles, você pode estar interessado em fazer uma análise temporal / contextual prévia. caracterização do conjunto de dados. Caracterizar dados, isto é, extrair informações sobre como o volume ou as especificidades do conteúdo varia de acordo com alguns critérios, geralmente fornece uma melhor compreensão (mais concisa e precisa) do que simplesmente inferir algoritmos de maneira bruta.
Então, respondendo a cada pergunta:
a caracterização é definitivamente um meio de reduzir o número de iterações ao tentar selecionar algoritmos adequados para dados específicos;
se você possui um conjunto discreto de critérios nos quais seus dados variam, fica muito mais fácil ampliar as soluções, pois você saberá quais informações você obteria / perderia se fossem aplicadas soluções mais simples / específicas;
depois de uma caracterização, você também deve ser mais fácil selecionar parâmetros, pois saberia com que tipo de dados específicos estaria lidando;
finalmente, você pode usar algoritmos de mineração de dados / aprendizado de máquina para dar suporte a essa caracterização. Isso inclui o uso de:
algoritmos de agrupamento, para reduzir a dimensionalidade dos dados;
algoritmos de classificação, para ajudar a decidir sobre propriedades específicas os dados em função do tempo / contexto / ... podem apresentar;
regras de associação, para prever conhecimentos específicos do conjunto de dados, além de aprimorar / refinar os dados usados ​​para análises posteriores;
e outras estratégias e análises possíveis.
E aqui está uma lista de alguns critérios nos quais analisar dados, que você pode achar útil.
Duas coisas que você pode achar úteis:
meta-aprendizado para acelerar a busca pelo modelo certo e pelos parâmetros ideais. O meta-aprendizado consiste em aplicar ferramentas de aprendizado de máquina ao problema de encontrar a ferramenta / parâmetros de aprendizado de máquina corretos para o problema em questão. Por exemplo, este artigo é um exemplo prático;
gpucomputing para acelerar o algoritmo em conjuntos de dados maiores. Por exemplo, o OpenCV pode usar GPUs , que são muito eficazes no processamento de imagens / vídeos e podem levar de 10 a 100 acelerações em relação às CPUs. Como seu computador provavelmente possui uma GPU com capacidade para gpucomputing, você pode ganhar muito tempo usando-o.
Supondo que é provável que você tenha visto esta demonstração do YouTube e o Google Tech Talk relacionado, relacionado a estes documentos:
PN Learning: Inicializando Classificadores Binários por Restrições Estruturais
Rastreamento-Aprendizagem-Detecção
E esse conjunto de códigos no GitHub para OpenTLD . Se você marcar o "leia-me" no GitHub aqui, notará que o e-mail do autor (Zdenek Kalal) está listado; portanto, pode valer a pena enviar um e-mail sobre suas perguntas ou até convidá-lo para responder a essa pergunta também.