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

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

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

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

Смотрите код и вывод ниже:

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

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

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

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

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

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

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

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

1 ответ

Решение

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

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

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

  • mincriterion: Действует как "регулятор" для глубины дерева, меньшие значения приводят к большим деревьям; Когда mincriterion равен 0,8, значение p должно быть меньше, чем 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)

Другие вопросы по тегам