let us not love with words or tongue but actions and truth.

IT/파이썬

GridSearchCV 2탄 (for문 활용)

sarah0518 2021. 2. 18. 22:04

지난번과 동일한 GridSearchCV이지만 약간은 다른 방식으로 진행해보려고 합니다.

 

 

sarah0518.tistory.com/50?category=984180

 

GridSearchCV 그리드서치 1탄

모델별로 best성능을 만들어 줄수있는 hyper parameter값을 찾아야 될 경우가 있을텐데요. 그때 유용하게 사용되는 Grid Search CV에 대해서 알아보도록 할게요. 우선 각 모델별로 가장 기본적인 모델을

sarah0518.tistory.com

 

 

 

지난번 내용을 잠깐 복습해보면, GridSearchCV를 통해 best_estimator_를 출력 하는 것으로 끝났습니다.

 

오늘은 GridSearchCV가 어떤 과정을 거쳐 best estimator를 도출하는지

그 과정을 살펴보는 코드를 짜려고 합니다.

 

 

 

1
2
scores = ['precision''recall']
tuned_param_ocsvm = [{'gamma':[0.1110,2050,100],'nu':[0.0010.010.10.05]}]
cs

 

혹시 시작부터 지난번과 뭐가 다른지 알아내셨을까요??

 

 

 

 

 

바로 score를 어떤 metric기준으로 할 것인가입니다.

 

 

 

[1탄 GirdSearchCV]

1
model_selection.GridSearchCV(estimator = xg, param_grid = xg_param, scoring = 'recall', cv = 10 )
cs

 

보시면 위와같이 간단한 GridSearchCV는 scoring기준을 recall로만 합니다.

 

하지만, 만약 다양한 score기준으로 best estimator를 뽑고 싶다면

 

 

For문을 통해서 GridsearchCV를 진행하셔야 합니다.

 

1
2
3
4
5
6
for score in scores:
    clf_svm = GridSearchCV(SVC( max_iter=1000, kernel = 'rbf'), 
                           tuned_param_svm, cv=5, scoring='%s_macro' % score)
    clf_svm.fit(train130_scaled, train130y)
    means = clf_svm.cv_results_['mean_test_score']
    stds = clf_svm.cv_results_['std_test_score']
cs

 

위의 코드를 보시면 scoring값에 scores로 미리 선언한 

scores = ['precision''recall'] 이 값들이 순차적으로 반영이 됩니다.

 

 

 

결과 역시 어떤 과정을 거쳐서 best parameter를 도출했는지 확인하고 싶다면

아래 코드로 확인하시면 됩니다.

 

1
2
3
for mean, std, params in zip(means, stds, clf_svm.cv_results_['params']):
       print("%0.3f (+/-%0.03f) for %r"% (mean, std * 2, params))
print(clf_svm.best_params_)
cs

 

그렇다면 아래와 같이 과정을 보여주고, 

가장 마지막 줄에 best parameter값을 한번 더 출력 해 줍니다.

{'gamma': 10, 'nu': 0.001}

 

[output]

0.500 (+/-0.000) for {'gamma': 1e-05, 'nu': 0.001}
0.500 (+/-0.000) for {'gamma': 1e-05, 'nu': 0.01}
0.507 (+/-0.124) for {'gamma': 1e-05, 'nu': 0.02}
0.471 (+/-0.084) for {'gamma': 1e-05, 'nu': 0.025}
0.500 (+/-0.000) for {'gamma': 0.0001, 'nu': 0.001}
0.500 (+/-0.000) for {'gamma': 0.0001, 'nu': 0.01}
0.507 (+/-0.124) for {'gamma': 0.0001, 'nu': 0.02}
0.493 (+/-0.073) for {'gamma': 0.0001, 'nu': 0.025}
0.500 (+/-0.000) for {'gamma': 0.001, 'nu': 0.001}
0.500 (+/-0.000) for {'gamma': 0.001, 'nu': 0.01}
....
0.506 (+/-0.105) for {'gamma': 1, 'nu': 0.02}
0.506 (+/-0.105) for {'gamma': 1, 'nu': 0.025}
0.618 (+/-0.168) for {'gamma': 10, 'nu': 0.001}
0.591 (+/-0.093) for {'gamma': 10, 'nu': 0.01}
0.575 (+/-0.100) for {'gamma': 10, 'nu': 0.02}
0.575 (+/-0.100) for {'gamma': 10, 'nu': 0.025}
0.486 (+/-0.133) for {'gamma': 100, 'nu': 0.001}
0.506 (+/-0.087) for {'gamma': 100, 'nu': 0.01}
0.494 (+/-0.131) for {'gamma': 100, 'nu': 0.02}
0.494 (+/-0.075) for {'gamma': 100, 'nu': 0.025}
{'gamma': 10, 'nu': 0.001}