Eu tenho uma consulta complexa usada para pesquisar um conjunto de dados para encontrar . Cada consulta leva em média o tempo portanto o tempo total na pesquisa linear é. Posso dividir uma consulta em subconsultas mais simples q_i e encontrar e onde . Cada subconsulta é muito mais rápida de calcular, portanto, no geral, é mais rápido encontrar e depois usar para encontrar .S H exato = { s ∈ S ∣ onde Q ( s ) é Verdadeiro } t t ⋅ | S | H aprox = { s ∈ S | ∀ q j ( s ) é verdadeira } H exacta ⊆ H aprox q i H aprox Q H exacta
Cada tem muitos . A sobreposição entre diferente é alta. Estou procurando uma maneira de determinar um conjunto de perguntas fixas em forma de árvore de decisão que minimize o tempo médio para encontrar um H_exact, com base em uma grande amostra de consultas de pesquisa.q i Q q j
Para tornar isso mais concreto, suponha que o conjunto de dados contenha os 7 bilhões de pessoas no mundo e as consultas complexas sejam coisas como "a mulher que mora na casa vermelha na esquina da 5ª e Lexington em uma cidade começando com B."
A solução óbvia é verificar todas as pessoas no mundo e ver quem corresponde à consulta. Pode haver mais de uma pessoa assim. Este método leva muito tempo.
Eu poderia pré-calcular exatamente essa consulta, caso em que seria muito rápido .. mas apenas para esta pergunta. No entanto, eu sei que outras perguntas são para a mulher que mora na casa azul na mesma esquina, o homem que mora na mesma esquina, a mesma pergunta, mas em uma cidade começando com C, ou algo totalmente diferente, como 'the rei da Suécia.
Em vez disso, posso dividir a questão complexa em um conjunto de conjuntos mais fáceis, porém mais gerais. Por exemplo, todas as perguntas acima têm uma consulta baseada em função de gênero, para que eu possa precomputar o conjunto de todas as pessoas no mundo que se consideram uma 'mulher'. Essa subconsulta não demora muito, portanto, o tempo total de pesquisa diminui em aproximadamente 1/2. (Supondo que, por outro conhecimento, sabemos que um "rei" sueco não pode ser uma "mulher". Hatshepsut era uma mulher egípcia que era rei.)
No entanto, às vezes existem consultas que não são baseadas em gênero, como "a pessoa que mora na 8th street em uma casa vermelha em uma cidade começando com A." Percebo que a subconsulta "vive em uma casa vermelha" é comum e pré-calcula uma lista de todas as pessoas que vivem em uma casa vermelha.
Isso me dá uma árvore de decisão. No caso usual, cada ramo da árvore de decisão contém perguntas diferentes, e os métodos para selecionar os termos ideais para a árvore de decisão são bem conhecidos. No entanto, estou desenvolvendo um sistema existente que exige que todas as filiais façam as mesmas perguntas.
Aqui está um exemplo de um possível conjunto de decisões finais: a pergunta 1 é 'a pessoa é uma mulher?', A pergunta 2 é 'a pessoa mora em uma casa vermelha?', A questão 3 é 'a pessoa mora em uma cidade começando com A ou a pessoa mora em uma cidade começando com B? 'E a pergunta 4 é' a pessoa mora em uma rua numerada? '.
Quando uma consulta chega, vejo se o seu corresponde a alguma das perguntas pré-calculadas que eu determinei. Nesse caso, entendo a interseção dessas respostas e faço a pergunta nesse subconjunto de interseção. Por exemplo, se a pergunta é "pessoas que vivem em uma casa vermelha em uma ilha", então descobrem que "a pessoa vive em uma casa vermelha" já está pré-computada, portanto, é apenas uma questão de encontrar o subconjunto daqueles que também moram em uma ilha.q i q j Q
Posso obter um modelo de custo olhando para um conjunto de muitos e verificando o tamanho do . Quero minimizar o tamanho médio de .
A questão é: como otimizar a seleção de possível para fazer essa árvore de decisão fixa? Eu tentei um GA, mas demorou a convergir. Provavelmente porque meu espaço de recursos tem alguns milhões possíveis . Eu criei um método ganancioso, mas não estou feliz com o resultado. Também é muito lento, e acho que estou otimizando a coisa errada.
Que pesquisa existente devo procurar idéias?
fonte
Respostas:
A solução que encontrei (fiz a pergunta) é usar codificação sobreposta e, mais especificamente, uma variante do Zatocoding que oferece melhor suporte para descritores hierárquicos.
O método que usei vem de 'Um Projeto Eficiente para Pesquisa de Estrutura Química. I. The Screens ', Alfred Feldman e Louis Hodes, J. Chem. Inf. Comput. Sci., 1975, 15 (3), pp 147-152.
A solução não hierárquica é examinar a densidade de informações. A cada descritor será atribuído bits em que é a frequência no conjunto de dados ( f_i <= 1.0). Calcule o número total de bits (o tamanho da árvore de decisão) usandosEu= - l o g2( fEu) fEu 0 < D D = ∑ ( sEufEu) / Mc que é o fator de compressão Mooers 0,69 (do ). Depois de determinar o número total de bits a ser usado, selecione bits aleatoriamente para cada descritor para atribuição de bits.Mc l o ge2 sEu
A solução hierárquica de Feldman e Hodes substituisEu= - l o g2( fEu) por descritores que são um subconjunto de outros descritores. Nesse caso, use que é a frequência do pai menos frequente. Além disso, ao executar a atribuição de bits, não selecione os bits que também são utilizados pela atribuição de bits dos pais.sEu= - l o g2( fEu/ gEu) gEu
Ainda há um problema de como apresentar os descritores corretos, mas isso será específico do domínio.
fonte