我试图制作一些图表来说明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_,但它们似乎没有导出方法 .
1 回答
export_graphviz
不是方法,它是一个函数 . 没有树"has"它 . 您可以将它与estimators_
一起使用 . 你是对的ExtraTreeClassifier
是ExtraTreesClassifier
中的一棵树,DecisionTreeClassifier
是RandomForestClassifier
中的一棵树 . 但是,这并没有真正涵盖它,因为:RandomForestClassifier
为每棵树分别引导数据集,ExtraTreesClassifier
不引导(默认情况下) .默认情况下,对于单树,
max_features=n_features
,即所有要素都可以在每次拆分中使用 .