Seleção de recurso do tipo árvore de decisão de tamanho fixo para minimizar o desempenho médio da pesquisa


9

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 exactaH aprox q i H aprox Q H exactaQSHexato={sSOnde Q(s) é verdade}tt|S|HAproximadamente={sSqj(s)é verdade}HexatoHAproximadamenteqEuHAproximadamenteQHexato

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 jQqEuQqj

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 QQqEuqjQ

Posso obter um modelo de custo olhando para um conjunto de muitos e verificando o tamanho do . Quero minimizar o tamanho médio de .QHAproximadamenteHAproximadamente

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.qjqj

Que pesquisa existente devo procurar idéias?


Seus dados estão corrigidos - você adicionará mais exemplos? Caso contrário, é melhor tentar criar uma árvore de descisão iniciando com a subconsulta com maior entropia de informações . Você também pode escolher uma entropia mínima para parar as descisões baseadas em árvore e pesquisar com o tempo | S | .t quando S for pequeno o suficiente.
Anton

Respostas:


1

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=-euog2(fEu)fEu0 0<DD=(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.Mceuoge2sEu

A solução hierárquica de Feldman e Hodes substitui sEu=-euog2(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=-euog2(fEu/gEu)gEu

Ainda há um problema de como apresentar os descritores corretos, mas isso será específico do domínio.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.