代码之家  ›  专栏  ›  技术社区  ›  Hula Hula

决策树重复类名

  •  2
  • Hula Hula  · 技术社区  · 7 年前

    我有一个非常简单的数据/标签示例,我遇到的问题是生成的决策树(pdf)重复类名:

    from sklearn import tree
    from sklearn.externals.six import StringIO  
    import pydotplus
    
    features_names = ['weight', 'texture']
    features = [[140, 1], [130, 1], [150, 0], [110, 0]]
    labels = ['apple', 'apple', 'orange', 'orange']
    
    clf = tree.DecisionTreeClassifier()
    clf.fit(features, labels)
    
    dot_data = StringIO()
    tree.export_graphviz(clf, out_file=dot_data, 
                             feature_names=features_names,  
                             class_names=labels,  
                             filled=True, rounded=True,  
                             special_characters=True,
                             impurity=False)
    
    graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) 
    graph.write_pdf("apples_oranges.pdf")
    

    生成的pdf如下所示:

    enter image description here

    所以,问题很明显,这两种可能性都是苹果的。我做错了什么?

    DOCS :

    字符串列表,布尔或无,可选(默认值=无)
    每个目标类的名称按升序排列。仅与分类相关,不支持多输出。如果为True,则显示类名的符号表示。

    “…升序数字顺序”如果我改变 kwarg 收件人:

    class_names=sorted(labels)
    

    结果是一样的(在这种情况下很明显)。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ken Syme    7 年前

    类名实际上就是类的名称。不是每个例子的标签。

    所以一个班是“苹果”,另一个班是“橙色”,所以你只需要通过 ['apple', 'orange'] .

    关于顺序,为了使其正确一致,您可以使用 LabelEncoder 将目标转换为整数 int_labels = labelEncoder.fit_transform(labels) 使用 int_labels 要适合您的决策树,请使用 labelEncoder.classes_ 属性传递到图形viz中。