Lors de la construction d'un modèle CART (spécifiquement l'arbre de classification) à l'aide de rpart (dans R), il est souvent intéressant de savoir quelle est l'importance des différentes variables introduites dans le modèle.
Ainsi, ma question est: Quelles sont les mesures communes existantes pour classer / mesurer l'importance des variables participantes dans un modèle CART? Et comment cela peut-il être calculé à l'aide de R (par exemple, lors de l'utilisation du package rpart)
Par exemple, voici un code factice, créé pour que vous puissiez y montrer vos solutions. Cet exemple est structuré de sorte qu'il est clair que les variables x1 et x2 sont "importantes" tandis que (dans un certain sens) x1 est plus important que x2 (puisque x1 devrait s'appliquer à plus de cas, donc avoir plus d'influence sur la structure des données, puis x2).
set.seed(31431)
n <- 400
x1 <- rnorm(n)
x2 <- rnorm(n)
x3 <- rnorm(n)
x4 <- rnorm(n)
x5 <- rnorm(n)
X <- data.frame(x1,x2,x3,x4,x5)
y <- sample(letters[1:4], n, T)
y <- ifelse(X[,2] < -1 , "b", y)
y <- ifelse(X[,1] < 0 , "a", y)
require(rpart)
fit <- rpart(y~., X)
plot(fit); text(fit)
info.gain.rpart(fit) # your function - telling us on each variable how important it is
(les références sont toujours les bienvenues)
la source
Réponses:
L'importance variable peut généralement être calculée sur la base de la réduction correspondante de la précision prédictive lorsque le prédicteur d'intérêt est supprimé (avec une technique de permutation, comme dans la forêt aléatoire) ou d'une certaine mesure de diminution de l'impureté du nœud, mais voir (1) pour un aperçu de méthodes disponibles. Une alternative évidente à CART est RF bien sûr ( randomForest , mais voir aussi fête ). Avec RF, l'indice d'importance de Gini est défini comme la diminution moyenne de Gini des impuretés des nœuds sur tous les arbres de la forêt (il résulte du fait que l'indice d'impureté de Gini pour un nœud parent donné est supérieur à la valeur de cette mesure pour ses deux nœuds filles, voir par exemple (2)).
Je sais que Carolin Strobl et coll. ont contribué à de nombreuses études de simulation et expérimentales sur l'importance des variables (conditionnelles) dans les RF et les CART (par exemple, (3-4), mais il y en a beaucoup d'autres, ou sa thèse, Statistical Issues in Machine Learning - Towards Reliable Split Selection and Mesures d’importance variable ).
À ma connaissance, le package caret (5) ne considère qu'une fonction de perte pour le cas de régression (c.-à-d. Erreur quadratique moyenne). Peut-être qu'il sera ajouté dans un proche avenir (de toute façon, un exemple avec un cas de classification par k-NN est disponible dans l'aide en ligne de
dotPlot
).Cependant, Noel M O'Boyle semble avoir un code R pour l' importance variable dans CART .
Les références
la source
importance()
dans randomForest a une importance variable individuelle avec une diminution moyenne de la précision et une diminution moyenne de Gini.La fonction suivante (du package Caret) peut être utilisée pour évaluer l'importance variable dans les arbres rpart. J'ai corrigé un bogue dans la fonction Caret lorsque ce seul nœud racine dans l'arbre.
}
Le code r suivant produira des scores d'importance pour un arbre rpart "fit"
la source
Je pense que chl a à peu près répondu à la première partie:
En ce qui concerne la deuxième partie de votre question:
Vous pouvez trouver l'importance variable à l'aide de rpart en utilisant le résumé (fit). Cela génère l'importance variable entre plusieurs autres choses. Vous pouvez en savoir plus à ce sujet ici: https://cran.r-project.org/web/packages/rpart/rpart.pdf . Reportez-vous à la page 25.
la source
names(result)
spectaclesvariable.importance
result$variable.importance
devrait aider?la source