🐫

Pycaretの使い方

2022/05/05に公開

pycaretおおまかな操作方法について。 (必要そうな部分のみのメモ)

インストール

pipでインストール conda でもインストール出来るらしいがエラーが出ることが多いらしい。

pip install pycaret

データの準備

さまざまなオープンデータが用意されている(全部で55のデータセットが利用可能) get_dataでデータを取得できる (get_data("index")一覧を取得可能)

# データを取得する
from pycaret.datasets import get_data
all_datasets = get_data('index')
all_datasets.head()
Dataset Data Types Default Task Target Variable 1 Target Variable 2 # Instances # Attributes Missing Values
0 anomaly Multivariate Anomaly Detection None None 1000 10 N
1 france Multivariate Association Rule Mining InvoiceNo Description 8557 8 N
2 germany Multivariate Association Rule Mining InvoiceNo Description 9495 8 N
3 bank Multivariate Classification (Binary) deposit None 45211 17 N
4 blood Multivariate Classification (Binary) Class None 748 5 N
# データセットを抜きだす
diabetes = get_data('diabetes')
Number of times pregnant Plasma glucose concentration a 2 hours in an oral glucose tolerance test Diastolic blood pressure (mm Hg) Triceps skin fold thickness (mm) 2-Hour serum insulin (mu U/ml) Body mass index (weight in kg/(height in m)^2) Diabetes pedigree function Age (years) Class variable
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1

パイプラインの初期化

setupでPyCaretを初期化し、関数内で渡されたデータ・目的変数、その他すべてのパラメータを基に、pipelineを作成する。 setupを実行するとそれぞれの変数の型が自動で判定され、確認を求められる。(回帰 or 分類問題かも判定されるみたい)

setupのパラメータ

  • train_size:学習データの比率
  • silent:Trueとすると変数の型の確認をスキップできる。

また、setupの中で色々前処理が実行できる。(前処理については省略) 以下の三つの前処理はデフォルト設定で実行されるようになっている。

  • 欠損値処理(Missing Value Imputation)
  • カテゴリ変数の(One-Hot Encoding)
  • 訓練・テストデータ分割(Train-Test Split)

setupの設定や、処理後のデータはget_configで出力できる。 (確認できる項目については後述)

from pycaret.classification import *
clf = setup(data=diabetes, target = 'Class variable')
# clf = setup(data=diabetes, target = 'Class variable', silent=True)

# パラメータやデータの確認
# トレーニンングデータの確認
get_config('X_train')
Description Value
0 session_id 7899
1 Target Class variable
2 Target Type Binary
3 Label Encoded None
4 Original Data (768, 9)
5 Missing Values False
6 Numeric Features 7
7 Categorical Features 1
8 Ordinal Features False
9 High Cardinality Features False
10 High Cardinality Method None
11 Transformed Train Set (537, 22)
12 Transformed Test Set (231, 22)
13 Shuffle Train-Test True
14 Stratify Train-Test False
15 Fold Generator StratifiedKFold
16 Fold Number 10
17 CPU Jobs -1
18 Use GPU False
19 Log Experiment False
20 Experiment Name clf-default-name
21 USI 5dda
22 Imputation Type simple
23 Iterative Imputation Iteration None
24 Numeric Imputer mean
25 Iterative Imputation Numeric Model None
26 Categorical Imputer constant
27 Iterative Imputation Categorical Model None
28 Unknown Categoricals Handling least_frequent
29 Normalize False
30 Normalize Method None
31 Transformation False
32 Transformation Method None
33 PCA False
34 PCA Method None
35 PCA Components None
36 Ignore Low Variance False
37 Combine Rare Levels False
38 Rare Level Threshold None
39 Numeric Binning False
40 Remove Outliers False
41 Outliers Threshold None
42 Remove Multicollinearity False
43 Multicollinearity Threshold None
44 Remove Perfect Collinearity True
45 Clustering False
46 Clustering Iteration None
47 Polynomial Features False
48 Polynomial Degree None
49 Trignometry Features False
50 Polynomial Threshold None
51 Group Features False
52 Feature Selection False
53 Feature Selection Method classic
54 Features Selection Threshold None
55 Feature Interaction False
56 Feature Ratio False
57 Interaction Threshold None
58 Fix Imbalance False
59 Fix Imbalance Method SMOTE

モデルの比較

compare_modelsを実行すると、モデルライブラリで利用可能な全ての推定量をクロスバリデーションにより学習し、その性能を評価する。 返り値は最も予測精度の高かった予測モデル(表の一番上のモデル)

使用できるモデル(回帰)

Name Reference Turbo
ID
--- --- --- ---
lr Linear Regression sklearn.linear_model._base.LinearRegression True
lasso Lasso Regression sklearn.linear_model._coordinate_descent.Lasso True
ridge Ridge Regression sklearn.linear_model._ridge.Ridge True
en Elastic Net sklearn.linear_model._coordinate_descent.Elast... True
lar Least Angle Regression sklearn.linear_model._least_angle.Lars True
llar Lasso Least Angle Regression sklearn.linear_model._least_angle.LassoLars True
omp Orthogonal Matching Pursuit sklearn.linear_model._omp.OrthogonalMatchingPu... True
br Bayesian Ridge sklearn.linear_model._bayes.BayesianRidge True
ard Automatic Relevance Determination sklearn.linear_model._bayes.ARDRegression False
par Passive Aggressive Regressor sklearn.linear_model._passive_aggressive.Passi... True
ransac Random Sample Consensus sklearn.linear_model._ransac.RANSACRegressor False
tr TheilSen Regressor sklearn.linear_model._theil_sen.TheilSenRegressor False
huber Huber Regressor sklearn.linear_model._huber.HuberRegressor True
kr Kernel Ridge sklearn.kernel_ridge.KernelRidge False
svm Support Vector Regression sklearn.svm._classes.SVR False
knn K Neighbors Regressor sklearn.neighbors._regression.KNeighborsRegressor True
dt Decision Tree Regressor sklearn.tree._classes.DecisionTreeRegressor True
rf Random Forest Regressor sklearn.ensemble._forest.RandomForestRegressor True
et Extra Trees Regressor sklearn.ensemble._forest.ExtraTreesRegressor True
ada AdaBoost Regressor sklearn.ensemble._weight_boosting.AdaBoostRegr... True
gbr Gradient Boosting Regressor sklearn.ensemble._gb.GradientBoostingRegressor True
mlp MLP Regressor sklearn.neural_network._multilayer_perceptron.... False
xgboost Extreme Gradient Boosting xgboost.sklearn.XGBRegressor True
lightgbm Light Gradient Boosting Machine lightgbm.sklearn.LGBMRegressor True
dummy Dummy Regressor sklearn.dummy.DummyRegressor True

使用できるモデル(分類)

Name Reference Turbo
ID
--- --- --- ---
lr Logistic Regression sklearn.linear_model._logistic.LogisticRegression True
knn K Neighbors Classifier sklearn.neighbors._classification.KNeighborsCl... True
nb Naive Bayes sklearn.naive_bayes.GaussianNB True
dt Decision Tree Classifier sklearn.tree._classes.DecisionTreeClassifier True
svm SVM - Linear Kernel sklearn.linear_model._stochastic_gradient.SGDC... True
rbfsvm SVM - Radial Kernel sklearn.svm._classes.SVC False
gpc Gaussian Process Classifier sklearn.gaussian_process._gpc.GaussianProcessC... False
mlp MLP Classifier sklearn.neural_network._multilayer_perceptron.... False
ridge Ridge Classifier sklearn.linear_model._ridge.RidgeClassifier True
rf Random Forest Classifier sklearn.ensemble._forest.RandomForestClassifier True
qda Quadratic Discriminant Analysis sklearn.discriminant_analysis.QuadraticDiscrim... True
ada Ada Boost Classifier sklearn.ensemble._weight_boosting.AdaBoostClas... True
gbc Gradient Boosting Classifier sklearn.ensemble._gb.GradientBoostingClassifier True
lda Linear Discriminant Analysis sklearn.discriminant_analysis.LinearDiscrimina... True
et Extra Trees Classifier sklearn.ensemble._forest.ExtraTreesClassifier True
xgboost Extreme Gradient Boosting xgboost.sklearn.XGBClassifier True
lightgbm Light Gradient Boosting Machine lightgbm.sklearn.LGBMClassifier True
dummy Dummy Classifier sklearn.dummy.DummyClassifier True

compare_modelsのパラメータ

  • sort:表の並び替えに(評価指標に応じたランク付)に使用する評価指標(default:accuracy or R2)
  • include:特定のモデルを指定
  • exclude:使用しないモデルを指定
  • fold:クロスバリデーションでの分割数(デフォルト:10)
  • cross_validation:クロスバリデーションを実行しない場合にはFalseにする(単にhold-out法を実行したい場合など)。精度はテストセットで評価される(おそらく)*

*If you don't want to evaluate models using cross-validation and rather just train them and see the metrics on the test/hold-out set you can set the cross_validation=False.

また、使用できるモデルはmodels()で確認可能。

# 予測精度指標にしたがってソートされた結果が表示される
best = compare_models()

# クロスバリデーションの分割数指定
best = compare_models(fold=5)

# ソートに使う指標は変更可能
best = compare_models(sort = 'F1')

# 特定のモデルを使用したい時
best = compare_models(include = ['lr', 'dt', 'lightgbm'])

# 特定のモデルを使用したくない時
best = compare_models(exclude = ['lr', 'dt', 'lightgbm'])

# 複数のモデルを取得したい時
best = compare_models(n_select = 3)

# クロスバリデーションを実行しない
best = compare_models(cross_validation = False)

# 使えるモデルの確認
models()
Model Accuracy AUC Recall Prec. F1 Kappa MCC TT (Sec)
lr Logistic Regression 0.7580 0.8119 0.5937 0.7153 0.6404 0.4613 0.4719 0.2060
ridge Ridge Classifier 0.7506 0.0000 0.5679 0.7113 0.6216 0.4404 0.4528 0.0110
lda Linear Discriminant Analysis 0.7487 0.8043 0.5629 0.7097 0.6181 0.4358 0.4484 0.0130
rf Random Forest Classifier 0.7486 0.8214 0.5684 0.7043 0.6216 0.4379 0.4483 0.1930
gbc Gradient Boosting Classifier 0.7394 0.8139 0.6037 0.6792 0.6313 0.4315 0.4394 0.1180
et Extra Trees Classifier 0.7394 0.7962 0.5279 0.7024 0.5961 0.4103 0.4236 0.2180
ada Ada Boost Classifier 0.7392 0.7998 0.6026 0.6858 0.6267 0.4295 0.4416 0.1010
xgboost Extreme Gradient Boosting 0.7245 0.7757 0.5882 0.6489 0.6072 0.3978 0.4056 0.1070
lightgbm Light Gradient Boosting Machine 0.7188 0.7885 0.5829 0.6349 0.6030 0.3866 0.3907 0.0320
knn K Neighbors Classifier 0.7171 0.7450 0.5218 0.6396 0.5691 0.3637 0.3701 0.0190
dt Decision Tree Classifier 0.7058 0.6866 0.6145 0.6035 0.6005 0.3701 0.3766 0.0150
nb Naive Bayes 0.6687 0.7278 0.3403 0.6021 0.4263 0.2184 0.2405 0.0160
dummy Dummy Classifier 0.6332 0.5000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0270
qda Quadratic Discriminant Analysis 0.5871 0.5999 0.4432 0.5186 0.3979 0.1190 0.1467 0.0160
svm SVM - Linear Kernel 0.5829 0.0000 0.4037 0.5593 0.3346 0.0960 0.1407 0.0140

モデルの作成

create_modelでクロスバリデーションを用いて,与えられた推定値の学習と性能の評価を行う。 この関数の出力は,foldごとのクロスバリデーションの結果が出力される。

create_modelのパラメータ

  • fold:クロスバリデーションでの分割数(デフォルト:10)
  • cross_validation:クロスバリデーションを実行しない場合にはFalseにする(単にhold-out法を実行したい場合など)
    精度はテストセットで評価される(おそらく)*
  • probability_threshold:分類の閾値の設定
  • その他、各モデルのハイパーパラメータを指定可能

*If you don't want to evaluate models using cross-validation and rather just train them and see the metrics on the test/hold-out set you can set the cross_validation=False.When you disable cross_validation, the model is only trained one time, on the entire training dataset and scored using the test/hold-out set.

# ロジスティック回帰でモデルの学習と性能評価を実行してみる。
lr = create_model('lr')

# クロスバリデーションの分割数を指定可能
lr = create_model('lr',fold = 5)

# クロスバリデーションを行わない場合
lr = create_model('lr', cross_validation = False)

# 閾値を調整する。
lr = create_model('lr', probability_threshold = 0.25)

# ハイパーパラメータを設定することも可能
dt = create_model('dt', max_depth = 5)

# 検証の結果は`pull`で呼び出し可能
dt_results = pull()
Fold MAE MSE RMSE R2 RMSLE MAPE
0 0.3033 0.2128 0.4613 0.1382 0.3148 0.5095
1 0.2835 0.2019 0.4493 -0.1043 0.3188 0.2924
2 0.2757 0.1930 0.4394 0.1051 0.3068 0.4553
3 0.2837 0.1739 0.4171 0.2541 0.2869 0.3960
4 0.2453 0.1543 0.3928 0.3608 0.2703 0.4003
5 0.2936 0.1873 0.4328 0.1015 0.3068 0.4681
6 0.3696 0.2594 0.5094 -0.1126 0.3568 0.5166
7 0.2719 0.1429 0.3780 0.3221 0.2703 0.3842
8 0.3058 0.1945 0.4410 0.1870 0.3027 0.4351
9 0.3534 0.2438 0.4938 -0.0043 0.3389 0.4978
Mean 0.2986 0.1964 0.4415 0.1248 0.3073 0.4355
Std 0.0356 0.0343 0.0386 0.1555 0.0261 0.0658

return_train_scoreをTrueにすると、クロスバリデーションにおける訓練データの予測精度も出力できる。これを観察することでオーバーフィット/アンダーフィットの具合を調べることも可能

rf = create_model('rf', fold=5, return_train_score=True)
Split Fold MAE MSE RMSE R2 RMSLE MAPE
CV-Train 0 0.1181 0.0242 0.1557 0.8940 0.1107 0.1739
1 0.1205 0.0245 0.1566 0.8904 0.1130 0.1762
2 0.1187 0.0248 0.1574 0.8934 0.1141 0.1634
3 0.1139 0.0236 0.1535 0.8952 0.1115 0.1622
4 0.1218 0.0245 0.1564 0.8935 0.1136 0.1675
CV-Val 0 0.3037 0.1542 0.3927 0.3151 0.2750 0.4770
1 0.3169 0.1607 0.4009 0.3344 0.2765 0.4152
2 0.3287 0.1736 0.4166 0.1564 0.3006 0.4448
3 0.3482 0.2074 0.4554 0.1303 0.3133 0.5231
4 0.2906 0.1434 0.3787 0.3484 0.2696 0.3880
CV-Train Mean 0.1186 0.0243 0.1559 0.8933 0.1126 0.1686
Std 0.0027 0.0004 0.0013 0.0016 0.0013 0.0056
CV-Val Mean 0.3176 0.1679 0.4089 0.2569 0.2870 0.4496
Std 0.0199 0.0220 0.0263 0.0937 0.0170 0.0472
Train nan 0.1174 0.0239 0.1547 0.8950 0.1126 0.1633

モデルのチューニング

tune_model()を使ってモデルのハイパーパラメータを調整する。(デフォルトはscikit-learnのRandomizedSearchCV) この関数の出力は、クロスバリデーションにおける各Foldでの評価指標。最適なモデルは optimizeパラメータで定義された指標に基づいて選択される。

tune_modelのパラメータ

  • n_iter:ハイパーパラメータチューニングでのiteration(反復)の回数(default:10)
  • custom_grid:(グリッドサーチでの)探索範囲を指定する場合に使用
  • search_library:RandomizedSearchCV以外のアルゴリズムを指定。
  • return_tuner:Trueにするとtuner objectの中身を確認できる
  • choose_better:Trueにするとデフォルトのハイパーパラメータも含めて最も性能の高いモデルを返す。
boston = get_data('boston') 
from pycaret.regression import * 
reg = setup(data = boston, target = 'medv',silent=True)

dt = create_model('dt')

# tune model
tuned_dt = tune_model(dt)

# iteration数の変更(デフォルトは10)
tuned_dt = tune_model(dt, n_iter = 100)

# グリッドサーチの探索範囲を指定する
params = {"max_depth": np.random.randint(1, (len(boston.columns)*.85),20),
          "max_features": np.random.randint(1, len(boston.columns),20),
          "min_samples_leaf": [2,3,4,5,6]}
tuned_dt = tune_model(dt, custom_grid = params)

# tune model optuna
tuned_dt = tune_model(dt, search_library = 'optuna')
tuned_dt = model(dt, search_library = 'scikit-optimize')
tuned_dt = tune_model(dt, search_library = 'tune-sklearn', search_algorithm = 'hyperopt')

# チューニングの中身の確認(tunerに格納される)
tuned_model, tuner = tune_model(dt, return_tuner=True)

# デフォルトの設定も含めて、最も良いモデルを選択する。
tuned_dt = tune_model(dt, choose_better = True)

その他(チューニング)

Optimize_threshold

学習済みモデルの確率閾値を最適化する。

This function optimizes the probability threshold for a trained model.

calibrate_model

この関数は,等張回帰またはロジスティック回帰を用いて,与えられたモデルの確率を較正する。

This function calibrates the probability of a given model using isotonic or logistic regression.

from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable', silent=True)
dt = create_model('dt')

# Optimize_threshold
optimized_dt = optimize_threshold(dt)

# calibrate model
calibrated_dt = calibrate_model(dt)

結果の可視化

plot_model

plot_modelで、さまざまな方法での予測結果の可視化ができる。

可視化できるグラフ一覧(回帰)

Plot Name Plot
Residuals Plot ‘residuals’
Prediction Error Plot ‘error’
Cooks Distance Plot ‘cooks’
Recursive Feature Selection ‘rfe’
Learning Curve ‘learning’
Validation Curve ‘vc’
Manifold Learning ‘manifold’
Feature Importance (top 10) ‘feature’
Feature Importance (all) 'feature_all'
Model Hyperparameter ‘parameter’

可視化できるグラフ一覧(分類)

Plot name Plot
Area Under the Curve ‘auc’
Discrimination Threshold ‘threshold’
Precision Recall Curve ‘pr’
Confusion Matrix ‘confusion_matrix’
Class Prediction Error ‘error’
Classification Report ‘class_report’
Decision Boundary ‘boundary’
Recursive Feature Selection ‘rfe’
Learning Curve ‘learning’
Manifold Learning ‘manifold’
Calibration Curve ‘calibration’
Validation Curve ‘vc’
Dimension Learning ‘dimension’
Feature Importance (Top 10) ‘feature’
Feature IImportance (all) 'feature_all'
Model Hyperparameter ‘parameter’
Lift Curve 'lift'
Gain Curve 'gain'
KS Statistic Plot 'ks'

plot_modelのパラメータ

  • scale:グラフのサイズ
  • save:Trueとするとグラフを保存する。
  • use_train_data:Trueとするとトレーニングデータでの検証結果を出力する。
  • plot_kwargs:Yellowbrickで許容される任意の引数(PyCaretはプロット作業のほとんどに Yellowbrickを使用しているため、Yellowbrickのビジュアライザで許容される任意の引数は plot_kwargs パラメータとして渡すことができる)

また、evaluate_model()を使用すると、plot_modelのグラフをまとめて出力することが出来る

clf1 = setup(data = diabetes, target = 'Class variable',silent=True)
lr = create_model('lr')

# plot model
plot_model(lr, plot = 'auc')

# scale設定
plot_model(lr, plot = 'auc', scale = 3)

# 保存の設定
plot_model(lr, plot = 'auc', save = True)

# Yellowbrickの引数設定
plot_model(lr, plot = 'confusion_matrix', plot_kwargs = {'percent' : True})

# トレーニングデータの可視化
plot_model(lr, plot = 'auc', use_train_data = True)

# グラフをまとめて表示
evaluate_model(lr)

(出力したAUCのグラフ)

interpret_model

学習済みモデルから生成された予測値を解析する。この関数のほとんどのプロットは、SHAP (Shapley Additive exPlanations)に基づいて実装されており、非線形の手法を用いた場合でも解析結果を解釈するためのさまざまな可視化手法が用意されている。

SHAPについてはこちらの記事も参照(SHAP を用いた機械学習への解釈性付与

interpret_modelのパラメータ

  • save:Trueにするとプロットを保存する。
  • plot:plotのタイプを変更する。
  • feature:可視化する特徴量を指定する。
  • use_train_data:Trueにするとトレーニングデータを使ってプロットを作成する
  • observation:plot="reason"の時に、ある1つのデータを可視化したい場合に指定するインデックス番号
clf = setup(data = diabetes, target = 'Class variable',silent=True,train_size=0.9)
model = create_model('rf')

# interpret model
plot = interpret_model(model, plot='correlation',scale=3)

# プロットの保存
interpret_model(xgboost, plot='correlation', save=True)

# プロットの保存
interpret_model(xgboost, plot='correlation', use_train_data=True)

# 特徴量を指定
interpret_model(xgboost, plot='correlation', feature='Age (years)')

# ある特定のサンプルについて "reason"グラフを作成
pot = interpret_model(model, plot='reason', observation=1)

(SHAPのアウトプット例)

ダッシュボード

dashbordを使うと、対話型のダッシュボードを生成できる。

from pycaret.datasets import get_data
juice = get_data('juice')
from pycaret.classification import *
exp_name = setup(data=juice, target='Purchase', silent=True)
lr = create_model('lr')

# launch dashboard
dashboard(lr)

予測

predict_model

テストデータにおける予測値とスコアを出力する

predict_modelのパラメータ

  • data:テストデータではない別のデータを使用したい場合に指定。
  • raw_score:probability を出力したい場合にはTrueにする。
  • probability_threshold:クラス分けの閾値を指定したい場合に使用
  • drift_report:drift reportを出力したい場合に使用
# load dataset
diabetes = get_data('diabetes')
from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable')

xgboost = create_model('xgboost')

# predict on hold-out
predict_result = predict_model(xgboost)

# predict on new data
new_data = diabetes.copy()
new_data.drop('Class variable', axis = 1, inplace = True)
predict_model(xgboost, data = new_data)

output

Plasma glucose concentration a 2 hours in an oral glucose tolerance test Diastolic blood pressure (mm Hg) Triceps skin fold thickness (mm) 2-Hour serum insulin (mu U/ml) Body mass index (weight in kg/(height in m)^2) Diabetes pedigree function Age (years) Number of times pregnant_0 Number of times pregnant_1 Number of times pregnant_10 ... Number of times pregnant_3 Number of times pregnant_4 Number of times pregnant_5 Number of times pregnant_6 Number of times pregnant_7 Number of times pregnant_8 Number of times pregnant_9 Class variable Label Score
0 113.0 50.0 10.0 85.0 29.500000 0.626 25.0 0.0 0.0 0.0 ... 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.7910
1 135.0 54.0 0.0 0.0 26.700001 0.687 62.0 0.0 1.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.9718
2 123.0 48.0 32.0 165.0 42.099998 0.520 26.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.6470
3 106.0 60.0 24.0 0.0 26.500000 0.296 29.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1 0 0.9902
4 99.0 68.0 38.0 0.0 32.799999 0.145 33.0 0.0 0.0 0.0 ... 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0.8941
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
226 169.0 74.0 19.0 125.0 29.900000 0.268 31.0 0.0 0.0 0.0 ... 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1 1 0.9563
227 111.0 72.0 47.0 207.0 37.099998 1.390 56.0 0.0 0.0 0.0 ... 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1 1 0.7743
228 106.0 76.0 0.0 0.0 37.500000 0.197 26.0 0.0 1.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.9970
229 107.0 72.0 30.0 82.0 30.799999 0.821 24.0 0.0 1.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.9691
230 108.0 72.0 43.0 75.0 36.099998 0.263 33.0 0.0 0.0 0.0 ... 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0 0 0.9642

その他の操作(デプロイ)

finalize_model

Hold-outセットを含めたデータ全体で学習を実行

save_model

変換パイプラインと学習済みモデルオブジェクトをpickleファイルとして保存する

load_model

保存したパイプラインをロードする

from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable',silent=True)

rf = create_model('rf')

# finalize a model
finalize_model(rf)

# モデルを保存する。
save_model(rf, 'rf_pipeline')

# モデルを読み込む
loaded_model = load_model('rf_pipeline')

その他

  • pull:最後に出力されたスコアリンググリッドを返す。
  • models:モデルライブラリのインポートモジュールで利用可能な全てのモデルを含むテーブルを返す。
  • get_config:Setup関数の初期化時に作成されたグローバル変数を確認できる。
  • set_config:グローバル変数を設定する。
  • get_metrics:(クロスバリデーションで使われる)利用可能なすべての評価指標のテーブルを返す。
  • add_metric:自作の評価指標をクロスバリデーションで検証する評価指標のコンテナに追加する。
  • remove_metric:評価指標のコンテナから、指定した評価指標を省く
  • automl:optimizeパラメータに基づいて、現在の設定におけるすべての学習済みモデルのうち、最適なモデルを取得する。
  • get_logs:検証のログのテーブルを返す。(setup関数の初期化時に log_experiment=True としたときのみ動作する)
  • get_system_logs:カレントアクティブディレクトリからlogs.logファイルを読み込んで表示する。

get_configで確認できる変数

  • X: Transformed dataset (X)
  • y: Transformed dataset (y)
  • X_train: Transformed train dataset (X)
  • X_test: Transformed test/holdout dataset (X)
  • y_train: Transformed train dataset (y)
  • y_test: Transformed test/holdout dataset (y)
  • seed: random state set through session_id
  • prep_pipe: Transformation pipeline
  • fold_shuffle_param: shuffle parameter used in Kfolds
  • n_jobs_param: n_jobs parameter used in model training
  • html_param: html_param configured through setup
  • create_model_container: results grid storage container
  • master_model_container: model storage container
  • display_container: results display container
  • exp_name_log: Name of experiment
  • logging_param: log_experiment param
  • log_plots_param: log_plots param
  • USI: Unique session ID parameter
  • fix_imbalance_param: fix_imbalance param
  • fix_imbalance_method_param: fix_imbalance_method param
  • data_before_preprocess: data before preprocessing
  • target_param: name of target variable
  • gpu_param: use_gpu param configured through setup
  • fold_generator: CV splitter configured in fold_strategy
  • fold_param: fold params defined in the setup
  • fold_groups_param: fold groups defined in the setup
  • stratify_param: stratify parameter defined in the setup
from pycaret.datasets import get_data
data = get_data('diabetes')

from pycaret.classification import *
clf1 = setup(data, target = 'Class variable',silent=True)

best_model = compare_models()

# get the scoring grid
results = pull()

# check model library
models()

# reset environment seed
set_config('seed', 999)

# get metrics
get_metrics()

# add metric
from sklearn.metrics import log_loss
add_metric('logloss', 'Log Loss', log_loss, greater_is_better = False)

# remove metric
remove_metric('logloss')

# automl
best = automl(optimize = 'Recall')

# check ML logs
get_logs()

# check system logs
from pycaret.utils import get_system_logs
get_system_logs()

参考

関連書籍

以上

Discussion