我正在做一个决策树,我想强制算法在一个节点后将结果分成不同的类。
问题在于,在获得条件的树中,评估条件(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中虹膜数据集的树:
从中可以看到,在树级别的更深处,带有
class=versicolor
的节点从看起来像class=virginica
的“纯”节点出现(反之亦然)。因此,在决定将树事先修剪为
max_depth=1
之前,您可能需要检查是否使它进一步增长(即,不指定max_depth
参数,从而将其保留在None
的default value中),可能对您的情况更好。一切都取决于您到底为什么要这样做(即您的业务案例):如果这是一个探索性案例,您最好停止使用
max_depth=1
;如果是可预测的,则应考虑哪种配置可以最大化适当的指标(最有可能是准确性)。关于python - 如何强制决策树拆分为不同的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58747770/