Algorithme de génération de règles de classification

11

Nous avons donc un potentiel pour une application d'apprentissage automatique qui s'intègre assez bien dans le domaine de problème traditionnel résolu par les classificateurs, c'est-à-dire que nous avons un ensemble d'attributs décrivant un élément et un "compartiment" dans lequel ils se retrouvent. Cependant, plutôt que de créer des modèles de probabilités comme dans Naive Bayes ou des classificateurs similaires, nous voulons que notre sortie soit un ensemble de règles à peu près lisibles par l'homme qui peuvent être revues et modifiées par un utilisateur final.

L'apprentissage des règles d'association ressemble à la famille d'algorithmes qui résout ce type de problème, mais ces algorithmes semblent se concentrer sur l'identification de combinaisons communes de fonctionnalités et n'incluent pas le concept d'un dernier compartiment vers lequel ces fonctionnalités pourraient pointer. Par exemple, notre ensemble de données ressemble à ceci:

Item A { 4-door, small, steel } => { sedan }
Item B { 2-door, big,   steel } => { truck }
Item C { 2-door, small, steel } => { coupe }

Je veux juste les règles qui disent "si c'est grand et un 2 portes, c'est un camion", pas les règles qui disent "si c'est un 4 portes c'est aussi petit".

Une solution de contournement à laquelle je peux penser consiste à simplement utiliser des algorithmes d'apprentissage des règles d'association et à ignorer les règles qui n'impliquent pas de compartiment final, mais cela semble un peu hacky. Ai-je raté une famille d'algorithmes? Ou peut-être que j'aborde le problème de manière incorrecte pour commencer?

super_seabass
la source

Réponses:

9

Le C45 fabriqué par Quinlan est capable de produire une règle de prédiction. Consultez cette page Wikipedia . Je sais qu'à Weka son nom est J48. Je n'ai aucune idée des implémentations en R ou Python. Quoi qu'il en soit, à partir de ce type d'arbre de décision, vous devriez pouvoir déduire des règles de prédiction.

Modification ultérieure

Vous pourriez également être intéressé par les algorithmes permettant de déduire directement les règles de classification. RIPPER en est un, qui à nouveau à Weka a reçu un nom différent JRip. Voir le document original pour RIPPER: Induction de règle efficace rapide, WW Cohen 1995

rapaio
la source
J'avais expérimenté avec C45 / J48 dans un projet précédent. Je ne savais pas qu'il y avait des règles que je pouvais en retirer. Je vais également consulter RIPPER. Merci!
super_seabass
Consultez également le package C50 dans R.
nfmcclure
Je voulais fournir une mise à jour pour cette question / réponse: nous utilisons JRip avec un certain succès, mais notre nouveau concurrent principal est FURIA ( cs.uni-paderborn.de/fileadmin/Informatik/eim-i-is/PDFs/… ). Il génère les meilleures règles de révision / utilisation humaine car il essaie de générer un ensemble de règles exhaustif. JRip fait de belles règles, mais il a une règle "par défaut" pour la classification quand aucune autre règle ne s'applique. Les compartiments par défaut ne fonctionnent pas bien dans le contexte commercial de notre projet, nous avons besoin de règles exhaustives.
super_seabass
7

C'est en fait encore plus simple que cela, d'après ce que vous décrivez --- vous recherchez juste un algorithme d'arbre de classification de base (donc pas besoin de variantes légèrement plus complexes comme C4.5 qui sont optimisées pour la précision des prédictions). Le texte canonique est:

http://www.amazon.com/Classification-Regression-Wadsworth-Statistics-Probability/dp/0412048418

Ceci est facilement implémenté dans R:

http://cran.r-project.org/web/packages/tree/tree.pdf

et Python:

http://scikit-learn.org/stable/modules/tree.html

Therriault
la source
Je ne suis pas d'accord pour dire que les arbres sont utiles ici. C'est une question de règles de filtrage, et cela peut être réalisé avec le paquet d' arules dans R.
adesantos
1

Vous devriez essayer le package d' arules dans R. Il vous permet de créer non seulement les règles d'association mais également de spécifier la longueur de chaque règle, l'importance de chaque règle et vous pouvez également les filtrer, ce que vous recherchez (essayez le commande rhs () de ce paquet).

adesantos
la source