graphviz可以显示一个热门的解码分类数据吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了graphviz可以显示一个热门的解码分类数据吗?相关的知识,希望对你有一定的参考价值。
我试图让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显示“解码”数据?
谢谢!
您似乎期望这里有一些(相对简单的)编程方法或解决方法,而这远非如此,问题实际上比简单的Graphviz可视化更深入。
你必须记住的是:
- 您的树不会“知道”任何有关任何解码数据的信息;就它而言,唯一的实际数据是单热编码数据
- Graphviz只是简单地显示树结构
鉴于上述情况,您可能会看到,虽然您的请求听起来确实有意义,并且从服务树解释的“业务”角度理解为所需的功能(毕竟,树模型的一大优势应该是从编程的角度来看,这个问题非常简单(SO实际上都是关于这个问题):它甚至与Graphviz没有任何关系 - 即使我们想要打印树,问题也会增加以规则的形式,它与scikit-learn为树木建造所做的设计选择有关。
我承认,当我第一次听到这个消息时,我惊讶地发现scikit-learn中的决策树不能直接处理分类变量(参见Can sklearn DecisionTreeClassifier truly work with categorical data?中的讨论以及关于该主题的仍然开放的Github issue)。我之所以感到惊讶的原因是,我知道这肯定不是唯一可用的设计选择:我来自R背景,而且我知道在R中完全可以使用具有分类特征的树木而不需要一个 - 热编码;这是一个example:
但唉,这至少暂时不适用于scikit-learn(我非常怀疑它会改变)......
以上是关于graphviz可以显示一个热门的解码分类数据吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 export graphviz 将特征和类名称放入决策树
使用带有特征和类名称的 graphviz 可视化随机森林中的树