PyCaret Tutorial, Docs와 함께 간단하게 읽어보기: Import부터 Model Blening까지

0

Machine-Learning

목록 보기
1/4
reference: https://pycaret.org/setup/
	- from PyCaret Tutorial
    
reference: https://pycaret.readthedocs.io/en/latest/api/classification.html
	- from PyCaret Docs
    

PyCaret

PyCaret은 파이썬에서 데이터를 준비하는 것부터 모델을 배포하는 과정까지의 머신러닝 라이브러리를 몇 분 안에 사용할 수 있게 해주는 오픈 소스입니다.

AutoML의 하나이기도 하고, 한때 캐글에서 정말 많이 보였던 AutoML이라고 알고 있습니다. (그때 무지성으로 굉장히 많이 사용했던.. 사실 뭐 지금도 다를건 없다 ;ㅅ;)


INTRO

처음 PyCaret을 접했을 때 데이터 '배아' 수준이었어서 전체적인 흐름이 이해가 잘 안됐었다.
이해한 바로 설명해보자면
1. setup module을 사용해서 setup한다. 데이터를 지정해주고 preprocessing들을 적용하며, 내 실험의 이름 등을 설정할 수 있다. setup
2. 필요시 모델을 추가한다. - 있는 모델들을 확인 후 커스텀 모델을 추가하거나 모델의 튜닝을 할 수 있다. add_metric , create_models
3. 모델 학습 및 비교를 시행한다. compare_models()
4. 실험 로그를 찍어보고 다양한 분석을 시도

왜 이게 이해가 안됐는지 모르겠지만 한번 이해하고 나니 그럭저럭 쓸만했다.(,,,)


Summary

빠르게 적용하기

보통 항상 구글링을 하면 빠르게 코드를 보고 적용하고 싶었는데 없어서, 공부용이지만 하나 추가해본다.


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)

Setting

Importing a Module

ModuleHow to Import
Classificationfrom pycaret.classification import *
Regressionfrom pycaret.regression import *
Clusteringfrom pycaret.clustering import *
Anomaly Detectionfrom pycaret.anomaly import *
NLPfrom pucaret.nlp import *
ARMfrom 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 이런 것들도 가능하다..! (편리해...👍🏻)


Model Training

model 확인하기

간만에 썼다가 이걸 까먹어서 해맸음...

models()

check the model library to see all models

없으면 추가하기 ! ⬇️

create_model

모델을 추가할 수 있다.

사용가능한 모델들은 여기: 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)]

compare_models

여기서부터가 이제 진짜 시작인데, 연산하기 시작하니까 시간이 굉장히 많이 걸린다.
데이터 컸을 때는 간단하게 돌렸는데도 몇십분씩 걸렸던 ,, ㅠㅠ

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 시간이 꽤 걸려서 많이 뺐었다,, ㅠ_ㅠ


Model Tuning

자 그럼 이제 모델을 튜닝해보자

사용할 수 있는 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 등을 설정하거나 할 수 있다.

Model Ensembling

Ensemble Models


Ensemble은 classification과 regression에서만 쓸 수 있다..!

배깅과 부스팅 두가지를 제공한다.

bagged = ensemble_model(dt, method = 'Bagging')
bossted = ensemble_model(dt, mothod = 'Boosting', n_estimators = 100)

Blend Models


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')

이런 코드를 사용해서 가능합니다. 저는 대회에서는 이렇게 많이 블렌딩해봅니다...

Stack Models

마지막으로 스태킹

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 기법들을 들고와볼게요.

profile
분명히 처음엔 데린이었는데,, 이제 개린이인가..

0개의 댓글