决策树重复类名

时间:2018-03-06 15:18:35

标签: python python-3.x decision-tree sklearn-pandas

我有一个非常简单的数据/标签样本,我遇到的问题是生成的决策树(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

  

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

“......升序数字顺序”如果我将kwarg更改为:

,这对我来说没有多大意义
class_names=sorted(labels)

结果相同(在这种情况下很明显)。

1 个答案:

答案 0 :(得分:2)

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

所以一个类是'apple'而另一个是'orange',所以你只需要传入['apple', 'orange']

关于顺序,为了使其保持一致,您可以使用LabelEncoder将目标转换为整数int_labels = labelEncoder.fit_transform(labels),使用int_labels来适合您的决策树,然后使用{ {1}}要传递到图表中的属性,即