1. Introduction
PyCaret is an open-source, low-code machine learning library in Python that automates machine learning workflows.
- PyCaret Official
PyCaret은 복잡한 머신러닝 파이프라인을 짧은 코드만으로 자동화시켜주는 오픈소스 라이브러리이다.
일반적인 머신러닝 학습 파이프라인은 다음과 같이 진행된다.
머신러닝 파이프라인
1. 데이터 전처리
2. 다양한 모델들을 학습
3. 각 모델에 대하여 hyperparameter tuning
4. 앙상블 모델을 생성
5. 테스트 데이터에 대하여 최종 모델을 평가
PyCaret을 사용하면 이 모든 과정을 10줄 이내의 코드로 수행할 수 있다.
편의성을 극대화시킨 만큼 상당히 많은 parameter들이 숨겨진 상태로 동작하기 때문에 본인이 원하는 바를 정확히 구현하기 위해선 documentation을 꼼꼼히 살펴볼 필요가 있다.
2. Installation
상당히 많은 머신러닝 패키지들에 대해 종속성을 가지고 있는데다, GPU를 사용한다고 하면 호환성을 맞추기가 더욱 어려워진다.
새로운 환경을 만들고 Installation - PyCaret Official을 참고하여 직접 설치하거나, GPU(cuML) 호환성까지 확인이 완료된 필자의 docker image를 받아 사용하는 것을 추천한다.
$ docker pull djyoon0223/base:caret
3. Fast Tutorial
먼저 regression 문제를 해결하는 간략한 코드를 보면서 시작하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from sklearn.model_selection import train_test_split
from pycaret.regression import setup, compare_models, tune_model, blend_models, evaluate_model, automl, predict_model
# 1) Define problem
train_full_data, test_data = train_test_split(data) # data: pandas.DataFrame
numerical_features = ['X1', 'X2']
nominal_features = ['X3', 'X4']
ordinal_features = {'X5' : ['low', 'medium', 'high'], 'X6': ['freshman', 'sophomore', 'junior', 'senior']}.
target = 'Y'
# 2) Setup PyCaret session
s = setup(train_full_data, target,
numeric_features=numeric_features,
categorical_features=nominal_features,
ordinal_features=ordinal_features,
use_gpu=True)
# 3) Compare models
base_models = compare_models(n_select=5, sort='MAE') # MAE 기준 상위 5개 모델을 선택
# 4) Hyperparameter tuning
tuned_models = [tune_model(model, optimize='MAE', choose_better=True, return_train_score=True) for model in base_models]
# 5) Ensemble models
ensemble_model = blend_models(tuned_models, choose_better=True, optimize='MAE', return_train_score=True) # voting(average)
# 6) Select final model
final_model = automl(optimize='MAE', return_train_score=True) # 생성한 모델들 중 최적의 모델을 선택
# 7) Evaluate model
evaluate_model(final_model) # 다양한 평가지표들과 시각자료들을 통해 모델을 평가
# 8) Predict
preds = predict_model(final_model, data=test_data) # 'Label' column으로 예측값을 추가
PREVIOUSEtc