Попытка распечатать дерево решений для леса из ансамбля scikit-learn

Я пытаюсь распечатать дерево решений для леса из ансамбля scikit-learn: например, для DecisionTreeClassifier я бы использовал:

from sklearn import tree  
clf = tree.DecisionTreeClassifier( criterion ='entropy', max_depth = 3,    
min_samples_leaf = 
clf = clf.fit( X_train, y_train) #Input this to analyze the training set.

import pydot, StringIO
dot_data = StringIO.StringIO() 
tree.export_graphviz( clf, out_file = dot_data,    
feature_names =[' age', 'sex', 'first_class', 'second_class', 'third_class'])
graph = pydot.graph_from_dot_data( dot_data.getvalue())
graph.write_png('visualtree.png') 
from IPython.core.display import Image
Image( filename =visualtree.png')

Я пробовал аналогичный подход для Random Forest Regressor (см. Ниже и получил ошибку)

# Fit regression model
from sklearn.ensemble import RandomForestRegressor
rfr_1 = RandomForestRegressor(n_estimators=10, max_depth=5)
rfr_1.fit(X, y)

from sklearn.ensemble import*
import pydot, StringIO
dot_data = StringIO.StringIO() 
ensemble.export_graphviz( rf1, out_file = dot_data,    
feature_names =[' Temperature', 'Translator Bacteria'])
graph = pydot.graph_from_dot_data( dot_data.getvalue())
graph.write_png('fish.png') 
from IPython.core.display import Image

Изображение (filename = 'fish.png')

Файл randomforestregressor.py, строка 45, в ensemble.export_graphviz (rf1, out_file = dot_data,
NameError: имя 'ensemble' не определено

Как бы я этого добился? Благодарность!


person Chris Rigano    schedule 30.12.2013    source источник


Ответы (1)


Сообщение об ошибке довольно явное:

File "randomforestregressor.py", line 45, in ensemble.export_graphviz( rf1, out_file = dot_data, NameError: name 'ensemble' is not defined

Вы обращаетесь к переменной с именем ensemble в строке 45 вашего скрипта, но никогда не определяете такую ​​переменную. В вашем случае вы, вероятно, хотели, чтобы эта переменная указывала на пакет sklearn.ensemble:

from sklearn import ensemble

Однако, если вы сделаете это, вы, скорее всего, получите AttributeError, поскольку пакет sklearn.ensemble не имеет функции export_graphviz.

Вместо этого вы, возможно, захотите сгенерировать одно изображение для каждого дерева в лесу, перебирая элементы списка rfr_1.estimators_ и вызывая метод export_graphviz пакета sklearn.tree для каждого из этих деревьев.

Однако на практике отображение деревьев леса очень часто бесполезно. Практики обычно строят случайные леса из сотен или тысяч деревьев, чтобы получить хорошую точность прогнозов. В таких случаях визуальный осмотр многих деревьев нецелесообразен.

person ogrisel    schedule 30.12.2013
comment
Хорошо сказал Огризель! Взяв еще один такт, скажем, я хочу попытаться проиллюстрировать решение в дискретный момент времени, например, цену на 5-местные автомобили среднего размера в январе 2014 года, как мне отобразить такой ответ, используя случайные леса? Спасибо Крис - person Chris Rigano; 30.12.2013
comment
Я понятия не имею, о чем вы говорите, но это, вероятно, не связано ни с исходным вопросом, ни с этим ответом, поэтому, вероятно, его следует задавать в отдельном вопросе, а не в комментариях к этому ответу. - person ogrisel; 30.12.2013
comment
Пожалуйста, удалите этот вопрос - person Chris Rigano; 30.12.2013