[ML/DL] 하이퍼파라미터를 찾는데 도움을 주는 Grid Search CV

하나·2022년 4월 3일
0

ML/DL

목록 보기
5/9
post-thumbnail

모델의 성능 개선 프로세스

모델의 성능을 개선하기 위해서는 만족할 만한 성능이 나올 때까지 학습, 검증 개선 작업을 반복해서 수행한다. 이를 튜닝이라고 한다.

개선 방법을 크게 두가지로 나눠보면 다음과 같다.
1. 구조적인 변경
- 하이퍼파라미터 : 모델을 구성하는 정보 중 데이터를 통해 학습할 수 없는 설정 정보, 모델의 검증 결과를 확인 하며 사람이 조정해줘야 한다. (예로는 의사결정나무의 최대 깊이, leaf node 의 개수, 딥러닝 모델의 구조 등이 있다.)

  1. 데이터의 전처리 방법 변경

GridSearchCV API 란

연구자들이 적절할 것 같은 하이퍼파라미터를 지정해주면 그걸 빠르게 검증해주는 API 이다.
최근 각광받는 비슷한 개념이 있는데 바로 AutoML 이다.

AutoML은 하이퍼파라미터 후보를 주지 않고 자동으로 하이퍼파라미터를 찾아준다는 점에서 GridSearchCV 와는 조금 다른 점을 가지고 있다.

GridSearchCV argument

  • estimator : 구현하고자 하는 모델
  • param_grid : 모델의 튜닝에 사용될 파라미터 정보, 딕셔너리
  • scoring : 검증 지표 (성능 평가 지표)
  • cv : Cross Validation 의 Fold 숫자
  • refit : 최적의 파라미터로 모델을 재 학습 시킬지 여부 (True/False)

# 하이퍼파라미터 튜닝을 을 위한 GridSearchCV 라이브러리 로딩
from sklearn.model_selection import GridSearchCV 

# 모델 구현을 위한 라이브러리 로딩
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier

# load_iris() 메서드를 이용하여 iris 데이터 셋 로드
iris = load_iris()

# 학습, 테스트 데이터셋 분리
x_train, x_test, y_train, y_test = train_test_split(iris.data, 
                                                    iris.target, 
                                                    test_size=0.2,
                                                    random_state=121)


# DecisionTreeClassifier 모델 객체 생성
dtree = DecisionTreeClassifier()

# 모델의 후보 파라미터 셋(param_grid)을 지정한 딕셔너리 객체 생성
parameters = {'max_depth':[1,2,3],
              'min_samples_split' : [2,3]}

# GridSearchCV 객체 생성
grid_dtree = GridSearchCV(estimator=dtree,
                          param_grid=parameters,
                          cv=3,
                          refit=True)

# GridSearchCV 객체의 fit() 메서드를 이용하여
# 후보 파라미터 셋의 성능 검증
grid_dtree.fit(x_train, y_train)

# 후보 파라미터 셋의 성능 검증 결과 출력
print('Optimal parameter:', grid_dtree.best_params_)
print('Max accuracy: {0:.4f}'.format(grid_dtree.best_score_))

# 최적의 파라미터 모델을 이용하여 예측값 생성
estimator = grid_dtree.best_estimator_
pred = estimator.predict(x_test)

# 최적의 파라미터 모델의 성능지표 출력
print('Test accuracy: {0:.4f}'.format(accuracy_score(y_test,pred))) 

참고 : https://www.codepresso.kr/lecture/181/350

0개의 댓글