我正在做一个决策树,我想强制算法在一个节点之后将结果分成不同的类。 问题在于,在获得条件的树中,在评估条件(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
我希望在节点之后找到“是”和“否”类。现在,在相应条件之后,我在最后一级获得相同的课程。
谢谢!
答案 0 :(得分:1)
照原样,您的模型确实确实看起来像在第一层和第二层节点之间没有提供任何进一步的区分。因此,如果您确定对于您的情况是最佳的,则可以使用max_depth=1
而不是2来简单地要求它停止操作:
clf = tree.DecisionTreeClassifier(max_depth=1)
但是请记住,实际上这可能远非最佳。看看scikit-learn docs中虹膜数据集的树:
您可以看到,在树级别的更深处,带有class=versicolor
的节点从class=virginica
的“纯”节点出现(反之亦然)。
因此,在决定将树事先修剪到max_depth=1
之前,您可能想检查是否让它进一步增长(即,不指定max_depth
参数,从而将其保留在其{{ None
中的3}},可能更适合您的情况。
一切都取决于为什么要这么做(例如,您的业务案例):如果是探索性案例,您最好停止使用{{1} };如果是可预测的,则应考虑哪种配置可以最大化适当的指标(最有可能是准确性)。
答案 1 :(得分:0)
尝试使用标准=“熵”。我发现这可以解决问题