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')
output
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()
MAE | MSE | RMSE | R2 | RMSLE | MAPE | |
---|---|---|---|---|---|---|
Fold | ||||||
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)
MAE | MSE | RMSE | R2 | RMSLE | MAPE | ||
---|---|---|---|---|---|---|---|
Split | Fold | ||||||
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 |
231 rows × 27 columns
その他の操作(デプロイ)
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')
保存したパイプライン
Transformation Pipeline and Model Successfully Saved
(Pipeline(memory=None,
steps=[('dtypes',
DataTypes_Auto_infer(categorical_features=[],
display_types=False, features_todrop=[],
id_columns=[],
ml_usecase='classification',
numerical_features=[],
target='Class variable',
time_features=[])),
('imputer',
Simple_Imputer(categorical_strategy='not_available',
fill_value_categorical=None,
fill_value_numerical=None,
numer...
RandomForestClassifier(bootstrap=True, ccp_alpha=0.0,
class_weight=None, criterion='gini',
max_depth=None, max_features='auto',
max_leaf_nodes=None, max_samples=None,
min_impurity_decrease=0.0,
min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0,
n_estimators=100, n_jobs=-1,
oob_score=False, random_state=7554,
verbose=0, warm_start=False)]],
verbose=False),
'dt_pipeline.pkl')
その他
- 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()
参考
参考HP
関連書籍