reference: https://pycaret.org/setup/
- from PyCaret Tutorial
reference: https://pycaret.readthedocs.io/en/latest/api/classification.html
- from PyCaret Docs
PyCaret은 파이썬에서 데이터를 준비하는 것부터 모델을 배포하는 과정까지의 머신러닝 라이브러리를 몇 분 안에 사용할 수 있게 해주는 오픈 소스입니다.
AutoML의 하나이기도 하고, 한때 캐글에서 정말 많이 보였던 AutoML이라고 알고 있습니다. (그때 무지성으로 굉장히 많이 사용했던.. 사실 뭐 지금도 다를건 없다 ;ㅅ;)
처음 PyCaret을 접했을 때 데이터 '배아' 수준이었어서 전체적인 흐름이 이해가 잘 안됐었다.
이해한 바로 설명해보자면
1. setup module을 사용해서 setup한다. 데이터를 지정해주고 preprocessing들을 적용하며, 내 실험의 이름 등을 설정할 수 있다. setup
2. 필요시 모델을 추가한다. - 있는 모델들을 확인 후 커스텀 모델을 추가하거나 모델의 튜닝을 할 수 있다. add_metric , create_models
3. 모델 학습 및 비교를 시행한다. compare_models()
4. 실험 로그를 찍어보고 다양한 분석을 시도
왜 이게 이해가 안됐는지 모르겠지만 한번 이해하고 나니 그럭저럭 쓸만했다.(,,,)
보통 항상 구글링을 하면 빠르게 코드를 보고 적용하고 싶었는데 없어서, 공부용이지만 하나 추가해본다.
from pycaret.classification import *
from sklearn.metrics import log_loss
exp = setup(data = train_data, target = 'target', experiment_name = 'exp1',
session_id = 97, train_size = 0.8)
# check in-built models
models()
# add eval metrics
add_metric('logloss', 'Log Loss', log_loss, greater_is_better = False)
# create new models
catboost = create_model('catboost')
xgboost = create_model('xgboost')
best5 = compare_models(n_select = 5)
Module | How to Import |
---|---|
Classification | from pycaret.classification import * |
Regression | from pycaret.regression import * |
Clustering | from pycaret.clustering import * |
Anomaly Detection | from pycaret.anomaly import * |
NLP | from pucaret.nlp import * |
ARM | from pucaret.arules import * |
from pycaret.classification import *
clf = setup(data = train_data, target = 'target')
위의 코드는 굉장히 러프하게 적은 것인데 말 그대로 데이터만 들고와서 타겟 칼럼만 설정해주고 돌리는 것.
from pycaret.classification import setup
동일하게 다음과 같이 사용하는 것도 가능하지만 어떤 게 되고 안되는지 아직 경험적으로 실감이 나지 않아서 코랩으로 돌릴 때는 그냥 import * 하기..
이제 여기서부터 PyCaret에서 제공하는 다양한 preprocessing 파라미터(?)들을 이용해볼 수 있다.
PyCaret Preprocessing : https://pycaret.org/preprocessing/
Categorical인지 Numeric인지 Date인지 알아서 판단해주고.. 엔터를 눌러주면
이렇게 해준다. 가볍게 Preprocess 파라미터들 중에서 Normalize만 적용했다.
참고로 session id
, experiment name
, log_experiment
, train_size
이런 것들도 가능하다..! (편리해...👍🏻)
간만에 썼다가 이걸 까먹어서 해맸음...
models()
check the model library to see all models
없으면 추가하기 ! ⬇️
모델을 추가할 수 있다.
사용가능한 모델들은 여기: https://pycaret.org/create-model/
lr = create_model('lr')
catboost = create_model('catboost')
추가적으로, fold, cross_validation, max_depth 등도 튜닝 가능하다!
Multiple lightgbm models Examples
lgbms = [create_model('lightgbm', learning_rate = i) for i in np.arange(0.1, 0.5)]
여기서부터가 이제 진짜 시작인데, 연산하기 시작하니까 시간이 굉장히 많이 걸린다.
데이터 컸을 때는 간단하게 돌렸는데도 몇십분씩 걸렸던 ,, ㅠㅠ
from pycaret.classification immport *
best = compare_models()
top5 = compare_models(n_select = 5)
기본적으로 Accuracy, AUC 등 다양한 metric에 대해서 리턴해주지만, 내가 리턴받고 싶은 metric이 존재할 때는,
best = compare_models(sort = 'AUC')
sort 순서를 정해줄 수 있음!
추가적으로, 추가하고 싶은, 혹은 빼고 싶은 모델도 선택할 수 있다. metric과 관련되어 쓰여지지 않는 모델 등의 이슈가 있을 때 사용했었다.
best_include = compare_models(include = ['catboost', 'xgboost'])
best_exclude = compare_models(exclude = ['catboost', 'svm'])
SVM 시간이 꽤 걸려서 많이 뺐었다,, ㅠ_ㅠ
자 그럼 이제 모델을 튜닝해보자
사용할 수 있는 Evaluation metrics(평가 지표)는 다음과 같다.
Classification : Accuracy, AUC, Recall, Precision, F1, Kappa, MCC
Regression : MAE, MSE, RMSE, R2, RMSLE, MAPE
기본적으로 대회에서 사용하는 것들은 다 들어있는 것 같다.
하지만 내가 eval metric을 추가해주고 싶다면 add_metric
을 사용해 줄 수 있다.
from pycaret.classification import *
from sklearn.metrics import log_loss
add_metric('logloss', 'Log Loss', log_loss, greater_is_better = False)
마찬가지로 다양한 파라미터를 제공하는데,
다음과 같다.
reference : https://pycaret.readthedocs.io/en/latest/api/classification.html
그 외에도 custom 모델을 만들 때 params 등을 설정하거나 할 수 있다.
Ensemble은 classification과 regression에서만 쓸 수 있다..!
배깅과 부스팅 두가지를 제공한다.
bagged = ensemble_model(dt, method = 'Bagging')
bossted = ensemble_model(dt, mothod = 'Boosting', n_estimators = 100)
dt = create_model('dt')
rf = create_mocdl('rf')
ada = create_model('ada')
blender_specific = blend_models(estimator_list = [dt, rf, ada], method = 'soft')
soft voting인지 hard voting인지도 선택할 수 있게 되어있는 것 같네요.ㅎㅎ
compare_models 해서 선택된 모델들을 블렌딩하려면,
blender_specific = blend_models(estimator_list = compare_models(n_select = 5), method = 'soft')
이런 코드를 사용해서 가능합니다. 저는 대회에서는 이렇게 많이 블렌딩해봅니다...
마지막으로 스태킹
stacker = stack_models(estimator_list = [xgboost, lgbm], meta_model = catboost)
앞서 compare_models() 한 모델들을 선택해서 stacking을 하고자 한다면,
top5 = compare_models(n_select = 5)
stacker = stack_models(estimator_list = top5[1:], meta_model.= top5[0])
이런 코드도 가능한 듯 보입니다.
여기까지가 모델을 훈련시키고 eval metrics에 따라 적절하게 모델을 선택하고 블렌딩하는 방법을 PyCaret tutorial로부터 가져와서 설명한 글이었습니다!
다음번엔 모델의 선택만큼 중요한 PyCaret에서 제공하는 Analysis 기법과 Deployment 기법들을 들고와볼게요.