Деревья условного вывода против традиционных деревьев решений

97

Может ли кто-нибудь объяснить основные различия между деревьями условного вывода ( ctreeиз partyпакета в R) по сравнению с более традиционными алгоритмами дерева решений (такими как rpartв R)?

  1. Что отличает CI-деревья?
  2. Сильные и слабые стороны?

Обновление: я посмотрел на статью Хортхорна и др., На которую ссылается Чи в комментариях. Я не смог полностью им следовать - может кто-нибудь объяснить, как переменные выбираются с помощью перестановок (например, что такое функция влияния)?

Спасибо!

B_Miner
источник
1
Вы имеете в виду объяснение, которое выходит за рамки того, что описано в статье Хоторна ? Я помню несколько хороших иллюстраций от Каролин Штробл на конференции IMPS2009 ; Я думаю, что на ее сайте есть несколько раздаточных материалов.
Chl
Эта ссылка показывает Comparision между различными формами пакетов дерева решений r-bloggers.com/a-brief-tour-of-the-trees-and-forests
Archpaul

Ответы:

93

Для чего это стоит:

так rpartи ctreeрекурсивно выполнять одномерные расколы зависимой переменной на основе значений на множестве ковариаций. rpartи связанные алгоритмы обычно используют информационные меры (такие как коэффициент Джини ) для выбора текущего ковариата.

ctreeсогласно его авторам (см . комментарии chl ) избегает следующего смещения выбора переменных rpart(и связанных методов): они имеют тенденцию выбирать переменные, которые имеют много возможных расщеплений или много пропущенных значений. В отличие от других, ctreeиспользуется процедура проверки значимости для выбора переменных вместо выбора переменной, которая максимизирует информационную меру (например, коэффициент Джини).

Тест значимости, или лучше: тесты множественной значимости, рассчитанные при каждом запуске алгоритма (выберите ковариацию - выберите расщепление - рекурсивный), являются тестами перестановки , то есть «распределение статистики теста при нулевой гипотезе получается путем вычисления все возможные значения тестовой статистики при перестановках меток на наблюдаемых точках данных ». (из статьи в википедии).

Теперь для тестовой статистики: она вычисляется из преобразований (включая тождество, то есть без преобразования) зависимой переменной и ковариат. Вы можете выбрать любое из нескольких преобразований для обеих переменных. Для DV (зависимая переменная) преобразование называется функцией влияния, о которой вы спрашивали.

Примеры (взяты из статьи ):

  • если и DV, и ковариаты являются числовыми, вы можете выбрать преобразования идентичности и рассчитать корреляции между ковариатой и всеми возможными перестановками значений DV. Затем вы вычисляете p- значение из этого теста перестановки и сравниваете его с p-значениями для других ковариат.
  • если и DV, и ковариаты являются номинальными (неупорядоченными категориями), статистика теста вычисляется из таблицы сопряженности.
  • Вы можете легко составить другие виды статистики теста из любого вида преобразований (включая преобразование идентичности) из этой общей схемы.

Небольшой пример для теста перестановки в R:

require(gtools)
dv <- c(1,3,4,5,5); covariate <- c(2,2,5,4,5)
# all possible permutations of dv, length(120):
perms <- permutations(5,5,dv,set=FALSE) 
# now calculate correlations for all perms with covariate:
cors <- apply(perms, 1, function(perms_row) cor(perms_row,covariate)) 
cors <- cors[order(cors)]
# now p-value: compare cor(dv,covariate) with the 
# sorted vector of all permutation correlations
length(cors[cors>=cor(dv,covariate)])/length(cors)
# result: [1] 0.1, i.e. a p-value of .1
# note that this is a one-sided test

Теперь предположим, что у вас есть набор ковариат, а не только один, как указано выше. Затем вычислите p-значения для каждого из ковариат, как в приведенной выше схеме, и выберите значение с наименьшим p- значением. Вы хотите вычислить p-значения вместо корреляций напрямую, потому что у вас могут быть ковариаты разных видов (например, числовые и категориальные).

После того, как вы выбрали ковариату, теперь изучите все возможные расщепления (или часто как-то ограниченное число всех возможных расщеплений, например, требуя минимальное количество элементов DV перед расщеплением), снова оценивая тест на основе перестановок.

ctreeпоставляется с рядом возможных преобразований как для DV, так и для ковариат (см. справку Transformationsв partyпакете).

поэтому, как правило, основное различие заключается в том, что ctreeиспользуется ковариатная схема выбора, основанная на статистической теории (то есть выбор с помощью тестов значимости на основе перестановок), что позволяет избежать потенциального смещения, в rpartпротивном случае они кажутся похожими; Например, деревья условного вывода могут использоваться в качестве базовых учащихся для случайных лесов.

Это примерно, насколько я могу получить. Для получения дополнительной информации вам действительно нужно прочитать документы. Обратите внимание, что я настоятельно рекомендую вам действительно знать, что вы делаете, когда хотите применить какой-либо статистический анализ.

wolf.rauch
источник
Поэтому было бы справедливо сказать следующее: 1. В принципе, если бы тесты значимости были доступны и их легко было вычислить для Gini, то любой текущий построитель дерева решений мог бы быть дополнен ими; 2. Но на практике они недоступны (то есть очень трудны / неэффективны для вычисления) в большинстве случаев; 3. Авторы деревьев КИ выбрали одно семейство критериев расщепления. Это не обязательно лучшее семейство для точности классификации, но по крайней мере для него легко вычислить значение; 4. И, следовательно, слабость деревьев CI в том, что вы обязаны использовать этот конкретный критерий?
ШелдонКупер
1
@SheldonCooper: 1. и 2. может быть немного над моей головой. Я думаю, что вы правы в отношении 3. и 4.
wolf.rauch
1
(...) и все возможные перестановки значений DV "Все возможные перестановки значений DV? Чтобы найти все возможные перестановки из 10 элементов, требуется более 130 секунд. Это сделало бы деревья CI бесполезными, когда у вас более 20 наблюдений. - добавил модератор.
chl
1
Извините, но что означает DV?
мифический программист
1
@mythicalprogrammer зависимая переменная, я думаю
Фрикстер