我正在尝试制作一些图表来说明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_,但它们似乎没有导出方法。

最佳答案

export_graphviz不是方法,而是函数。没有树木“拥有”它。您可以将其与estimators_一起使用。
您正确地认为ExtraTreeClassifierExtraTreesClassifier中是一棵树,而DecisionTreeClassifierRandomForestClassifier中是一棵树。但是,这并不能真正解决问题,因为:


RandomForestClassifier分别引导每个树的数据集,ExtraTreesClassifier不引导(默认情况下)。
默认情况下,max_features=n_features用于单个树,即所有功能都可以在每个拆分中使用。

10-08 07:56