소소한 컴퓨터 이야기

그리드서치와 랜덤서치

by Cori

개요

그리드서치와 랜덤서치가 무엇인지 알아보고, 어떻게 활용하는지 살펴본다.

 

내용 정리

1. 그리드서치

0) 정의

-> 모델의 성능을 가장 높게 하는 최적의 하이퍼파라미터를 찾는 방법으로, 하이퍼파라미터 후보들을 하나씩 입력해 모델의 성능이 가장 좋게 만드는 값을 찾는다.

 

1) 함수

sklearn.model_selection.GridSearchCV

-> 시도해볼 하이퍼파라미터들을 지정하면 모든 조합에 대해 교차검증 후 제일 좋은 성능을 내는 하이퍼파라미터 조합을 찾아준다.

 

· fit(X, y): 학습

· predict(X): 분류-추론한 class, 회귀-추론한 값

· predict_proba(X): 분류문제에서 class별 확률을 반환 

 

· cv_results_: 파라미터 조합별 평가 결과를 Dictionary로 반환 

· best_params_: 가장 좋은 성능을 낸 parameter 조합을 반환

· best_estimator_: 가장 좋은 성능을 낸 모델 반환 

· best_score_: 가장 좋은 점수 반환 

더보기

· estimator: 모델객체 지정

· params: 하이퍼파라미터 목록을 dictionary로 전달 (파라미터명: [파라미터 값 list] 형식)

· scoring: 평가 지표 

   · 평가 지표를 생략할 시 분류: accuarcy, 회귀: R^2를 기본 평가지표로 설정 

   · 평가 지표가 여러 개일 경우, list로 묶어서 지정한다.

· refit: best paramter를 정할 때 사용하는 평가지표로, scoring에 여러 개의 평가지표를 설정한 경우 refit을 반드시 설정해야 한다.

· cv: 교차검증 시 fold 개수 

· n_jobs: 사용할 CPU 코어 개수 (None: 1(기본값), -1: 모든 코어 다 사용)

 

* 시도할 하이퍼파리미터와 값들이 너무 많아지면 많은 시간이 소모됨 

ex) 1번 파라미터: 10개, 2번 파라미터: 5개, 3번 파라미터: 5개, 4번 파라미터: 10개 => 10 * 5 * 5 * 10 = 2500개 조합 

 

2) 활용

· 데이터셋 로드 및 Train / Test Set 나누기

· DecisionTree GridSearch 생성

· 학습

· 결과 확인

필요 정보만 조회해보자 (score)

가장 좋은 평가점수와 파라미터 조합도 확인할 수 있다. 

· best model을 이용해 test set 최종 평가

grid search의 best_estimator를 이용하면 best parameter로 학습한 모델을 반환한다. 

best model을 이용한 평가 결과

* gridsearch를 생성할 때 scoring에 다음과 같이 전달해주면 여러 성능지표를 확인할 수 있다.

다만 이렇게 gridsearch를 생성하였을 경우에는, refit을 통해 best parameter를 선택할 평가지표를 설정해야 한다.

 

2. 랜덤서치

0) 정의

-> GridSearch와 동일한 방식으로 사용하지만, 모든 조합을 다 시도하지 않고 각 반복마다 임의의 값을 대입해 지정한 횟수만큼만 평가

 

1) 함수

sklearn.model_selection.RandomizedSearchCV

· estimator: 모델객체 지정 

· param_distributions: 하이퍼파라미터 목록을 dictionary로 전달 ('파라미터명': [파라미터 값 list] 형식)

· n_iter: 파라미터 검색 횟수

· scoring: 평가 지표

· refit: best parameter를 정할 때 사용하는 평가지표로, scoring에 여러 평가지표를 설정한 경우 설정한다.

· cv: 교차검증 시 fold 개수 

· n_jobs: 사용할 CPU 코어 개수 (None: 1 (기본값), -1: 모든 코어 다 사용) 

 

· fit(X, y): 학습

· predict(X): 분류-추론한 class, 회귀-추론한 값을 반환한다. (제일 좋은 성능을 낸 모델)

· predict_proba(X): 분류 문제에서 class별 확률을 반환한다. (제일 좋은 성능을 낸 모델)

 

* 다음은 결과를 조회할 때 사용하는 속성 값들로, 모델을 fit()한 후에 호출할 수 있다.

더보기

· cv_results_: 파라미터 조합 별 평가 결과를 Dictionary로 반환

· best_params_: 가장 좋은 성능을 낸 parameter 조합을 반환 

· best_estimators_: 가장 좋은 성능을 낸 모델 반환

· best_score_: 가장 좋은 점수를 반환

 

2) 활용

· 데이터셋 로드 및 Train / Test Set 나누기

· DecisionTree RandomSearch 생성

생성 시 보통 cv는 4~5를 많이 주며 (75%~80%), n_iter_search 값은 60번 정도 수행할 경우 잘 나온다.

 

· 모델 학습

· 결과 확인

가장 좋은 점수 & 파라미터 조회

· best model을 이용해 test set 최종 평가

random search의 best_estimator를 이용하면 best parameter로 학습한 모델을 반환한다.

'AI > Machine Learning' 카테고리의 다른 글

앙상블 Voting  (0) 2021.12.01
불균형 클래스 분류 다루기  (0) 2021.11.28
과적합과 일반화  (0) 2021.11.26
수치형 데이터 전처리  (0) 2021.11.25
One-Hot Encoding  (0) 2021.11.24

블로그의 정보

코딩하는 오리

Cori

활동하기