12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PyCaret使ってみる

Last updated at Posted at 2021-12-14

MYJLabアドベントカレンダー15日目の記事です
昨日は@Kuroi_CcVS Codeしか勝たんでした。
ブレークポイントや拡張機能について紹介してくれました😊

今日の記事はPyCaretについて書きたいと思います。

PyCaretとは

PyCaretはオープンソースの機械学習ライブラリです。データの前処理やモデルの比較を自動で行ってくれます。自分でパラメータを設定することもできます。公式サイトはここから。

結論から言うとデータの前処理から予測結果までのコードはこんな感じです

pycaret.ipynb
from pycaret.regression import *
from pycaret.datasets import get_data

traffic = get_data("traffic")
exp = setup(traffic, target='traffic_volume')
model = create_model(lgmb)
predict_model(model)

環境

  • GoogleColaboratory

やること

trafficデータを使ってtraffic_volumeの予測をしてみたいと思います

インストール

以下のコードでインストールします

pycaret.ipynb
!pip install pycaret

PyCaretをインポート

pycaret.ipynb
from pycaret.regression import *

回帰を行うのでregressionにしています。
分類の場合はclassification、クラスタリングの場合はclusteringとやるとできます。

2行目ではデータセットを取得しています。データセットはPyCaret's Data Repositoryから確認できます。

データセットを取得

pycaret.ipynb
from pycaret.datasets import get_data
traffic = get_data("traffic")

データの中身を見てみます
dataset.png

カラム数は8個
降水量や天候、ラッシュの時間などがあります

  • holiday
  • temp
  • rain_1h
  • snow_1h
  • clouds_all
  • weather_main
  • Rush Hour
  • traffic_volume

データの前処理

pycaret.ipynb
exp = setup(traffic, target='traffic_volume')

前処理はsetupを使います。データセットと目的変数を設定します

  • データはtraffic
  • 目的変数はtraffic_volume
  • データ分割はデフォルトで訓練データは0.7、テストデータ0.3になっています

他に設定できる値は以下です

data: pd.DataFrame, 
target: str, 
train_size: float=0.7, 
test_data: Optional[pd.DataFrame]=None, 
preprocess: bool=True, 
imputation_type: str='simple', 
iterative_imputation_iters: int=5, 
categorical_features: Optional[List[str]]=None, categorical_imputation: str='constant', categorical_iterative_imputer: Union[str, Any]='lightgbm',
ordinal_features: Optional[Dict[str, list]]=None, high_cardinality_features: Optional[List[str]]=None, high_cardinality_method: str='frequency', 
numeric_features: Optional[List[str]]=None, numeric_imputation: str='mean',
numeric_iterative_imputer: Union[str, Any]='lightgbm', 
date_features: Optional[List[str]]=None, 
ignore_features: Optional[List[str]]=None, 
normalize: bool=False, 
normalize_method: str='zscore', 
transformation: bool=False, 
transformation_method: str='yeo-johnson', handle_unknown_categorical: bool=True, unknown_categorical_method: str='least_frequent', 
pca: bool=False, 
pca_method: str='linear', 
pca_components: Optional[float]=None, 
ignore_low_variance: bool=False, 
combine_rare_levels: bool=False, 
rare_level_threshold: float=0.1, 
bin_numeric_features: Optional[List[str]]=None, remove_outliers: bool=False, 
outliers_threshold: float=0.05, 
remove_multicollinearity: bool=False, multicollinearity_threshold: float=0.9, remove_perfect_collinearity: bool=True, 
create_clusters: bool=False, 
cluster_iter: int=20, 
polynomial_features: bool=False, 
polynomial_degree: int=2, 
trigonometry_features: bool=False, 
polynomial_threshold: float=0.1, 
group_features: Optional[List[str]]=None, 
group_names: Optional[List[str]]=None, 
feature_selection: bool=False, 
feature_selection_threshold: float=0.8, feature_selection_method: str='classic', feature_interaction: bool=False, 
feature_ratio: bool=False, 
interaction_threshold: float=0.01, 
transform_target: bool=False, 
transform_target_method: str='box-cox', 
data_split_shuffle: bool=True, 
data_split_stratify: Union[bool, 
List[str]]=False, 
fold_strategy: Union[str, Any]='kfold', 
fold: int=10, 
fold_shuffle: bool=False, 
fold_groups: Optional[Union[str, pd.DataFrame]]=None, n_jobs: Optional[int]=-1, 
use_gpu: bool=False, 
custom_pipeline: Union[Any, Tuple[str, Any], List[Any], ListTuple[str, Any]]]=None, 
html: bool=True, 
session_id: Optional[int]=None, 
log_experiment: bool=False, 
experiment_name: Optional[str]=None, 
log_plots: Union[bool, list]=False, 
log_profile: bool=False, 
log_data: bool=False, 
silent: bool=False, 
verbose: bool=True, 
profile: bool=False, 
profile_kwargs: Dict[str, Any]=None

前処理の設定ができたら実行します。するとデータタイプの確認画面が表示されるので、確認をしてEnterキーを押します
setup.png

モデル

公式のチュートリアルにモデルの比較というものがありました

pycaret.ipynb
compare_model()

上記を実行することで各モデルの性能の評価をしてくれます。各モデルの平均絶対誤差、平均絶対誤差などを比較することができます。
compare_model.png

そして一番R2が高かったモデルのパラメータも出力してくれます
lgmb.png

モデルの設定

pycaret.ipynb
model = create_model(lgmb)

crate_modelを使って使うモデルを設定します。今回はLGBMRegressorを使うので引数にlgmbを書きます。
実行すると自動でクロスバリデーションをしてくれます。

予測結果

予測をしてみます。predict_modelを使って、上記で設定したモデルを設定します。

pycaret.ipynb
predict_model(model)

実行すると表が出力されます。この表の一番右に行くと予測結果のカラムがあります。
predict.png

ここまで前処理から予測までやってみました

まとめ

今回はPyCaretについてでした。気になった方はチュートリアルやってみてください。

参考文献

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?