Choix du paramètre de complexité dans CART

16

Dans la routine rpart () pour créer des modèles CART, vous spécifiez le paramètre de complexité auquel vous souhaitez tailler votre arbre. J'ai vu deux recommandations différentes pour choisir le paramètre de complexité:

  1. Choisissez le paramètre de complexité associé à l'erreur de validation croisée minimale possible. Cette méthode est recommandée par Quick-R et HSAUR.

  2. Choisissez le paramètre de complexité le plus élevé dont l'erreur de validation croisée estimée se situe toujours dans une SE de l'erreur de validation croisée minimale possible. Voici mon interprétation de la documentation du package, qui dit: "Un bon choix de cp pour l'élagage est souvent la valeur la plus à gauche pour laquelle la moyenne se situe en dessous de la ligne horizontale" en référence à ce tracé .

Les deux choix de cp produisent des arbres assez différents dans mon jeu de données.

Il semble que la première méthode produira toujours un arbre plus complexe, potentiellement surchargé. Y a-t-il d'autres avantages, inconvénients, recommandations dans la littérature, etc. Je dois prendre en compte lors du choix de la méthode à utiliser? Je peux fournir plus d'informations sur mon problème de modélisation particulier si cela est utile, mais j'essaie de garder cette question suffisamment large pour qu'elle soit pertinente pour les autres.

demi-passe
la source
Que représente la ligne horizontale du tracé?
Bogdanovist
Je pense que cela représente 1 SE au-dessus de l'erreur minimale possible de validation croisée.
demi-passe
Si vous disposez de suffisamment de données, vous pouvez essayer de les séparer en un ensemble de données d'apprentissage et de test, même pour les arbres. Cela peut être particulièrement utile si vous êtes principalement intéressé par la prédiction, car l'ensemble de données de test en donnera une bonne estimation. Un autre choix est le partypackage qui utilise des tests de signification (ce n'est généralement pas quelque chose que je recommande, mais il semble pertinent ici). Comme toujours, cependant, le meilleur test est l'utilité et le sens; cela est particulièrement vrai si vous êtes principalement intéressé par l'explication.
Peter Flom - Réintègre Monica
Mes excuses pour la lenteur de la réponse. Pour clarifier, je pensais qu'en utilisant la validation croisée pour calculer l'erreur à différentes tailles d'arbre, j'avais déjà divisé les données à plusieurs reprises en ensembles de formation et de test. Est-ce que la réalisation d'une autre division formation / test serait redondante dans ce cas? Suis-je mal compris?
demi-passe
La division des données dans le train / test et la validation croisée du paramètre cp en utilisant uniquement les données du train reproduiront un test de prédiction réaliste (où vous ne pouvez pas utiliser les données futures pour estimer le cp). Le premier CV sera donc pour cp, l'erreur de prédiction pour le modèle global (y compris le cp estimé).
Robert Kubrick

Réponses:

6

Dans la pratique, j'ai vu les deux approches adoptées et je pense qu'en général, vos résultats ne devraient pas différer beaucoup dans les deux sens.

Cela étant dit, Hastie et al recommandent la règle de "l'erreur standard" dans les Éléments de l'apprentissage statistique , et j'ai tendance à faire confiance à leur jugement (Section 7.10, p. 244 dans ma version). La citation pertinente est:

Souvent, une règle "d'erreur standard" est utilisée avec validation croisée, dans laquelle nous choisissons le modèle le plus parcimonieux dont l'erreur n'est pas supérieure d'une erreur standard à l'erreur du meilleur modèle. "

Votre intuition sur la raison pour laquelle on suivrait la règle d'erreur à une norme est juste - vous feriez cela pour éviter de sélectionner un modèle qui correspond aux données.

Tchotchke
la source
1

Vous devez d'abord commencer par utiliser les arguments minsplit=0et cp=0(paramètre de complexité) puis utiliser les fonctions plotcp(T.max)et printcp(T.max)choisir la valeur de cpl'erreur relative minimale correspondante et tailler l'arborescence par la fonctionprune.rpart(T.max, cp=....)

Cela devrait vous donner l'arbre de classification optimal car ils ont tendance à être trop optimistes.

Ayman Hijazy
la source