【问题标题】:How to force decision tree to split into different classes如何强制决策树分成不同的类
【发布时间】:2020-03-03 23:27:15
【问题描述】:

我正在做一个决策树,我想强制算法在一个节点之后将结果分成不同的类。 问题是,在我得到的树中,在评估条件(X

这是生成树和图的代码:

clf = tree.DecisionTreeClassifier(max_depth=2)
clf = clf.fit(users_data, users_target)

dot_data = tree.export_graphviz(clf, out_file=None, 
                     feature_names= feature_names,  
                     class_names= target_names,  
                     filled=True, rounded=True,  
                     special_characters=True) 

graph = graphviz.Source(dot_data)  
graph

我希望在节点之后找到“YES”和“NO”类。现在,在相应条件之后,我在最后关卡中获得了相同的课程。

谢谢!

【问题讨论】:

    标签: python machine-learning scikit-learn decision-tree


    【解决方案1】:

    事实上,您的模型确实看起来并没有在第一级和第二级节点之间提供任何进一步的区分;因此,如果您确定这对于您的情况是(某种)最佳选择,您可以简单地使用max_depth=1 而不是 2 要求它停止:

    clf = tree.DecisionTreeClassifier(max_depth=1)
    

    但请记住,实际上这可能远非最佳;查看来自 scikit-learn docs 的 iris 数据集的树:

    您可以看到,在树级别的更下方,带有class=versicolor 的节点从看起来像class=virginica 的“纯”节点出现(反之亦然)。

    因此,在决定预先将树修剪为max_depth=1 之前,您可能需要检查是否让它进一步生长(即不指定max_depth 参数,从而将其保留在@987654331 的default value 中@),可能更适合您的情况。

    一切都取决于为什么您正在这样做(即您的业务案例):如果这是一个探索性案例,您很可能会停止使用max_depth=1;如果它是预测性的,您应该考虑哪种配置可以最大化适当的指标(最有可能是准确性)。

    【讨论】:

      【解决方案2】:

      尝试使用标准 =“熵”。我发现这解决了问题

      【讨论】:

        猜你喜欢
        • 2021-06-17
        • 2013-12-01
        • 2012-03-06
        • 2021-04-22
        • 2016-07-12
        • 2018-12-12
        • 2016-05-31
        • 2018-10-20
        • 2013-03-26
        相关资源
        最近更新 更多