2017-03-23 5 views
1

나는 sklearn.grid_search.GridSearchCV을 사용하여 아이리스 데이터 세트를 통해 의사 결정 트리 분류자를위한 최적의 기능을 얻으려고했다. 내 데이터가 바이어스 된 이후에 교차 검증을 위해 StratifiedKFold (sklearn.cross_validation.StratifiedKFold)를 사용했습니다. 그러나 GridSearchCV이 실행될 때마다 다른 매개 변수 집합이 반환되었습니다.
데이터와 교차 유효성 검사가 매번 동일하다는 가정하에 최적의 매개 변수 집합을 반환해야합니까?sklearn.grid_search.GridSearchCV가 모든 실행에서 무작위 결과를 반환하는 이유는 무엇입니까?

소스 코드는 다음과 같습니다

from sklearn.tree import DecisionTreeClassifier 
from sklearn.grid_search import GridSearchCV 

decision_tree_classifier = DecisionTreeClassifier() 

parameter_grid = {'max_depth': [1, 2, 3, 4, 5], 
        'max_features': [1, 2, 3, 4]} 

cross_validation = StratifiedKFold(all_classes, n_folds=10) 

grid_search = GridSearchCV(decision_tree_classifier, param_grid = parameter_grid, 
          cv = cross_validation) 

grid_search.fit(all_inputs, all_classes) 

print "Best Score: {}".format(grid_search.best_score_) 
print "Best params: {}".format(grid_search.best_params_) 

출력이 될 수 내가 랜달 S 올슨의 노트북을 참조하여, 최근에 만든 Ipython 노트북에서 발췌 한 것입니다

Best Score: 0.959731543624 
Best params: {'max_features': 2, 'max_depth': 2} 

Best Score: 0.973154362416 
Best params: {'max_features': 3, 'max_depth': 5} 

Best Score: 0.973154362416 
Best params: {'max_features': 2, 'max_depth': 5} 

Best Score: 0.959731543624 
Best params: {'max_features': 3, 'max_depth': 3} 

발견 된 here.

편집 : 아니고 다양한 결과를 초래 StratifiedKFoldrandom_state 매개 변수가 아니라 무작위로 트리를 초기화하고 다양한 결과를 (documentation 참조) 제공 DecisionTreeClassiferrandom_state 매개 변수입니다. StratifiedKFold의 경우 shuffle 매개 변수가 False (기본값)으로 설정된 경우 동일한 교육 테스트 분할이 생성됩니다 (설명서 참조).

답변

0

각 실행에 대해 cv는 열차와 유효성 집합을 무작위로 나눕니다. 따라서 각각의 결과는 다를 것입니다.

0

훈련 결과는 교차 유효성 검사에서 열차 데이터가 분할되는 방식에 따라 다릅니다. 실행할 때마다 데이터가 무작위로 나뉘어 지므로 응답에서 사소한 차이를 관찰하게됩니다. random_state parameter of StratifiedKFold을 사용하여 열차 데이터가 매번 똑같은 방식으로 분리되는지 확인해야합니다. 다양한 결과를 초래 StratifiedKFold``의

+0

그 아니라'random_state' 매개 변수 만의 오히려'random_state' 매개 변수 :

내 다른 대답은 randomstate에 대한 자세한 내용을 알고보기 'DecisionTreeClassifer'는 임의로 트리를 무작위로 초기화하고 다양한 결과를 제공합니다. 'StratifiedKFold'에 대해서'shuffle' 매개 변수가'False' (기본값)로 설정되어있는 한, 동일한 훈련 테스트 분할을 생성합니다. 이 결과를 [여기] (https://github.com/darthv115/Machine-Learning-and-Data-Science-Projects/blob/master/Iris_Classification/Rectifications_to_original_notebook.ipynb)에서 찾을 수있는 별도의 Ipython 노트에서 확인했습니다. – darthy