[英]How to force decision tree to split into different classes
我正在做一棵决策树,我想强制算法在一个节点之后将结果分成不同的类。 问题是,在我得到的树中,在评估条件(X < 小于某个值)之后,我得到了相同 class 的两个结果(例如,是和是)。 我希望将“是”和“否”作为节点评估的结果。 这是我得到的示例:
这是生成树和 plot 的代码:
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”类。 现在,我在各自条件之后的最后一个级别中获得了相同的课程。
谢谢!
实际上,您的 model 确实看起来确实没有在第一级和第二级节点之间提供任何进一步的区分; 因此,如果您确定这对于您的情况是(某种)最优的,您可以简单地使用max_depth=1
而不是 2 要求它停止:
clf = tree.DecisionTreeClassifier(max_depth=1)
但是请记住,实际上这可能远非最佳; 查看 scikit-learn 文档中 iris 数据集的树:
您可以看到,在树级别的更下方,具有class=versicolor
的节点从看起来像class=virginica
的“纯”节点出现(反之亦然)。
因此,在决定事先将树修剪为max_depth=1
之前,您可能需要检查是否让它进一步增长(即不指定max_depth
参数,从而将其保留为默认值None
),这可能对您更好案子。
一切都取决于你为什么要这样做(即你的商业案例):如果它是一个探索性的,你很可能会停止max_depth=1
; 如果它是预测性的,您应该考虑哪种配置可以最大化适当的指标(最有可能是准确性)。
尝试使用标准 =“熵”。 我发现这可以解决问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.