• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

HyperoptEstimator 관련 질문

21.08.11 00:47 작성 조회수 182

0

안녕하세요.
HyperoptEstimator 관련해서 질문이 있습니다.
베이지안 최적화에 기반한 HyperoptEstimator으로 알고 있습니다.
우선, 제가 HyperoptEstimator에 대해서 관심을 가지게 된 것은 기존엔 그리드 탐색을 통해서 공부했지만, HyperoptEstimator이 좀 더
효율적이라는 얘기를 듣게 되면서 좀 알아보고 싶다는 마음이 생기게되었습니다.
우선, 첫번째 질문입니다.
아래와 같은 코드로 만약 모델을 학습하고, 수행한다면 사이킷런에 있는 모든 분류, 회귀 모델들을 통해서 일일이 다 모델 성능을 평가하며,
가장 최적화 모델 및 하이퍼 파라미터를 찾는다고 보면 될까요?
from hpsklearn import HyperoptEstimator
# Load Data
from sklearn.datasets import load_iris, load_linnerud, load_diabetes
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target)
# Crate the estimator object
estim = HyperoptEstimator()
estim.fit(X_train, y_train)
prediction = estim.predict(X_test)
score = estim.score(y_test, prediction)
model = estim.best_model
두번째 질문입니다.
만약, 제가 첫번째 질문을 통해서 드린 질문이 맞다면?
결국 HyperoptEstimator도 어느 특정 범위에 하이퍼 파라미터 범위 및 모델을 명시적으로 지정해줄 경우, 그 틀안에서 최적의 하이퍼 파라미터를 찾는다는 점에서 그리드 탐색과 별다른 차이점이 없는 건 아닌지,
그리드 탐색에 비해서 좀 더 좋은 장점은 어떤 것인지? 너무 궁금해서 늦은 시간 글을 남기게 되었습니다.
관련해서 아직 인터넷에 자료도 부족하고 해서, 이렇게 글을 남겼는데 꼭 답변부탁드리겠습니다..ㅎ
감사합니다

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

1, 2번 질문을 통합해서 답변 드리겠습니다. 

저도 HyperOptEstimator는 사용해보지 않았지만, HyperOptEstimator와 같은 베이지안 최적화 기법에 기반한 여러 open source 패키지들이 있습니다. 

이러한 베이지안 최적화 기법 패키지들은 주로 Grid Search의 문제점을 해결하기 위해 나왔습니다. 

Grid Search의 경우 여러가지 hyper parameter 들을 사용자가 설정해주는데, 문제는 설정 범위가 넓거나 hyper parameter의 개수가 많을 경우 최적 hyper parameter를 찾는데 너무 오랜 시간이 걸린다는 것입니다. 

특히 XGBOOST나 LightGBM같이 hyper parameter가 많은 경우에는 Grid Search를 적용해서 최적 hyper parameter를 찾기가 굉장히 오랜 시간이 걸려서 적용이 어렵습니다. 

반면에 베이지안 최적화 기법은 이러한 문제를 동적으로 하이퍼 파라미터의 범위를 좁혀가면서 찾기 때문에 보다 짧은 시간에 최적의 하이퍼 파라미터를 찾아 줄 수 있습니다. 

회귀나 다른 알고리즘의 경우 하이퍼 파라미터가 많지 않아서 Grid Search로도 충분할 수 있지만, xgboost, lightgbm같은 경우는 베이지안 최적화 기법을 이용하여 하이퍼 파라미터 최적화를 적용하는게 더 좋습니다. 

감사합니다.