J'ai une requête complexe utilisée pour rechercher un ensemble de données pour trouver . Chaque requête prend un temps moyen donc le temps global dans la recherche linéaire est. Je peux décomposer une requête en sous-requêtes plus simples q_i et trouver H_ \ text {approx} = \ {s \ in S \ mid \ forall q_j (s) \ text {is True} \} et où H_ \ text {exact } \ subseteq H_ \ text {environ} . Chaque sous-requête q_i est beaucoup plus rapide à calculer, donc dans l'ensemble, il est plus rapide de trouver H_ \ text {approx} puis d'utiliser Q pour trouver H_ \ text {exact} .S H exact = { s ∈ S ∣ où Q ( s ) est Vrai } t t ⋅ | S | H environ = { s ∈ S ∣ ∀ q j ( s ) est Vrai } H exact ⊆ H environ q i H environ Q H exact
Chaque a plusieurs . Le chevauchement entre différents est élevé. Je cherche un moyen de déterminer un ensemble de questions fixes de type arbre de décision qui minimise le temps moyen pour trouver un H_exact, sur la base d'un large échantillon de requêtes de recherche.
Pour rendre cela plus concret, supposons que l'ensemble de données contienne les 7 milliards de personnes dans le monde, et les requêtes complexes sont des choses comme "la femme qui vit dans la maison rouge au coin du 5e et Lexington dans une ville commençant par B."
La solution évidente est de vérifier chaque personne dans le monde et de voir qui correspond à la requête. Il peut y avoir plusieurs personnes. Cette méthode prend beaucoup de temps.
Je pourrais pré-calculer cette requête exactement, auquel cas ce serait très rapide .. mais uniquement pour cette question. Cependant, je sais que d'autres questions concernent la femme qui vit sur la maison bleue dans le même coin, l'homme qui vit dans le même coin, la même question mais dans une ville commençant par C, ou quelque chose de totalement différent, comme `` le roi de Suède. »
Au lieu de cela, je peux décomposer la question complexe en un ensemble d'ensembles plus faciles mais plus généraux. Par exemple, toutes les questions ci-dessus ont une requête basée sur le rôle du genre, donc je peux précalculer l'ensemble de toutes les personnes dans le monde qui se considèrent comme une «femme». Cette sous-requête ne prend essentiellement pas de temps, donc le temps de recherche global diminue d'environ 1/2. (En supposant que par d'autres connaissances, nous savons qu'un «roi» suédois ne peut pas être une «femme». Hatchepsout était une femme égyptienne qui était roi.)
Cependant, il y a parfois des requêtes qui ne sont pas basées sur le sexe, comme "la personne qui vit sur la 8ème rue dans une maison rouge dans une ville commençant par A." Je peux voir que la sous-requête "vit dans une maison rouge" est courante et pré-calculer une liste de toutes les personnes qui vivent dans une maison rouge.
Cela me donne un arbre de décision. Dans le cas habituel, chaque branche de l'arbre de décision contient des questions différentes, et les méthodes pour sélectionner les termes optimaux pour l'arbre de décision sont bien connues. Cependant, je m'appuie sur un système existant qui exige que toutes les succursales doivent poser les mêmes questions.
Voici un exemple de décision finale possible: la question 1 est «la personne est-elle une femme?», La question 2 est «la personne vit-elle dans une maison rouge?», La question 3 est «la personne vit-elle dans une ville commençant par A ou la personne vit-elle dans une ville commençant par B? », Et la question 4 est« la personne vit-elle dans une rue numérotée? ».
Lorsqu'une requête entre, je vois si son correspond à l'une des questions pré-calculées que j'ai déterminées. Si oui, alors j'obtiens l'intersection de ces réponses et pose la question sur ce sous-ensemble d'intersection. Par exemple, si la question est "les gens qui vivent dans une maison rouge sur une île", alors constatez que "la personne vit dans une maison rouge" est déjà précalculée, il suffit donc de trouver le sous-ensemble de ceux qui vivent également sur une île.q i q j Q
Je peux obtenir un modèle de coût en regardant un ensemble de nombreux et vérifier la taille du . Je souhaite minimiser la taille moyenne de .
La question est, comment puis-je optimiser la sélection de possibles pour faire cet arbre de décision fixe? J'ai essayé un GA mais il a été lent à converger. Probablement parce que mon espace de fonctionnalités a quelques millions de possibles . J'ai trouvé une méthode gourmande, mais je ne suis pas satisfait du résultat. C'est aussi très lent, et je pense que j'optimise la mauvaise chose.q j
Quelles recherches existantes dois-je rechercher pour des idées?