2015-04-09 2 views
1

Я пытаюсь сделать несколько графиков, которые иллюстрируют разницу между RandomForestClassifier и ExtraTreeClassifier в scikit-learn. Думаю, я мог бы это понять, но я не уверен. Вот мой код, чтобы соответствовать и графику РОГ набор данных с обеими:График scikit-learn ExtraTreeClassifier и RandomForestClassifier

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

export_graphviz не является методом, она является функцией. Ни один из деревьев не имеет этого. Вы можете использовать его с estimators_. Вы прямо сейчас ExtraTreeClassifier являетесь единственным деревом в ExtraTreesClassifier и DecisionTreeClassifier являетесь единственным деревом в RandomForestClassifier. Однако, что на самом деле не покрывает, потому что:

  • RandomForestClassifier бутстрап к данным, установленные отдельно для каждого дерева, ExtraTreesClassifier не самонастройки (по умолчанию).

  • max_features=n_features для одиночных деревьев по умолчанию, то есть все функции могут использоваться в каждом разрезе.

+0

Так что, если я сам создам образец начальной загрузки для DecisionTreeClassifier и передаю подмножество функций, это будет эквивалент. – denson

+0

Подвыборку глобальных возможностей не эквивалентно. Но вы можете установить max_features на дереве: http://scikit-learn.org/dev/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier (они выбираются отдельно для каждого разбиения) –

+0

Спасибо. .. Я получаю то, что я хотел, это сравнение того, как разные деревья «смотрят». – denson

Смежные вопросы