Когда я использую sklearn DecisionTreeClassifier, возвращаемое дерево не соответствует заданным параметрам - PullRequest
0 голосов
/ 01 мая 2020

Я работаю с набором данных, который имеет 170 объектов и 26000 наблюдений. Когда я подгоняю модель DecisionTreeClassifier к этому набору данных без каких-либо ограничений, он создает дерево со всеми 170 объектами и 8173 узлами. Тем не менее, когда я пытаюсь ограничить возможности дерева с помощью max_leaf_nodes и max_features (как показано ниже) и выводить на печать функции полученного дерева, они не учитывают параметры, которые я передаю классификатору. Почему это происходит? На данный момент я не позаботился о том, чтобы очистить набор данных коллинеарных переменных, поэтому я полагаю, что это может повлиять на мою классификацию, но я все еще удивлен, что функция, кажется, игнорирует параметры, которые я ей предоставляю (но это не кажется полностью игнорировать их, поскольку оно не создает того же дерева, что и без каких-либо ограничений).

tuned_tree = DecisionTreeClassifier(max_leaf_nodes=1000, max_features=40)
tuned_tree.fit(X_train, y_train)

print("Number of features: {}".format(tuned_tree.tree_.n_features))
print("Number of nodes (leaves): {}".format(tuned_tree.tree_.node_count),"\n")

Вывод:

Количество функций: 170

Количество узлов (листьев): 1999

1 Ответ

1 голос
/ 01 мая 2020

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

max_features : количество функций, которые следует учитывать при поиске наилучшего разделения

Теперь вы можете предположить, что максимальное количество объектов будет числом объектов, используемых в дереве, однако это не так. Это количество функций, которые необходимо учитывать при каждом разбиении . См. Также тред Как работает параметр max_features в DecisionTreeClassifier?

max_leaf_nodes : вырастить дерево с max_leaf_nodes в стиле «лучший первый» , Лучшие узлы определяются как относительное уменьшение примесей.

Здесь я думаю, что это больше вопрос терминологии. Не все узлы являются листами, но все листы являются узлами (конечные узлы в дереве должны быть конкретными; также называемые листовые узлы ). Чтобы получить листовые узлы, вы можете использовать:

tuned_tree.tree_.n_leaves

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...