Визуализация на дърво на решенията вътре в конвейер

Бих искал да визуализирам своето дърво на решения с export_graphviz, но продължавам да получавам следната грешка:


  File "C:\Users\User\AppData\Local\Continuum\anaconda3\envs\data_science\lib\site-packages\sklearn\utils\validation.py", line 951, in check_is_fitted
    raise NotFittedError(msg % {'name': type(estimator).__name__})

NotFittedError: This Pipeline instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.

Почти съм сигурен, че моят тръбопровод е монтиран, защото извиквам предсказване в моя код, който работи добре. Ето въпросния код:

from sklearn.tree import DecisionTreeRegressor
import pandas as pd
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.tree import export_graphviz

#Parameters for model building an reproducibility
state = 13

data_age.dropna(inplace=True)
X_age = data_age.iloc[:,0:77]
y_age =  data_age.iloc[:,77]

X = X_age
y = y_age

#split between testing and training set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state= state)

# Pipeline with the regressor
regressors = [DecisionTreeRegressor(random_state = state)]
for reg in regressors:
    steps=[('regressor', reg)]
    pipeline = Pipeline(steps) #seed that controls the random grid search

#Train the model

pipeline.set_params(regressor__max_depth = 5, regressor__min_samples_split =5, regressor__min_samples_leaf = 5).fit(X_train, y_train)
pred = pipeline.predict(X_test)
pipeline.score(X_test, y_test)

export_graphviz(pipeline, out_file='tree.dot')

Знам, че наистина не се нуждая от тръбопровода тук, но все пак бих искал да разбера какъв е проблемът за бъдеща справка и да мога да начертая дърво на решенията в тръбопровод, който е монтиран.


person thiR    schedule 12.08.2019    source източник


Отговори (2)


Така че, въз основа на отговора на Farseer, последният ред трябва да бъде:


#Train the model
pipeline.set_params(regressor__max_depth = 5, regressor__min_samples_split =5, regressor__min_samples_leaf = 5).fit(X_train, y_train)
pred = pipeline.predict(X_test)
pipeline.score(X_test, y_test)

#export as a .dot file
export_graphviz(regressors[0], out_file='tree.dot')

И сега работи.

person thiR    schedule 12.08.2019

Подписът на export_graphviz е export_graphviz(decision_tree, ...), както може да се види в документация.

Така че трябва да предадете дървото на решенията си като аргумент на функцията export_graphviz, а не на вашия тръбопровод.

Можете също да видите в изходен код, че export_grpahviz извиква check_is_fitted(decision_tree, 'tree_') метод.

person Farseer    schedule 12.08.2019