[Python] pycaret을 사용하여 모델 선정하기

먕먕·2022년 2월 15일

오늘은 여러 모델을 한번에 학습하여 비교해주는 라이브러리인 pycaret에 대해 알아보도록 하겠습니다.
pycaret을 활용하면 여러 모델의 성능 비교 뿐만아니라 하이퍼파라미터 tunning, 여러 모델을 blending한 모델을 만들 수 있습니다.
pycaret Binary Classification tutorial을 참고하였습니다.

pycaret 설치

우선은 pycaret을 설치합니다.

!pip install pycaret

모델 비교시 catboost가 없다면 다음과 같이 설치를 해줘야합니다.

!pip install pycaret[full]

데이터 로드

데이터는 pycaret에서 제공하는 'credit' 데이터를 사용하였습니다.
해당 데이터를 불러와줍니다.

from pycaret.datasets import get_data
dataset = get_data('credit')

train/test 데이터로 데이터를 분리해줍니다.

train = dataset.sample(frac=0.95, random_state=786)
test = dataset.drop(train.index)
train.reset_index(inplace=True, drop=True)
test.reset_index(inplace=True, drop=True)

데이터 설정

pycaret을 사용하기 전에 pycaret에 맞게 데이터를 설정해줘야합니다.
set_up() 함수를 사용하며, 기본적으로 data와 target을 입력해줍니다.
입력 후 column에 대한 자료형이 출력되며 enter를 치면 data가 설정됩니다.

from pycaret.classification import *

exp_clf = setup(data = train, target = 'default', session_id=123)

set_up(): pycaret을 사용하기 위한 data setting

  • session_id: random_state와 같은 개념으로 같은 결과가 나올 수 있게 seed를 고정합니다.
  • data: train 데이터를 입력합니다.
  • target = target 변수 이름을 입력합니다.

data 설정값이 다음과 같이 출력됩니다.

모델 비교

여러 모델을 적합하여 성능을 비교하는 단계입니다.

best_model = compare_models()

총 14개 모델의 적합 결과가 다음과 같이 출력됩니다.

compare_models(): 다양한 모델 적합 후 성능 비교

  • fold: cross_validation의 fold를 지정 (default = 10)
  • sort: 정렬기준 지표 설정
  • n_select: 상위 n개의 모델 결과만 출력

모델 적합

앞에서는 다양한 모델의 적합 결과를 확인하였는데, 이번에는 하나의 모델의 적합 결과를 보는 방법입니다.

rf = create_model('rf')

create_model(): 하나의 모델 적합

  • fold: cross_validation의 fold 지정 (default = 10)

Tunning

tune_model() 함수를 사용해서 모델의 하이퍼파라미터 튜닝을 진행합니다.

tuned_rf = tune_model(rf)


tuned_rf를 호출하면 튜닝 결과를 확인할 수 있습니다.

tune_model(model): 모델의 하이퍼파라미터 튜닝

  • optimize: 평가 metric 지정

Blending

blend_models() 함수를 사용하면 여러 모델들을 혼합하여 새로운 모델을 생성합니다.
모델을 하나씩 생성해서 blend해도 되고 compare_model을 사용하여 생성한 모델을 사용해서 blend할 수 있습니다.

# 방법 1
dt = create_model('dt')
rf = create_model('rf')

blender_2 = blend_models(estimator_list = [dt, rf])

# 방법 2
best_model_5 = compare_models(n_select=5)
blender_5 = blend_models(best_model_5)

blend_models(models): 여러 모델들을 혼합한 새로운 모델을 생성

예측

finalize_model() 함수로 모델을 설정하면, cross_validation을 사용하여 적합한 모델을 전체 데이터로 마지막으로 학습을 합니다. 마지막 모델을 설정한 후에 predict_model()을 통해 예측을 합니다.

final_model = finalize_model(blender_5)
prediction = predict_model(final_model, data = test)

예측 결과는 'Label'변수에 다음과 같이 저장됩니다.

finalize_model(): 최종 모델로 설정 후 마지막 학습 진행
predict_model(): 예측 결과를 'Label' 변수에 저장

profile
22년 3월부터 본격적으로 블로그 정리 시작합니다! (준비중)

1개의 댓글

comment-user-thumbnail
2022년 6월 8일

setup을 colab에서 돌리는데 속도가 너무 느립니다.

답글 달기