Coding Diary.

(Machine Learning) 하이퍼 파라미터(Hyperparameter) 그리드 서치 본문

Coding/Machine Learning

(Machine Learning) 하이퍼 파라미터(Hyperparameter) 그리드 서치

life-of-nomad 2023. 9. 22. 10:14
728x90
반응형

1. 하이퍼 파라미터 (Hyperparameter)

많은 머신 러닝 알고리즘은 학습을 하기 전에 미리 정해 주어야 하는 변수 또는 파라미터들이 있습니다. Losso회귀에 대해 생각해봅시다. Lasso는 L1 정규화를 해주는 회귀 모델 입니다. scikit-learn에서 Lasso 모델을 만들 때 alpha와 max_iter 라는 옵셔널 파라미터를 지정해 줬습니다.

model = Lasso(alpha=0.001, max_iter=1000)

alpha는 손실 함수의 정규화 항에 곱해지는 상수를 뜻하는데 보통은 그리스 문자 람다를 씁니다.

그리고 max_iter 는 경사 하강을 최대한 몇 번 할지를 정하는 값입니다. 이 두값은 모델이 직접 학습해서 배우는게 아니라 모델을 만드는 사람이 정해줘야 합니다.

 

이처럼 머신 러닝 모델을 학습시키기 전에 사람이 미리 정해줘야 되는 변수를 하이퍼 파라미터라고 합니다.

scikit-learn 에서는 보통 모델을 만들 때 옵셔널 파라미터로 정해주는 변수들입니다.

 

하이퍼 파라미터에 어떤 값을 넣느냐에 따라 모델의 성능에 큰 차이가 있을 수 있기 때문에 모델의 성능을 최대한 높여주는 하이퍼 파라미터를 고르는 게 굉장히 중요합니다. 좋은 하이퍼 파라미터를 고르는 방법 중 하나는 그리드서라는 방법입니다.

 

2. 그리드 서치 (Grid Search)

그리드 서치는 굉장히 직관적입니다. 우선 정해줘야 하는 각 하이퍼 파라미터에 넣어보고 싶은 후보 값을 몇 개씩 정합니다. 그리고 모든 후보 값의 조합으로 모델을 학습시켰을 때 성능이 가장 좋았떤 하이퍼 파라미터 조합을 고르는 것입니다.

 

계속 Lasso 회귀 모델을 예시로 보겠습니다. 우리는 이 모델의 성능을 최대한 높여주는 alpha의 max_iter 값을 찾아야 합니다. 우선 아래와 같은 표를 만들어 줍니다. 표의 행은 max_iter 에 넣어 볼 후보 값들, 그리고 열은 alpha에 넣어 볼 후보 값들로 채워줍니다.

 

이 표의 원소들을 해당 행과 열에 있는 하이퍼 파라미터 조합으로 모델을 학습시켰을 때의 성능으로 채워줍니다.

 

그리고 각 성능은 k-겹 교차 검증을 사용해서 조금 더 정확하고 공평하게 계산합니다. 성능을 모두 계산해서 아래와 같은 표가 완성되었다고 해봅시다.

여기서 성능이 가장 좋게 나오는 칸이 있습니다. (평균 제곱근 오차가 낮을 수록 성능이 좋습니다.) 그럼 이 행과 열에 해당하는 하이퍼 파라미터 값들을 선택하면 됩니다. 이런 식으로 표로 grid(격자 모양)를 만들고, 여기서 성능이 가장 좋은 하이퍼 파라미터를 찾는 방법이기 때문에 grid search 라고 부릅니다.

 

하이퍼 파라미터가 두 개 이상일때도 똑같습니다. 선택한 후보 값들의 모든 조합을 써서 학습을 시키고, 그 중 성능이 가장 좋게 나오는 하이퍼 파라미터 조합을 고르면 됩니다.

728x90
반응형