При построении модели CART (в частности, дерева классификации) с использованием rpart (в R) часто бывает интересно узнать, какова важность различных переменных, введенных в модель.
Таким образом, мой вопрос: какие общие меры существуют для ранжирования / измерения важности переменных участвующих переменных в модели CART? И как это можно вычислить с помощью R (например, при использовании пакета rpart)
Например, вот некоторый фиктивный код, созданный, чтобы вы могли показать на нем свои решения. Этот пример структурирован таким образом, что ясно, что переменные x1 и x2 являются «важными», в то время как (в некотором смысле) x1 более важен, чем x2 (поскольку x1 должен применяться к большему количеству случаев, таким образом оказывая большее влияние на структуру данных, тогда х2).
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
(ссылки всегда приветствуются)
источник
Ответы:
Важность переменной в общем случае может быть рассчитана на основе соответствующего снижения точности прогнозирования при удалении интересующего предиктора (с помощью метода перестановки, как в случайном лесу) или некоторой меры уменьшения примеси узла, но см. (1) для обзора доступные методы. Очевидной альтернативой CART является RF конечно ( randomForest , но смотрите также party ). При использовании RF индекс важности Джини определяется как усредненное уменьшение Джини примесей узлов по всем деревьям в лесу (это следует из того факта, что индекс примесей Джини для данного родительского узла больше, чем значение этой меры для его двух дочерние узлы, см. например (2)).
Я знаю, что Кэролайн Стробл и Колл. внесли большой вклад в имитационные и экспериментальные исследования важности (условной) переменной в RF и CART (например, (3-4)), но есть и много других, или ее диссертация " Статистические проблемы в машинном обучении - на пути к надежному выбору разделения и Меры переменного значения ).
Насколько мне известно, пакет каретки (5) рассматривает только функцию потерь для случая регрессии (т. Е. Среднеквадратичная ошибка). Возможно, он будет добавлен в ближайшем будущем (во всяком случае, пример с классификационным случаем по k-NN доступен в интерактивной справке для
dotPlot
).Однако у Ноэля М О'Бойла, похоже, есть некоторый R-код для значения переменной в CART .
Ссылки
источник
importance()
в randomForest имеет значение индивидуальной переменной со средним уменьшением точности и средним уменьшением джини.Следующая функция (из пакета Caret) может использоваться для оценки важности переменных в деревьях rpart. Я исправил ошибку в функции Caret, когда это единственный корневой узел в дереве.
}
Следующий код r даст оценки важности для дерева соответствия rpart
источник
Я думаю, что chl в значительной степени ответил на первую часть:
Что касается второй части вашего вопроса:
Вы можете найти значение переменной, используя rpart, используя сводку (fit). Это выводит значение переменной среди нескольких других вещей. Вы можете прочитать больше об этом здесь: https://cran.r-project.org/web/packages/rpart/rpart.pdf . См. Стр. 25.
источник
names(result)
шоуvariable.importance
result$variable.importance
должно помочь?источник