MYJLabアドベントカレンダー15日目の記事です
昨日は@Kuroi_CcのVS Codeしか勝たんでした。
ブレークポイントや拡張機能について紹介してくれました😊
今日の記事はPyCaretについて書きたいと思います。
PyCaretとは
PyCaretはオープンソースの機械学習ライブラリです。データの前処理やモデルの比較を自動で行ってくれます。自分でパラメータを設定することもできます。公式サイトはここから。
結論から言うとデータの前処理から予測結果までのコードはこんな感じです
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の予測をしてみたいと思います
インストール
以下のコードでインストールします
!pip install pycaret
PyCaretをインポート
from pycaret.regression import *
回帰を行うのでregressionにしています。
分類の場合はclassification、クラスタリングの場合はclusteringとやるとできます。
2行目ではデータセットを取得しています。データセットはPyCaret's Data Repositoryから確認できます。
データセットを取得
from pycaret.datasets import get_data
traffic = get_data("traffic")
カラム数は8個
降水量や天候、ラッシュの時間などがあります
- holiday
- temp
- rain_1h
- snow_1h
- clouds_all
- weather_main
- Rush Hour
- traffic_volume
データの前処理
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キーを押します
モデル
公式のチュートリアルにモデルの比較というものがありました
compare_model()
上記を実行することで各モデルの性能の評価をしてくれます。各モデルの平均絶対誤差、平均絶対誤差などを比較することができます。
そして一番R2が高かったモデルのパラメータも出力してくれます
モデルの設定
model = create_model(lgmb)
crate_modelを使って使うモデルを設定します。今回はLGBMRegressorを使うので引数にlgmbを書きます。
実行すると自動でクロスバリデーションをしてくれます。
予測結果
予測をしてみます。predict_modelを使って、上記で設定したモデルを設定します。
predict_model(model)
実行すると表が出力されます。この表の一番右に行くと予測結果のカラムがあります。
ここまで前処理から予測までやってみました
まとめ
今回はPyCaretについてでした。気になった方はチュートリアルやってみてください。