scikit-learn ExtraTreeClassifier和RandomForestClassifier的图表

时间:2015-04-09 21:01:31

标签: python graph scikit-learn random-forest

我试图制作一些图表来说明scikit-learn中RandomForestClassifier和ExtraTreeClassifier之间的区别。我想我可能已经弄明白但我不确定。以下是我的代码,用于拟合和绘制虹膜数据集:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.externals.six import StringIO 
from sklearn import tree
import pydot

iris = load_iris()

X = iris.data
y = iris.target

clf = tree.ExtraTreeClassifier()

clf = clf.fit(iris.data, iris.target)


dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
file_name = "et_iris.pdf"
graph.write_pdf(file_name) 

clf = tree.DecisionTreeClassifier()

clf = clf.fit(iris.data, iris.target)


dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
file_name = "rdf_iris.pdf"
graph.write_pdf(file_name) 

这产生的图表似乎是正确的,ET图比决策树图更加“粗糙”。

我是否认为DecisionTreeClassifier与RandomForestClassifier中的单个树相同,而ExtraTreeClassifier与ExtraTreeClassifier中的单个树相同?

有没有办法在实际的RDF或ET分类器中对所有树进行此操作?我尝试在森林中使用.estimators_但它们似乎没有导出方法。

Extra Tree Graph

RDF Graph

1 个答案:

答案 0 :(得分:1)

export_graphviz不是一种方法,它是一种功能。没有树“拥有”它。您可以将其与estimators_一起使用。 您ExtraTreeClassifier中的ExtraTreesClassifierDecisionTreeClassifier中的一棵树,而RandomForestClassifier中的RandomForestClassifier是一棵树,您是对的。但是,这并没有真正涵盖它,因为:

  • ExtraTreesClassifier为每棵树分别引导数据集,max_features=n_features不引导(默认情况下)。

  • {{1}}默认情况下为单树,即所有功能都可以在每次拆分中使用。