У меня есть очень простой образец данных/меток, проблема, с которой я сталкиваюсь, заключается в том, что сгенерированное дерево решений (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:
список строк, bool или None, необязательный (по умолчанию=None)
Имена каждого из целевых классов в порядке возрастания номеров. Релевантно только для классификации и не поддерживается для нескольких выходных данных. Если True, показывает символическое представление имени класса.
«... в порядке возрастания» это не имеет для меня особого смысла, если я изменю kwarg
на:
class_names=sorted(labels)
Результат тот же (очевидный в данном случае).
['apple', 'orange']
- person Ken Syme   schedule 06.03.2018class_names=unique(labels, 'stable')
- person Dan   schedule 06.03.2018sorted(set(labels))
, потому что, если я этого не сделаю, он будет отображаться неправильно (переключен). Вы можете ответить вам, если хотите, я приму это как можно скорее - person Hula Hula   schedule 06.03.2018