Agrégeant vecteurs caractéristiques générés automatiquement
-
21-09-2019 - |
Question
J'ai un système de classification, que je dois malheureusement être vague sur pour des raisons de travail. Disons que nous avons 5 caractéristiques à prendre en compte, il est essentiellement un ensemble de règles:
A B C D E Result
1 2 b 5 3 X
1 2 c 5 4 X
1 2 e 5 2 X
Nous prenons un sujet et ses valeurs par A-E, essayez les règles correspondant en séquence. Si l'on correspond à notre retour le premier résultat.
C est une valeur discrète, qui pourrait être l'un quelconque de a-e. Le reste ne sont que des entiers.
Le ruleset a été généré automatiquement à partir de notre ancien système et a un très grand nombre de règles (~ 25 millions). Les anciennes règles étaient si des déclarations, par exemple.
result("X") if $A >= 1 && $A <= 10 && $C eq 'A';
Comme vous pouvez le voir, les anciennes règles n'utilisent souvent même pas certaines fonctionnalités, ou acceptent des plages. Certains sont plus ennuyeux:
result("Y") if ($A == 1 && $B == 2) || ($A == 2 && $B == 4);
Le ruleset doit être beaucoup plus petite car il doit être maintenu humain, donc j'aimerais réduire les ensembles de règles de sorte que le premier exemple deviendrait:
A B C D E Result
1 2 bce 5 2-4 X
Le résultat est que l'on peut diviser l'ensemble de règles de la colonne Résultat et rétrécir chacun indépendamment. Cependant, je ne peux pas penser à un moyen facile d'identifier et de rétrécir la base de règles. J'ai essayé algorithmes de regroupement mais parce que certains étouffer des données est discrète, et de le traiter comme continu est imparfait. Un autre exemple:
A B C Result
1 2 a X
1 2 b X
(repeat a few hundred times)
2 4 a X
2 4 b X
(ditto)
Dans un monde idéal, ce serait deux règles:
A B C Result
1 2 * X
2 4 * X
C'est: l'algorithme serait non seulement d'identifier la relation entre A et B, mais serait également en déduire que C est le bruit (pas important pour la règle)
Est-ce que quelqu'un a une idée de la façon d'aller sur ce problème? Toute langue ou d'une bibliothèque est un jeu équitable, comme je l'attends que ce soit un processus essentiellement unique. Merci à l'avance.
La solution
Autres conseils
Vingt-cinq millions de règles? Combien de fonctionnalités? Combien de valeurs par fonction? Est-il possible de parcourir toutes les combinaisons dans le temps pratique? Si vous le pouvez, vous pouvez commencer par séparer les règles en groupes par la suite.
Ensuite, pour chaque résultat, procédez comme suit. Considérant chaque fonction comme une dimension, et les valeurs autorisées pour une caractéristique que la métrique le long de cette dimension, la construction d'un énorme Karnaugh représentant l'ensemble de règles.
La carte a deux utilisations. Une: recherche méthodes automatisées pour l'algorithme Quine-McCluskey. Beaucoup de travail a été fait dans ce domaine. Il y a même quelques programmes disponibles, bien que probablement aucun d'entre eux traitera une carte Karnaugh de la taille que vous allez faire.
Deux: lorsque vous avez créé votre jeu de règles réduit finale, itérer sur toutes les combinaisons de toutes les valeurs pour toutes les fonctions à nouveau, et de construire une autre carte Karnaugh en utilisant l'ensemble de règles réduit. Si les cartes correspondent, vos ensembles de règles sont équivalentes.
-Al.