Ao construir um modelo CART (especificamente árvore de classificação) usando rpart (em R), geralmente é interessante saber qual é a importância das várias variáveis introduzidas no modelo.
Assim, minha pergunta é: Que medidas comuns existem para classificar / medir a importância das variáveis participantes de um modelo CART? E como isso pode ser calculado usando R (por exemplo, ao usar o pacote rpart)
Por exemplo, aqui está um código fictício, criado para que você possa mostrar suas soluções. Este exemplo está estruturado para que fique claro que as variáveis x1 e x2 são "importantes", enquanto (em certo sentido) x1 é mais importante que x2 (já que x1 deve se aplicar a mais casos, portanto, influi mais na estrutura dos dados, então 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
(as referências são sempre bem-vindas)
fonte
Respostas:
A importância variável geralmente pode ser calculada com base na redução correspondente da precisão preditiva quando o preditor de interesse é removido (com uma técnica de permutação, como na Floresta Aleatória) ou em alguma medida de diminuição da impureza do nó, mas consulte (1) para uma visão geral de métodos disponíveis. Uma alternativa óbvia ao CART é o RF, é claro ( randomForest , mas veja também party ). Com a RF, o índice de importância de Gini é definido como a diminuição média de Gini nas impurezas do nó em todas as árvores da floresta (decorre do fato de que o índice de impureza de Gini para um determinado nó pai é maior que o valor dessa medida para seus dois nós filhas, veja, por exemplo, (2)).
Eu sei que Carolin Strobl e coll. contribuíram com muitos estudos experimentais e de simulação sobre importância variável (condicional) em RFs e CARTs (por exemplo, (3-4), mas existem muitos outros, ou sua tese, Questões estatísticas em aprendizado de máquina - rumo à seleção dividida confiável e Medidas de Importância Variável ).
Que eu saiba, o pacote de acento circunflexo (5) considera apenas uma função de perda para o caso de regressão (isto é, erro quadrático médio). Talvez ele seja adicionado em um futuro próximo (de qualquer maneira, um exemplo com um caso de classificação por k-NN está disponível na ajuda on-line para
dotPlot
).No entanto, Noel M O'Boyle parece ter algum código R para importância variável no CART .
Referências
fonte
importance()
no randomForest tem importância variável individual, com decréscimo médio na precisão e diminuição média do gini.A função a seguir (do pacote Caret) pode ser usada para avaliar a importância variável nas árvores rpart. Corrigi um bug na função Caret quando esse único nó raiz na árvore.
}
O código r a seguir produzirá pontuações de importância para um "ajuste" da árvore rpart
fonte
Eu acho que chl praticamente respondeu a primeira parte:
Com relação à segunda parte da sua pergunta:
Você pode encontrar a importância da variável usando rpart usando o resumo (ajuste). Isso gera a importância variável entre várias outras coisas. Você pode ler mais sobre isso aqui: https://cran.r-project.org/web/packages/rpart/rpart.pdf . Consulte a página 25.
fonte
names(result)
mostravariable.importance
result$variable.importance
deve ajudar?fonte