ML 프로젝트를 진행할때, 가장 많은 시간이 소요되는 스텝을 꼽아본다면, 아래 과정들을 떠올릴 수 있다.
1) 데이터 전처리
2) 최적의 성능을 담보할 수 있는 model Architecture를 테스트하고 확정하는 과정
* AutoML이 많은 사용자들에게 관심받기 시작한 것도, 바로 이러한 과정을 자동화해야할 필요가 있었기때문이다.
<* AutoML이란>
...현실의 머신러닝 모델링은 문제 정의 과정에서부터 데이터 수집, 전처리, 모델 학습 및 평가를 거쳐 서비스 적용에 이르기까지에는 여러 분야 전문가들의 많은 시간과 노력이 요구된다. AutoML은 머신러닝을 적용 할 때 마다 이러한 과정을 되풀이하면서 발생하는 비효율적인 작업을 최대한 자동화하여 생산성과 효율을 높이기 위하여 등장하였습니다. 특히, 데이터 전처리 과정에서부터 알고리즘 선택 및 튜닝까지의 과정에서 모델 개발자의 개입을 최소화 하여 품질 좋은 모델을 효과적으로 개발할 수 있는 기술로 AutoML 기술을 머신러닝 모델 개발시에 손쉽게 적용할 수 있는 package toolkit들이 연구 개발되어 오고 있다 ...
Reference
https://medium.com/daria-blog/automl-%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-1af227af2075
오늘은 대표적인 AutoML 라이브러리중 가장 최근에 제공된 AutoGluon을 사용하여,
간결한 코드를 통해, Tabular Dataset에 대한 여러 모델들의 Base performance를 확인하는 튜토리얼을 진행해보자.
AutoGluon?
AutoGluon은 원시 데이터를 기반으로 머신러닝 모델을 신속하게 생성하고 배포할 수 있도록 설계된 자동화된 머신러닝(automated machine learning, AutoML) 도구이다.
AutoGluon 테이블 데이터, 이미지, 텍스트 및 시계열 데이터에 대한 예측을 지원하며(Python 3.6 이상 지원),
사용자는 복잡한 기능 엔지니어링이나 데이터 전처리 없이도 빠르게 모델을 생성하고 평가할 수 있고,
지정된 시간 내에 최적의 모델을 자동으로 선택할 수 있는 기능을 제공한다.
AutoGluon는 대표적으로 아래 기능들을 제공하고 있다.
1) 전처리 없이 바로 학습 진행 가능
2) 최신 모델까지 반영된 종합 모델 학습 API를 'Task'별로 제공하여 사용자가 간단한 코드만으로 복수의 모델을 학습할 수 있다.
- autogluon.tabular.TabularPredictor : Tabular Dataset에 대한 예측 API
- autogluon.multimodal.MultiModalPredictor : MultiModal 예측 API
- autogluon.timeseries.TimeSeriesPredictor : 시계열 데이터셋 예측 API
- ... 테이블, 텍스트, 이미지 등 다양한 유형에 대한 학습 API 제공
3) 학습이 완료된 후 각 모델별로 train set과 test set에 대한 running time, accuracy등의 정보를 비교확인 할 수 있다.
4) AWS의 QuickSight를 연동할 경우 분석결과를 시각적으로 표현할 수 있다.
5) 학습이 중단된 경우에도 다시 학습을 재개할 수 있는 기능 제공
6) GPU 학습 지원 (* install 참조)
# CPU install
pip install -U pip
pip install -U setuptools wheel
CPU version of pytorch has smaller footprint - see installation instructions in
pytorch documentation - https://pytorch.org/get-started/locally/
pip install torch==2.0.1+cpu torchvision==0.15.2+cpu --index-url https://download.pytorch.org/whl/cpu
pip install autogluon
# GPU install
pip install -U pip
pip install -U setuptools wheel
Install the proper version of PyTorch following https://pytorch.org/get-started/locally/
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install autogluon
좀 더 자세한 내용은 아래 AutoGluon 공식 문서를 통해 확인할 수 있다.
* https://auto.gluon.ai/stable/install.html
Tutorial
1. 설치
pip install autogluon
2. 데이터 준비
테스트를 위해 아래와 같은 간단한 데이터를 준비했다.
별도로 label encoding, scaling 작업은 진행하지 않았다.
3. 학습 진행
# Import
import pandas as pd
from autogluon.tabular import TabularDataset, TabularPredictor
from sklearn.model_selection import train_test_split
# Dataset setting
whole_df = whole_df.sample(frac=1).reset_index(drop=True) # shuffle
train_size_ = int(.6 * whole_df.shape[0])
train_dfs = whole_df.iloc[:train_size_, :]
test_dfs = whole_df.iloc[train_size_:, :]
train = TabularDataset(train_dfs)
test = TabularDataset(test_dfs)
# Train
predictor = TabularPredictor(label='label', eval_metric='f1_macro').fit(train, time_limit=3600)
위와 같이 Train, Test dataset을 셋팅하는 부분과 학습코드 단 1줄로 학습 준비가 완료된다.
해당 Task는 Tabular Dataset이므로, autogluon.tabular.TabularPredictor API를 통해 학습을 진행하였다.
[Parameter]
'label'
: 학습할 데이터셋에서 target column을 정의
'eval_metric'
: loss function을 정의하며, 사용자가 직접 정의하지 않을 경우, 적절한 loss func을 내부에서 자동 설정한다.
'time_limit'
: 전체 모델을 학습할때 한계 학습시간을 설정한다. 단일 모델에 대한 Limit가 아니고, 전체 학습시간에 대한 limit이다. 만약 time_limit를 초과할 경우, 현재 학습된 모델에서 학습을 멈추며, 학습된 모델 중 Best model을 선택한다.
학습데이터가 클 경우, 불과 몇개 모델만 학습될 수 있으며, 이를 방지하기 위해서는 time_limit를 크게 설정하거나, 데이터셋의 크기를 줄이는 방법이 있다.
[OUTPUT]
-> 출력된 결과를 보면, 데이터셋의 정보와 함께 Task가 binary classificatioin 이라는 점도 자동으로 인식한다.
-> 차례대로 모델들을 학습하고 있으며, 나의 경우 현재 LightGBM에 대해서 importError가 발생해서, 패스한것을 확인할 수 있다.(버전문제인것같다..)
4. 각 모델의 평가 결과 확인
학습이 끝난 후 leaderboard 매서드를 통해 손쉽게 각 모델별 성능과 running time정보를 확인할 수 있다.
5. AutoGluon 사용 후기
오늘은 간단한 classification task를 autogluon을 통해서 진행해보았다.
다양한 모델에 대해서 각각의 학습코드를 짜고 성능을 확인할 필요가 없고,
결과를 손쉽게 정리해볼 수 있다는점에서 매우 유용한 라이브러리로 보여진다.
다만, 워낙 많은 모델들을 학습하다보니, 아무래도 시간이 매우 오래걸리는 문제가 있어, 대용량데이터에 대해서 학습평가를 진행하것이 쉽지는 않아보인다. (물론 GPU로 진행하면 다를 수 도 있겠다. 이건 추후에 테스트해보도록 하고...)
따라서 진행할 프로젝트에 대해 각 모델들의 base performance를 빠르게 확인하고 prototype의 진행여부를 판단할 수 있는 좋은 라이브러리로 앞으로 활용할 기회가 많지 않을까 생각된다.
'DEVELOP_NOTE > ML' 카테고리의 다른 글
[Norm] L2 Norm? L1 Norm? 이제 제대로 알고 사용하자! (0) | 2024.01.19 |
---|---|
[Imbalance Data] 불균형데이터를 극복하고 모델을 학습하는 방법 (0) | 2024.01.17 |
[Pytorch Profiler]파이토치 프로파일러를 통해 모델 성능 모니터링하기! (2) | 2024.01.10 |
컨텐츠 기반 추천 vs 협업 필터링 (0) | 2023.06.26 |
[Real-time Instance Segmentation] 화상대화 배경제거 (1) (0) | 2023.01.09 |