2017-01-05 4 views
1

Je ne sais pas si c'est la bonne question à poser ici, mais je vais demander de toute façon. Si ce n'est pas autorisé s'il vous plaît faites le moi savoir.en utilisant les meilleurs paramètres de gridsearchcv

J'ai utilisé GridSearchCV pour régler les paramètres afin de trouver la meilleure précision. Voilà ce que je l'ai fait:

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_) 

Cela me donne le résultat suivant:

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 

Maintenant, je veux utiliser ces paramètres tout en appelant une fonction qui permet de visualiser un arbre de décision

La fonction ressemble quelque chose comme ça

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()) 

Maintenant j'essaie d'utiliser le meilleur paramètre TERs fournies par GridSearchCV pour appeler la fonction de la manière suivante

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

Je reçois une erreur dans la première ligne de code qui dit

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

Y at-il une certaine façon, je peux gérer une certaine façon d'utiliser les meilleurs paramètres fourni par la recherche de grille et l'utiliser automatiquement? Plutôt que regarder le résultat et définir manuellement la valeur de chaque paramètre?

+0

Est-ce que python kwargs ne fonctionne pas comme 'DecisionTreeClassifier (** grid.best_params)'? Voir https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/ pour plus d'informations sur kwargs. –

+0

qui a fonctionné étonnamment. Vous pouvez l'écrire comme réponse et je peux l'accepter. Je suis nouveau à cette chose et ne savais pas beaucoup merci qui a beaucoup aidé – Cybercop

+0

ajouté comme réponse. Merci. –

Répondre