AutoML 도구인 mljar-supervised 사용법을 정리해둡니다.
설치
pip 혹은 conda 설치 모두 지원합니다.
$ pip install mljar-supervised
$ conda install -c conda-forge mljar-supervised
Bash
복사
Quickstart
일반적인 scikit-learn api로 학습이 가능하다.
from supervised import AutoML
predictor = AutoML()
predictor.fit(train_X, train_y)
predictor.predict(val_y)
Python
복사
적절한 Mode를 선택하자
mljar-supervised의 AutoML은 아래와 같은 4개의 mode를 지원한다. AutoML(mode='Explain') 과 같이 사용하면 된다.
1.
Explain : Default 값이다.
2.
Compete
3.
Perform
4.
Optuna
Explain (default)
처음 데이터를 확인하고 분석할 때 적절하게 사용 가능하다. 특징은 아래와 같다.
•
75:25 train/test split 을 사용한다.
•
Baseline, Linear, Decision Tree, Random Forest, Xgboost, Neural Network 모델을 사용한다.
•
앙상블을 사용한다.
•
Report에 learning curve, importance plot, SHAP plot을 제공한다.
성능 예시
Breast cancer wisconsin 데이터셋으로 성능을 간단히 확인해 보니, 0.965 정도의 AUC를 얻는다.
import pandas as pd
import numpy as np
from supervised import AutoML
from sklearn import datasets
from sklearn.model_selection import KFold
from sklearn.metrics import roc_auc_score
data = datasets.load_breast_cancer()
df, label = data['data'], data['target']
kfold = KFold()
scores = []
for fold, (train_idx, val_idx) in enumerate(kfold.split(df), 1):
model = AutoML() # default mode는 Explain이다.
trainX, trainy = df[train_idx], label[train_idx]
valX, valy = df[val_idx], label[val_idx]
model.fit(trainX, trainy)
scores.append( roc_auc_score(valy, model.predict(valX)) )
np.mean(scores) # 0.9649343311836855
Python
복사
Compete (시간이 오래 걸리지만 성능이 좋다)
Machine learning competition에 적절하다. 특징은 아래와 같다.
•
데이터셋의 크기와 total_time_limit 파라미터에 따라서 validation strategy가 알아서 선택된다.
◦
80:20 train/test split / 5-fold CV / 10-fold CV 셋 중 하나를 사용
•
Linear, Decision Tree, Random Forest, Extra Trees, LightGBM, Xgboost, CatBoost
, Neural Network, Nearest Neighbors 모델을 사용
•
앙상블과 스태킹을 사용한다.
•
Report에 learning curve만 제공한다.
성능 예시
0.973의 AUC를 얻는다. 대신 학습 시간은 훨씬 더 오래 걸린다!
import pandas as pd
import numpy as np
from supervised import AutoML
from sklearn import datasets
from sklearn.model_selection import KFold
from sklearn.metrics import roc_auc_score
data = datasets.load_breast_cancer()
df, label = data['data'], data['target']
kfold = KFold()
scores = []
for fold, (train_idx, val_idx) in enumerate(kfold.split(df), 1):
model = AutoML(mode='Compete')
trainX, trainy = df[train_idx], label[train_idx]
valX, valy = df[val_idx], label[val_idx]
model.fit(trainX, trainy)
scores.append( roc_auc_score(valy, model.predict(valX)) )
np.mean(scores) # 0.9736778318754558
Python
복사
Perform
실생활에 사용되는 모델에 적절하다. 아래와 같은 특징을 가진다.
•
5-fold CV
•
Linear, RandomForest, LightGBM, Xgboost, CatBoost, Neural Network 모델을 사용한다.
•
앙상블을 사용한다.
•
Report에 learning curve와 importance plot을 제공한다.
Optuna
Resource가 충분하고, Performance 가 가장 중요할 때 적절하다. 특징은 아래와 같다.
•
10-fold CV
•
Random Forest, Extra Trees, LightGBM, Xgboost, CatBoost 모델을 사용한다.
•
Optuna를 사용해서 optuna_time_budget 초 만큼 tuning된다. 단, tuning 시에는 feature engineering 없이 기본 feature만 사용한다.
•
앙상블, 스태킹, advanced feature engineering을 사용한다.
•
Report에 learning curve만 제공한다.