graphviz可以显示一个热门的解码分类数据吗?

问题描述 投票:2回答:1

我试图让Graphviz显示我的oneHotEncoded分类数据,但我无法让它工作。

这是我的X数据与theses列:

类别,大小,类型,评级,类型,版本数量

['ART_AND_DESIGN''6000000+''免费''每个人''艺术与设计''7'] ['ART_AND_DESIGN''6000000+''免费''每个人''艺术与设计''2'] ... ['FAMILY''20000000+''免费''每个人''艺术与设计''13']

我的代码示例:

X = self.df.drop(['Installs'], axis=1).values
y = self.df['Installs'].values

self.oheFeatures = OneHotEncoder(categorical_features='all')
EncodedX = self.oheFeatures.fit_transform(X).toarray()

self.oheY = OneHotEncoder()
EncodedY = self.oheY.fit_transform(y.reshape(-1,1)).toarray()

self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(EncodedX, EncodedY, test_size=0.25, random_state=33)

clf = DecisionTreeClassifier(criterion='entropy', min_samples_leaf=100)
clf.fit(self.X_train, self.y_train)

tree.export_graphviz(clf, out_file=None, 
            feature_names=self.oheFeatures.get_feature_names(),
            class_names=self.oheY.get_feature_names(),
            filled=True, 
            rounded=True,  
            special_characters=True)  

Dot_data = tree.export_graphviz(clf, out_file=None) 
    graph = graphviz.Source(dot_data) 
    graph.render("applications") 

但是当我尝试可视化输出结果时,我得到了编码数据的决策树:

有没有办法让graphviz显示“解码”数据?

谢谢!

machine-learning scikit-learn graphviz decision-tree
1个回答
1
投票

您似乎期望这里有一些(相对简单的)编程方法或解决方法,而这远非如此,问题实际上比简单的Graphviz可视化更深入。

你必须记住的是:

  • 您的树不会“知道”任何有关任何解码数据的信息;就它而言,唯一的实际数据是单热编码数据
  • Graphviz只是简单地显示树结构

鉴于上述情况,您可能会看到,虽然您的请求听起来确实有意义,并且从服务树解释的“业务”角度理解为所需的功能(毕竟,树模型的一大优势应该是从编程的角度来看,这个问题非常简单(SO实际上都是关于这个问题):它甚至与Graphviz没有任何关系 - 即使我们想要打印树,问题也会增加以规则的形式,它与scikit-learn为树木建造所做的设计选择有关。

我承认,当我第一次听到这个消息时,我惊讶地发现scikit-learn中的决策树不能直接处理分类变量(参见Can sklearn DecisionTreeClassifier truly work with categorical data?中的讨论以及关于该主题的仍然开放的Github issue)。我之所以感到惊讶的原因是,我知道这肯定不是唯一可用的设计选择:我来自R背景,而且我知道在R中完全可以使用具有分类特征的树木而不需要一个 - 热编码;这是一个example

enter image description here

但唉,这至少暂时不适用于scikit-learn(我非常怀疑它会改变)......

© www.soinside.com 2019 - 2024. All rights reserved.