【发布时间】:2018-12-26 02:01:04
【问题描述】:
我使用 sklearn.tree.DecisionTreeClassifier 来构建决策树。使用最优参数设置,我得到一棵有不必要叶子的树(见下图示例 - 我不需要概率,所以标记为红色的叶子节点是不必要的分裂)
是否有任何第三方库可以修剪这些不必要的节点?还是代码sn-p?我可以写一个,但我真的无法想象我是第一个遇到这个问题的人......
要复制的代码:
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
mdl = DecisionTreeClassifier(max_leaf_nodes=8)
mdl.fit(X,y)
PS:我已经尝试了多个关键字搜索,但我有点惊讶地没有找到任何东西 - sklearn 中真的没有一般的后修剪吗?
PPS:针对可能的重复:虽然the suggested question 可能会在我自己编写修剪算法时帮助我,但它回答了一个不同的问题——我想去掉不改变最终决定的叶子,而另一个问题想要一个分裂节点的最小阈值。
PPPS:显示的树是显示我的问题的示例。我知道创建树的参数设置不是最理想的。我不是在问优化这棵特定的树,我需要进行后修剪以去除叶子,如果需要类概率可能会有所帮助,但如果只对最可能的类感兴趣,则无济于事。
【问题讨论】:
-
@ncfirth:虽然问题也与修剪有关,但它会尝试做其他事情 - 请参阅我的编辑。
-
@ncfirth:但是,感谢您提供链接,它帮助我编写了自己的代码 (see my answer below) 用于后期修剪。
标签: python scikit-learn decision-tree pruning