sklearn.tree.DecisionTreeRegressor: глубина дерева больше, чем указано, когда max_leaf_nodes! = Нет - PullRequest
2 голосов
/ 14 мая 2019

В настоящее время я работаю над проблемой предсказания, которую я попытался решить с помощью scikit-learns DecisionTreeRegressor, когда натолкнулся на следующую проблему:

При подгонке дерева указываются оба параметра max_depth и max_leaf_nodes, depth результирующего дерева равно max_depth+1. При подгонке дерева указав только max_depth, полученное дерево имеет correct depth.

Может ли это быть ошибкой в ​​DecisionTreeRegressor class или мне не хватает общих знаний о деревьях регрессии?

Я работаю на машине с Windows, в ноутбуке Python 3.7 Jupyter. Версия Sklearn - 0.20.3. На самом деле я сталкивался с этой работой с RandomForestRegressor, но обнаружил ту же проблему для DecisionTreeRegressor.

Я написал следующий упрощенный пример, чтобы вы могли попробовать сами. Просто раскомментируйте max_leaf_nodes=10.

Я также визуализировал деревья, используя graphviz, который на самом деле показывал деревья разной глубины.

import numpy as np
from sklearn.tree import DecisionTreeRegressor

X = np.random.rand(10,4)
y = np.random.rand(10,1)


tree = DecisionTreeRegressor(max_depth = 2,
                             #max_leaf_nodes = 10 
                             )
tree.fit(X,y)

print(tree.tree_.max_depth)

Спасибо за любые комментарии.

1 Ответ

1 голос
/ 14 мая 2019

Хотя это не задокументировано, если max_leaf_nodes не установлено, DepthFirstTreeBuilder будет использоваться для соответствия нижележащему объекту дерева; если это так, то будет использоваться BestFirstTreeBuilder; эта разница приводит к созданию деревьев разной глубины.

Это детали реализации, а не из-за специфических характеристик деревьев решений.

Кроме того, я хотел бы отметить, что максимальное количество листовых узлов также ограничивает максимальную глубину.

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