지난번과 동일한 GridSearchCV이지만 약간은 다른 방식으로 진행해보려고 합니다.
sarah0518.tistory.com/50?category=984180
지난번 내용을 잠깐 복습해보면, GridSearchCV를 통해 best_estimator_를 출력 하는 것으로 끝났습니다.
오늘은 GridSearchCV가 어떤 과정을 거쳐 best estimator를 도출하는지
그 과정을 살펴보는 코드를 짜려고 합니다.
1
2
|
scores = ['precision', 'recall']
tuned_param_ocsvm = [{'gamma':[0.1, 1, 10,20, 50,100],'nu':[0.001, 0.01, 0.1, 0.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}
'IT > 파이썬' 카테고리의 다른 글
Isolation Forest와 One-Class SVM (0) | 2021.02.23 |
---|---|
[그래프] 3D 그래프 그리기 (0) | 2021.02.19 |
[그래프] pivot_table을 활용한 heatmap 그래프 그리기 (0) | 2021.02.09 |
Stack과 melt로 데이터 Transpose하기 (0) | 2021.02.06 |
[그래프] Bar 그래프 그리기 (0) | 2021.02.02 |