我正在做一个决策树,我想强制算法在一个节点后将结果分成不同的类。
问题在于,在获得条件的树中,评估条件(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


我希望在节点之后找到“是”和“否”类。现在,在相应条件之后,我在最后一级获得相同的类。

谢谢!

最佳答案

照原样,您的模型确实确实看起来像在第一层和第二层节点之间没有提供任何进一步的区分。因此,如果您确定这对于您的情况是最佳的,则可以使用max_depth=1而不是2来要求它停止:

clf = tree.DecisionTreeClassifier(max_depth=1)


但是请记住,实际上这可能远非最佳。看一下scikit-learn docs中虹膜数据集的树:

python - 如何强制决策树拆分为不同的类-LMLPHP

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

因此,在决定将树事先修剪为max_depth=1之前,您可能需要检查是否使它进一步增长(即,不指定max_depth参数,从而将其保留在Nonedefault value中),可能对您的情况更好。

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

关于python - 如何强制决策树拆分为不同的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58747770/

10-12 22:38