используя лучшие параметры из gridsearchcv

Не знаю, уместно ли здесь задавать вопрос, но все же спрошу. Если это не разрешено, пожалуйста, дайте мне знать.

Я использовал GridSearchCV для настройки параметров, чтобы добиться максимальной точности. Вот что я сделал:

from sklearn.grid_search import GridSearchCV
parameters = {'min_samples_split':np.arange(2, 80), 'max_depth': np.arange(2,10), 'criterion':['gini', 'entropy']}
clfr = DecisionTreeClassifier()
grid = GridSearchCV(clfr, parameters,scoring='accuracy', cv=8)
grid.fit(X_train,y_train)
print('The parameters combination that would give best accuracy is : ')
print(grid.best_params_)
print('The best accuracy achieved after parameter tuning via grid search is : ', grid.best_score_)

Это дает мне следующий результат:

The parameters combination that would give best accuracy is : 
{'max_depth': 5, 'criterion': 'entropy', 'min_samples_split': 2}
The best accuracy achieved after parameter tuning via grid search is :  0.8147086914995224

Теперь я хочу использовать эти параметры при вызове функции, визуализирующей дерево решений.

Функция выглядит примерно так

def visualize_decision_tree(decision_tree, feature, target):
    dot_data = export_graphviz(decision_tree, out_file=None, 
                         feature_names=feature,  
                         class_names=target,  
                         filled=True, rounded=True,  
                         special_characters=True)  
    graph = pydotplus.graph_from_dot_data(dot_data)  
    return Image(graph.create_png())

Прямо сейчас я пытаюсь использовать лучшие параметры, предоставленные GridSearchCV, для вызова функции следующим образом.

dtBestScore = DecisionTreeClassifier(parameters = grid.best_params_)
dtBestScore = dtBestScore.fit(X=dfWithTrainFeatures, y= dfWithTestFeature)
visualize_decision_tree(dtBestScore, list(dfCopy.columns.delete(0).values), 'survived')

Я получаю ошибку в первой строке кода, которая говорит

TypeError: __init__() got an unexpected keyword argument 'parameters'

Можно ли каким-то образом использовать лучшие параметры, предоставляемые поиском по сетке, и использовать их автоматически? Вместо того, чтобы смотреть результат и вручную устанавливать значение каждого параметра?


person Cybercop    schedule 05.01.2017    source источник
comment
Разве python kwargs не работает как DecisionTreeClassifier(**grid.best_params)? См. pythontips.com/2013/08/04/. args-and-kwargs-in-python-explained, чтобы узнать больше о kwargs.   -  person Oliver Dain    schedule 05.01.2017
comment
это сработало потрясающе. Вы можете написать это как ответ, и я могу принять его. Я новичок в этом деле и многого не знал, спасибо, очень помогло   -  person Cybercop    schedule 05.01.2017
comment
добавлено в качестве ответа. Спасибо.   -  person Oliver Dain    schedule 05.01.2017


Ответы (1)


Попробуйте python kwargs:

DecisionTreeClassifier(**grid.best_params)

См. http://pythontips.com/2013/08/04/args-and-kwargs-in-python-explain‌​d, чтобы узнать больше о kwargs.

person Oliver Dain    schedule 05.01.2017
comment
Как лучше всего это сделать, если вы оптимизировали конвейер? Префикс ключей с pipestep__ кажется вредным для сопоставления аргументов? ?) - person stats-hb; 11.06.2019
comment
param_dict = {x.replace(pipelinestep__, ): v вместо x, v в param_dict.items()} - person T. Shiftlet; 26.05.2020