sklearn.tree.DecisionTreeRegressor: 当max_leaf_nodes != None时,树的深度大于指定值

我目前正在处理一个预测问题,我尝试使用scikit-learn的DecisionTreeRegressor来解决这个问题,遇到了以下问题:

当同时指定max_depthmax_leaf_nodes参数来拟合树时,生成的树的深度max_depth+1。当仅指定max_depth时,生成的树具有正确的深度

这是否是DecisionTreeRegressor类中的一个错误,还是我错过了关于回归树的一些常识?

我在一台Windows机器上工作,使用的是Python 3.7的Jupyter笔记本。Sklearn版本是0.20.3。实际上,我在使用RandomForestRegressor时发现了这个问题,但也发现了DecisionTreeRegressor存在相同的问题。

我编写了以下简化的示例,您可以自己尝试。只需取消注释max_leaf_nodes=10即可。

我还使用graphviz可视化了这些树,实际上显示了不同深度的树。

感谢任何评论。


回答:

尽管没有文档说明,如果未设置max_leaf_nodes,将使用DepthFirstTreeBuilder来拟合底层的树对象;如果设置了,则使用BestFirstTreeBuilder;这种差异导致生成的树具有不同的深度。

这是一个实现特定的细节,而不是因为决策树的特定特性导致的。

顺便提一下,我要指出,最大叶节点数也会限制最大深度。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注