여전히 DACON문제를 풀면서 AutoML을 찾아보던 중 매우 유용한 라이브러리를 찾게 되었습니다.
https://dacon.io/competitions/official/235736/codeshare/2870
글에서 처음 autoML을 알게 되었고 더 다양한 기능이 있어 한번 소개하고자합니다.
1. 다양한 머신러닝 모델 구현
해당 데이콘 코드 공유에서는 LGBM을 사용해서 AutoML을 사용했는데, sklearn에서 지원하는 모델과 XGboost, Catboost까지도 마찬가지로 AutoML을 통해 최적화하여 사용할 수 있습니다.
또한, AutoML 모델을 사용할 수 있는데요. 이의 소스코드를 확인하면 아래 코드 처럼 되어있습니다.
from automl-alex import AutoMLRegressor, LGBMRegressor
automl = AutoMLRegressor(metrics=)
automl.fit(X,Y,
verbose=3,
folds=12,
opt_lvl=3,
early_stoping=120,
auto_parameters=False,
timeout=1100
)
self.model_1 = automl_alex.CatBoost(
type_of_estimator=self._type_of_estimator,
random_state=self._random_state,
gpu=self._gpu,
# verbose=verbose,
)
self.model_1 = self.model_1.fit(
X_tmp, y, cat_features=self._cat_cat_features.tolist()
)
...
self.model_2 = automl_alex.BestSingleModel(
models_names=[
# "LinearModel",
"LightGBM",
# "ExtraTrees",
# "RandomForest",
# "MLP",
],
**params,
)
timeout_model_2 = (timeout) - (time.time() - start_step_0) - 120
history = self.model_2.opt(
X=X,
y=y,
timeout=timeout_model_2,
verbose=verbose,
fit_end=False,
)
catboost는 최적화하지 않고 바로 사용했고, lgbm은 최적화하여 사용하는 것(**params 클래스를 선언할 때 주입했습니다.)을 볼 수 있습니다.
predict를 하게되면 아래코드처럼 Catboost값 * 0.4 + LGBM값 * 0.6으로 계산해주는 모델이죠
predicts = (self.predict_model_1 * 0.4) + (self.predict_model_2 * 0.6)
굳이 AutoML모델을 안써도 단일 모델을 사용해도 좋으니 각자 적절한 모델을 선택하는 것이 중요할 것 으로 생각됩니다.
2. 모델 내의 속성에 대한 설명
저는 metric, auto_parameters, timeout, folds, opt_lvl, early_stoping, verbose를 사용했는데요. 여기서 독특한 속성들이 있습니다.
저는 auto_parameter와 opt_lvl이 두 속성에 대해 자세히 알아봤습니다.
모든 하이퍼파라미터를 조정하기엔 너무 오랜시간이 걸릴 수 있기 때문에 opt_lvl를 정하게 되는데요. 모델마다 opt_lvl에 따른 튜닝 정도를 선택할 수 있습니다. 저는 3으로 정했습니다.
auto_parameter는 위에 속성들을 자동을 설정해주는 기능인데요. timeout시간에 적절한 otp_lvl, fold, earlystop값을 설정해주는데요.... 값을 보면 굉장히 값이 낮게 설정 되어있어서 False로 처리해주시는 것이 좋을 것 같습니다. (default값이 True입니다.)
'ML | DL' 카테고리의 다른 글
RandomForest, XGBoost, LGBM, CatBoost뭐가 다를까? (1) | 2021.06.09 |
---|---|
ALS 추천시스템(Implicit 라이브러리) (0) | 2021.06.01 |
신용카드 사용자 연체 예측 AI 경진대회 (0) | 2021.05.27 |
프로그래머스 Dev-Matching 머신러닝 개발자 - 아직 공부가 부족하다 (0) | 2021.05.25 |
댓글