2015-03-16 1 views
2

J'utilise l'algorithme PART dans R (via le paquetage RWeka) pour la classification multi-classes. L'attribut cible est un intervalle de temps dans lequel une facture sera payée par le client (comme 7-15 jours, 15-30 jours, etc.). J'utilise le code suivant pour le montage et la prévision du modèle:Arbre de classification basé sur une règle d'élagage (algorithme PART)

fit <- PART(DELAY_CLASS ~ AMT_TO_PAY + NUMBER_OF_CREDIT_DAYS + AVG_BASE_PRICE, data= trainingData) 
predictedTrainingValues <- predict(fit, trainingData)  

En utilisant ce modèle, je reçois environ une précision de 82% sur les données de formation. Mais la précision sur les données de test est d'environ 59%. Je comprends que j'ajuste le modèle. J'ai essayé de réduire le nombre de variables prédictives (variables prédictives dans le code ci-dessus sont des variables réduites), mais cela n'aide pas beaucoup.Réduire le nombre de variables améliore la précision sur les données de test à environ 61% et réduit la précision 79%.

Étant donné que l'algorithme PART est basé sur un arbre de décision partiel, une autre option peut être d'élaguer l'arbre. Mais je ne suis pas au courant de la façon d'élaguer l'arbre pour l'algorithme PART. Sur la recherche sur Internet, j'ai trouvé que les critères FOIL peuvent être utilisés pour élaguer l'algorithme basé sur les règles. Mais je ne suis pas capable de trouver l'implémentation du critère FOIL dans R ou RWeka.

Ma question est la suivante: comment tailler l'arbre pour l'algorithme PART, ou toute autre suggestion pour améliorer la précision des données de test?

Merci à l'avance !! REMARQUE: Je calcule la précision en multipliant le nombre d'instances correctement classées par le nombre total d'instances.

Répondre

1

Pour élaguer l'arbre avec la pièce que vous devez le préciser dans l'argument de contrôle de la fonction:

Il y a une liste complète des commandes que vous pouvez passer dans l'argument de contrôle here

I citer quelques-unes des options ici qui sont pertinentes à la taille:

les options valides sont:

confiance à C

Définir le seuil de confiance pour l'élagage. (Par défaut: 0,25)

M Numéro

Définir le nombre minimal d'instances par feuille. (Valeur par défaut: 2)

-R

Utiliser la taille d'erreur réduite.

-N Numéro

certain nombre de plis pour la taille d'erreur réduite. Un pli est utilisé comme ensemble d'élagage. (Par défaut: 3)

On dirait que l'argument C ci-dessus peut vous être utile et peut-être R et N et M.

Pour utiliser ceux de la fonction accomplissez:

fit <- PART(DELAY_CLASS ~ AMT_TO_PAY + NUMBER_OF_CREDIT_DAYS + AVG_BASE_PRICE, 
     data= trainingData, 
     control = Weka_control(R = TRUE, N = 5, M = 100)) #random choices 

Sur une note séparée pour la précision métrique:

En comparant la précision entre l'ensemble de la formation et le test défini pour déterminer plus -fitting n'est pas optimal à mon avis. Le modèle a été entraîné sur l'ensemble d'entraînement et vous vous attendez donc à ce qu'il fonctionne mieux que l'ensemble de test. Un meilleur test est validation croisée. Essayez d'effectuer d'abord une validation croisée 10 fois (vous pouvez utiliser la fonction train de Caret), puis comparez la précision moyenne de la validation croisée à la précision de votre ensemble de tests. Je pense que cela ira mieux. Si vous ne savez pas ce qu'est la validation croisée, en général, elle divise votre ensemble d'entraînement en ensembles d'entraînement et de tests plus petits et s'entraîne sur la formation et les tests sur l'ensemble de test. Peut en lire plus à ce sujet here.

+0

Merci pour la réponse! C'est le facteur de confiance C qui détermine le niveau d'élagage. Plus le facteur de confiance est faible, plus l'élagage sera effectué par algorithme. Je n'ai pas utilisé la validation croisée plus tôt. Mais va essayer. Merci pour suggestion! – user3697157

+0

Super :). Content que je puisse être utile! – LyzandeR