【问题标题】:decision tree repeating class names重复类名的决策树
【发布时间】:2018-08-14 12:15:09
【问题描述】:

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

所以,问题很明显,这两种可能性都适用。我做错了什么?

来自DOCS:

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

“...升序数字顺序”这对我来说没有多大意义,如果我将 kwarg 更改为:

class_names=sorted(labels)

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

【问题讨论】:

  • 类名实际上就是类的名称。这不是每个示例的标签。所以 0 类是“苹果”,1 类是“橙色”,所以我想你只需要传入 ['apple', 'orange']
  • 试试class_names=unique(labels, 'stable')
  • @KenSyme,谢谢你,我想它必须排序正确吗?像sorted(set(labels)),因为如果我不这样做,它会显示错误放置(切换)。喜欢的可以回复你,我会尽快采纳的

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


【解决方案1】:

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

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

关于顺序,为了使其正确一致,您可以使用LabelEncoder 将目标转换为整数int_labels = labelEncoder.fit_transform(labels),使用int_labels 来适应您的决策树,然后使用labelEncoder.classes_ 属性传递到你的图表即。

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 2021-05-30
    • 2021-12-31
    • 2016-04-04
    • 2019-03-04
    • 1970-01-01
    • 2013-03-26
    • 2011-03-08
    • 2021-04-22
    相关资源
    最近更新 更多