Rpart utilise-t-il des divisions multivariées par défaut?

8

Je sais que la rpartfonction de R conserve les données dont elle aurait besoin pour implémenter la division multivariée, mais je ne sais pas si elle effectue réellement des divisions multivariées. J'ai essayé de le rechercher en ligne en consultant les rpartdocuments, mais je ne vois aucune information indiquant qu'il peut le faire ou le fait. Quelqu'un est sûr?

chubbsondubs
la source
Qu'entendez-vous précisément par division multivariée? Test multivarié quel attribut doit être utilisé pour le fractionnement ou le fractionnement basé sur une fonction de quelques attributs?
Il s'agit d'un fractionnement qui utilise plusieurs variables. Géométriquement, cela signifie une scission le long d'un hyperplan, plutôt que d'un plan perpendiculaire à l'un des axes.
chubbsondubs

Réponses:

14

Rpart ne fournit que des divisions univariées. Je crois, sur la base de votre question, que vous ne connaissez pas entièrement la différence entre une méthode de partitionnement univarié et une méthode de partitionnement multivarié. J'ai fait de mon mieux pour expliquer cela ci-dessous, ainsi que pour fournir des références pour de plus amples recherches et pour suggérer quelques packages R pour implémenter ces méthodes.

Rpart est un classificateur basé sur un arbre qui utilise un partitionnement récursif. Avec les méthodes de partitionnement, vous devez définir les points dans vos données où un fractionnement doit être effectué. L'algorithme rpart dans R fait cela en trouvant la variable et le point qui divise (et donc réduit) le RSS le mieux. Étant donné que les divisions ne se produisent que le long d'une variable à la fois, il s'agit de divisions univariées. Un fractionnement multivarié est généralement défini comme une partition simultanée le long de plusieurs axes (donc multivariée), c'est-à-dire que le premier nœud fractionné peut se diviser selon l'âge> 35, le deuxième nœud peut se diviser selon le revenu> 25 000 et le troisième nœud peut se diviser le long des villes à l'ouest de le Mississippi. Les deuxième et troisième nœuds sont répartis sur des sous-ensembles plus petits des données globales.Par conséquent, dans le deuxième nœud, le critère de revenu divise le RSS uniquement pour les personnes âgées de plus de 35 ans, il ne s'applique pas aux observations non trouvées dans ce nœud, il en va de même pour le critère Villes. On pourrait continuer à faire cela jusqu'à ce qu'il y ait un nœud pour chaque observation dans votre jeu de données (rpart utilise une fonction de taille de compartiment minimale en plus d'un critère de taille de nœud minimum et d'un paramètre cp qui est le minimum que la valeur r au carré doit augmenter afin de continuer l'ajustement).

Une méthode multivariée, telle que la méthode d'induction des règles patient (le package prim dans R) se diviserait simultanément en sélectionnant, par exemple, Toutes les observations où le revenu était supérieur à 22 000, l'âge> 32 et les villes à l'ouest d'Atlanta. La raison pour laquelle l'ajustement peut être différent est que le calcul de l'ajustement est multivarié au lieu d'univarié, l'ajustement de ces trois critères est calculé sur la base de l'ajustement simultané des trois variables sur toutes les observations répondant à ce critère plutôt que sur une partition itérative basée sur divisions univariées (comme avec rpart).

Il existe différentes croyances en ce qui concerne l'efficacité des méthodes de partitionnement univarié par rapport aux méthodes multivariées. En général, ce que j'ai vu dans la pratique, c'est que la plupart des gens préfèrent le partitionnement univarié (comme rpart) à des fins explicatives (il n'est utilisé que dans la prédiction lorsqu'il s'agit d'un problème où la structure est très bien définie et la variation entre les variables est assez constante, c'est pourquoi ils sont souvent utilisés en médecine). Les modèles d'arbre univariés sont généralement combinés avec des apprenants d'ensemble lorsqu'ils sont utilisés pour la prédiction (c.-à-d. Une forêt aléatoire). Les personnes qui utilisent le partitionnement ou le clustering multivarié (qui est très étroitement lié au partitionnement multivarié) le font souvent pour des problèmes complexes que les méthodes univariées s'adaptent très mal, et le font principalement pour la prédiction, ou pour regrouper les observations en catégories.

Je recommande fortement le livre de Julian Faraway, Extending the Linear Model with R. Le chapitre 13 est entièrement consacré à l'utilisation des arbres (tous univariés). Si vous êtes intéressé par les méthodes multivariées, Elements of Statistical Learning par Hastie et. al, fournit un excellent aperçu de nombreuses méthodes multivariées, y compris PRIM (bien que Friedman à Stanford ait son article original sur la méthode publié sur son site Web), ainsi que les méthodes de clustering.

En ce qui concerne les packages R pour utiliser ces méthodes, je pense que vous utilisez déjà le package rpart, et j'ai mentionné le package prim ci-dessus. Il existe plusieurs routines de clustering intégrées, et j'aime beaucoup le package de parti mentionné par une autre personne dans ce fil, en raison de sa mise en œuvre de l'inférence conditionnelle dans le processus de construction de l'arbre de décision. Le package optpart vous permet d'effectuer un partitionnement multivarié, et le package mvpart (également mentionné par quelqu'un d'autre) vous permet d'effectuer des arborescences rpart multivariées, mais je préfère personnellement utiliser partDSA, qui vous permet de combiner les nœuds plus bas dans votre arborescence pour empêcher le partitionnement de similaires observations, si je pense que la partie et la partie ne sont pas adéquates pour mes besoins de modélisation.

Remarque: Dans mon exemple d'arbre rpart au paragraphe 2, je décris comment le partitionnement fonctionne avec les numéros de noeud, si l'on devait dessiner cet arbre, le partitionnement se déroulerait vers la gauche si la règle de la division était vraie, cependant dans RI croire que la scission se déroule réellement vers la droite si la règle est vraie.

Adam
la source
Adam grande réponse. C'est exactement ce que je demandais. Cependant, vous avez ajouté un peu d'informations sur lesquelles j'ai eu du mal à trouver plus d'informations. Le critère d'arrêt CP de Mallow. J'ai parcouru le code source de R, mais il est trop difficile de comprendre comment ils choisissent de s'arrêter. J'ai à peu près une idée, mais j'ai besoin d'un document ou d'une discussion sur la façon dont cela fonctionne afin que je puisse terminer sa mise en œuvre. Avez-vous des informations à ce sujet?
chubbsondubs
J'ai donc vérifié le manuel de référence de rpart, et apparemment je me trompais. Alors que l'un des critères d'arrêt dans rpart est appelé "cp", c'est l'abréviation de "paramètre de complexité" et est simplement le montant minimum que r ^ 2 doit augmenter pour poursuivre une division particulière. J'ai corrigé mon message ci-dessus pour refléter cela. L'absence de tests statistiques dans les règles de fractionnement est l'une des raisons pour lesquelles j'utilise le package parti sur le package rpart. Avec le package party, la méthode par défaut implémente une valeur de p corrigée de Bonferroni comme critère d'arrêt (par défaut p = 0,05). Pour plus de détails, voir la vignette.
Adam
Je pense que le fait que rpart n'utilise pas de critère d'arrêt est un atout plutôt qu'un passif. Une scission peut sembler sans valeur, et pourtant ouvrir la voie à des scissions ultérieures plus bas dans l'arbre, ce qui peut être assez important. Une politique de «croissance, puis élagage» telle que mise en œuvre dans rpart évitera un arrêt précoce et me semble une approche sensée.
F. Tusell
@Tusell, l'idée derrière les recherches de CART est que le choix d'un critère d'arrêt n'est pas optimal. Faites pousser un arbre complet puis utilisez l'élagage pour trouver un arbre optimal. Cependant, comme @Adam l'a souligné, rpart ne fonctionne pas exactement comme ça. Je pense qu'une partie est une optimisation pour les grands ensembles de données. S'il peut couper un sous-arbre tôt sans l'explorer, cela peut économiser beaucoup plus de temps CPU que de passer par une session complète d'expansion et d'élagage. Comme vous le faites remarquer, cela signifie que certains arbres ne sont pas entièrement explorés et que vous devez modifier le paramètre cp pour le faire fonctionner.
chubbsondubs
@Adam est R ^ 2 calculé à partir de l'ensemble de données de test ou utilise-t-il l'ensemble d'élagage pour calculer MSE?
chubbsondubs
1

Pour autant que je sache, ce n'est pas le cas; mais je ne l'ai pas utilisé depuis un moment. Si je vous comprends bien, vous voudrez peut-être plutôt regarder le package mvpart .

F. Tusell
la source
1

Votre terminologie prête à confusion. Parce que vous voulez dire des divisions utilisant plus d'une variable, ou un arbre qui permet une réponse multivariée (par opposition à une réponse univariée)? Je suppose que ce dernier.

F. Tusell vous a indiqué le package mvpart, qui ajoute un critère multivarié d'impureté de nœud qui est évalué pour toutes les divisions possibles à chaque étape de la construction de l'arborescence.

Une alternative est le paquet parti , dont la fonction ctree()peut gérer des réponses multivariées.

Gavin Simpson
la source
En fait, je fais référence aux divisions utilisant plus d'une variable. Si vous lisez le livre CART de Leo Breiman, il se réfère à cela comme des fractionnements à plusieurs variables par opposition à univariés où une seule variable est prise en compte. Merci pour votre réponse.
chubbsondubs
1
Toutes les variables sont prises en compte dans rpart, la division binaire est formée en recherchant toutes les variables et tous les emplacements de division possibles dans chaque variable. rpartstocke également des informations sur les divisions de substitution qui peuvent être utilisées lorsqu'il manque des données dans vos variables. est-ce que cela aide?
Gavin Simpson
Si vous voulez dire des divisions qui sont une combinaison de deux ou plusieurs variables, non, rpartne gère pas ce cas.
Gavin Simpson
1

Les divisions multivariées telles que définies dans le livre CART ne sont pas implémentées dans rpart. Le logiciel CART de Salford Systems possède cette fonctionnalité, mais AFAIK utilise un algorithme propriétaire sous licence de Breiman, Friedman et al.

Hong Ooi
la source