Сделать дерево с максимальной глубиной, используя 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)