Сделать дерево с максимальной глубиной, используя ctree - PullRequest
0 голосов
/ 30 апреля 2018

При построении модели ctree из partykit я понимаю, что она выбирает значение по умолчанию, чтобы предотвратить наложение на заросшие деревья. Это значение по умолчанию иногда приводит к слишком простому дереву. Чтобы использовать технику после обрезки, я хочу создать подходящее дерево, потенциально полностью выросшее, используя ctree, а затем поработать над обрезкой позже. Попробуйте много разных вещей, но мой код получает ошибку.

Этот ответ о переполнении стека при использовании всех переменных для создания дерева - это не то, что я хочу. Я не обязательно хочу, чтобы все переменные были, но я хочу, чтобы максимальная глубина дерева была как можно больше заросла.

В принципе, как заставить дерево пройти как можно больше глубин?

См. Код и вывод ниже:

treemodel <- ctree(Species ~ ., iris)
plot(treemodel)

И я использую документацию Help + из пакета, но не вижу много опций для настройки этого. Перспективным является контрольный параметр, но документация не очень подробная. При поиске на других форумах я сделал следующую попытку:

treemodel <- ctree(Species ~ ., iris, control=mincriterion)

Я тоже пробовал:

treemodel <- ctree(Species ~ ., iris, control="mincriterion")

Но оба кода выдают ошибку. Ошибка:

Ошибка в if (sum (weights)

Я использую partykit 1.1-1 и r на Mac OS.

1 Ответ

0 голосов
/ 30 апреля 2018

ctree из partykit принимает параметр ctree_control через аргумент control, который можно использовать для управления аспектами подбора дерева.

Выполнение control=mincriterion или control="mincriterion" неверно, и, следовательно, вы получаете ошибку. control ожидает список с параметрами управления, а не символьное значение.

В частности, вы хотите передать в ctree_control следующее:

  • mincriterion: действует как «регулятор» для глубины дерева, меньшие значения приводят к большим деревьям; Когда минкритерий равен 0,8, р-значение должно быть меньше 0,2, чтобы узел мог разделиться
  • minsplit и minbucket: установите на 0, чтобы минимальный критерий всегда встречаются и, следовательно, расщепление никогда не останавливается

От самого автора пакета:

Разделение выполняется, когда критерий превышает значение, заданное mincriterion как указано в ctree_control. Например, когда mincriterion = 0,95, значение p должно быть меньше 0,05, чтобы разделить этот узел. Этот статистический подход гарантирует, что нужное дерево выращивается без дополнительной (пост-) обрезки или перекрестная проверка

Итак, итоговый код, используя control=ctree_control():

diab_model <- ctree(diabetes ~ ., diab_train, control = ctree_control(mincriterion=0.005, minsplit=0, minbucket=0))
plot(diab_model)

Первая строка кода создает дерево решений путем переопределения значений по умолчанию, а вторая строка кода отображает объект ctree. Вы получите полностью выросшее дерево с максимальной глубиной. Поэкспериментируйте со значениями mincriterion, minsplit и minbucket. Они также могут рассматриваться как гиперпараметр. Вот вывод plot(diab_model)

enter image description here

...