Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PyCaretでKaggleの回帰問題に取り組む

 PyCaretでKaggleの回帰問題に取り組む

PyCaretの研究がてら、Kaggleの回帰問題に取り組んでみました。

https://qiita.com/hanaseleb/items/55ef042f7180a6b15dab

https://pycaret.org/

0cc2ebc5781bcb2cae5f9ab7efa40ff2?s=128

Akihiro Suto

March 05, 2022
Tweet

More Decks by Akihiro Suto

Other Decks in Technology

Transcript

  1. はじめに Kaggle 問題にチームで取り組み奮闘記 Pycaret でかんたん AutoML 1

  2. 自己紹介 須藤明洋 すとうあきひろ 1984 年生まれ Power BI (2021 年 5

    月~) Python (2021 年 9 月~) Rugby (1993 年~) Kendama (2020 年~) Qiita https://qiita.com/hanaseleb 2
  3. Pycaret https://techninjahere. medium.com/best- opensource-automl- frameworks- 4e40820e2d79 3

  4. 4

  5. Pycaret とは PyCaretは、機械学習のワークフローを自動化する Python 製のオープンソー ス、ローコード機械学習ライブラリです。 エンドツーエンドの機械学習およびモデル管理ツールであり、実験サイクル を指数関数的に高速化し、生産性を高めます。 他のオープンソース機械学習ライブラリと比較して、PyCaretは数百行のコ ードを数行だけで置き換えることができる、代替のローコード・ライブラリ

    です。これにより、実験が飛躍的に速く、効率的になります。 PyCaret は基本的に、いくつかの機械学習ライブラリやフレー ムワークの Python ラッパーです。 5
  6. 機械学習ライブラリ scikit-learn 勾配ブースティング × 決定木 XGBoost LightGBM CatBoost 6

  7. 自然言語処理 spaCy ハイパーパラメーター 最適化フレームワーク Optuna Hyperopt 分散実行フレームワーク Ray 7

  8. 分析開始 PyCaret の Regression モジュールは、25 以上のすぐに使えるアルゴ リズムと、学習したモデルの性能を分析するためのいくつかのプロッ トが用意されています。 8

  9. 前処理は省略します 9

  10. データセットの分割 今回のコンクールでは、目的変数が3つあるため、3つの DataSet を作 成します train_3 = train2.drop(columns = ['target_carbon_monoxide',

    'target_benzene', 'target_nitrogen_oxides']) test_3 = test2.drop(columns = ['target_carbon_monoxide', 'target_benzene', 'target_nitrogen_oxides']) train_co = train2.drop(columns = ['target_benzene', 'target_nitrogen_oxides']) train_be = train2.drop(columns = ['target_carbon_monoxide', 'target_nitrogen_oxides']) train_no = train2.drop(columns = ['target_carbon_monoxide', 'target_benzene']) 10
  11. Pycaret インストールとライブラリのインポート KaggleカーネルやGoogleColabにはプリインストールされていないの で、 pip install をおこないます。 !pip install pycaret

    from pycaret.regression import * 11
  12. Pycaret Quick Start 回帰問題における Pycaret の最小の流れは、 1. setup() 2. create_model()

    3. predict_model() の流れです。インスタンスを作成したあと、モデルも決め打ちで、ビ ジュアライズもとくになしで OK であれば、この 3 つの関数に最低限 の引数およびデータを入れてあげればすぐに機械学習を実行すること が可能です 12
  13. このコードを実行するだけで、予測値が出力されます。 # Pycaretの最初単位 # !pip install pycaret from pycaret.datasets import

    get_data from pycaret.regression import * data = get_data('insurance') # テストデータの取得 s = setup(data, target = 'charges') # インスタンスの作成 lr = create_model('lr') # モデルの作成 predictions = predict_model(lr, data=data) # 実行 13
  14. 14

  15. scikit-learn での実装例 データセットの分割 特徴量の取捨 グラフの作成 などで多くのコードが必要 15

  16. Pycaretでモデルを作成 Kaggleに戻ります。関数は下記を使用します。 1. setup() 2. compare_models() 3. blend_models() 4. tune_model()

    5. plot_model() 6. evaluate_model() 7. predict_model() 8. finalize_model() 16
  17. setup() この関数は学習環境を初期化し、変換 パイプラインを作成します。Setup 関 数は他の関数を実行する前に呼び出す 必要があります。この関数は、data と target という 2

    つの必須パラメーター を受け取ります。その他のパラメータ ーは任意です。 17
  18. 18

  19. setup() exp = setup(data=train_co, target='target_carbon_monoxide') 上記コードを実行するとデータ・タイプの一覧が出力され、Enter を 押すと処理が続行、Quitをテキスト入力すると処理が中止されます。 19

  20. 20

  21. 処理が終わるとデータ セットの情報を出して くれる。 21

  22. compare_models() 回帰用にモデル 20 個以上が使えるようになっている。 それぞれのモデルで交差検証をして評価指数順に並び替えて表示。 top3 = compare_models(sort='RMSLE', n_select=3, fold

    = 3) 22
  23. 23

  24. blend_models() estimator_list パラメーターで渡されたモデルに対して、Voting Regressor を学習します。 blended = blend_models(estimator_list= top3, fold=3,

    optimize='RMSLE') 24
  25. 25

  26. 26

  27. 27

  28. tune_model() tuned_blended = tune_model(blended) 28

  29. 29

  30. plot_model() モデルの性能をビジュアライズをして 解析できます。 30

  31. 31

  32. 32

  33. 33

  34. 34

  35. evaluate_model() 学習済みモデルの性能を分析するためのユーザインタフェースを表示 します。内部で plot_model 関数を呼び出しています。 evaluate_model(tuned_blended) 35

  36. 36

  37. 37

  38. finalize_model() データセット全体に対して学習させます。 final_model = finalize_model(tuned_blended) 38

  39. predict_model() 学習されたモデルを用いて Label 列に予測を入れる。 pred_esb = predict_model(tuned_blended) 39

  40. predict_model() pred_esb = predict_model(tuned_blended) 40

  41. submit サブミット用データの作成をします。 対数を元の数値に変換するため、 np.exp 関数を使用。 sub = pd.read_csv('../input/tabular-playground-series-jul-2021/sample_submission.csv') sub['target_carbon_monoxide'] =

    np.exp(pred_esb['Label'])-1 41
  42. 42

  43. AutoMLの関数化 def pycaret_model(train, target, test, n_select, fold, opt, exclude): print('Setup

    Your Data....') setup(data=train, target=target, silent= True) print('Comparing Models....') top3 = compare_models(sort=opt, n_select=n_select, fold = fold, exclude = exclude) print('Blending Models....') blended = blend_models(estimator_list= top3, fold=fold) print('Tuning Models....') tuned_blended = tune_model(blended) print('Finallizing Models....') final_model = finalize_model(tuned_blended) print('Done...!!!') pred_esb = predict_model(final_model, test) re = pred_esb['Label'] 43
  44. 'target_benzene' と 'target_nitrogen_oxides' の予測 sub['target_benzene'] = np.exp( pycaret_model( train_be, 'target_benzene',

    test_3, 3, 10, 'RMSLE', ['knn', 'xgboost']) )-1 sub['target_nitrogen_oxides'] = np.exp( pycaret_model( train_no, 'target_nitrogen_oxides', test_3, 3, 10, 'RMSLE', ['xgboost']) ) - 1 44
  45. 仕上げ ① leak_sub = pd.read_excel( '../input/air-quality-time-series-data-uci/AirQualityUCI.xlsx' ) [7110:].reset_index( drop =

    True ) 45
  46. 仕上げ ② co_out = leak_sub[leak_sub['CO(GT)'] == -200].index be_out = leak_sub[leak_sub['C6H6(GT)']

    == -200].index ni_out = leak_sub[leak_sub['NOx(GT)'] == -200].index leak_sub.loc[co_out, 'CO(GT)'] = sub.loc[co_out, 'target_carbon_monoxide'] leak_sub.loc[be_out, 'C6H6(GT)'] = sub.loc[be_out, 'target_benzene'] leak_sub.loc[ni_out, 'NOx(GT)'] = sub.loc[ni_out, 'target_nitrogen_oxides'] sub['target_carbon_monoxide'] = leak_sub['CO(GT)'] sub['target_benzene'] = leak_sub['C6H6(GT)'] sub['target_nitrogen_oxides'] = leak_sub['NOx(GT)'] 46
  47. submit 用の csv を作成 sub.to_csv('sub.csv', index = 0) 47

  48. 試行錯誤の開始 48

  49. setup() 引数追加 exp = setup(data=train_co, target='target_carbon_monoxide', normalize = True, #

    数値列を標準化 numeric_imputation = 'mean', # 欠損値の穴埋め silent= True) # データ型の確認なし 49
  50. blend_models() 引数追加 blended = blend_models( estimator_list= best, fold=10, # 交差検証の回数

    optimize='RMSLE', # 評価指数 choose_better = True # 結果がよくなるときのみブレンドされたモデルを返す ) 50
  51. 51

  52. サーチライブラリの変更 ハイパーパラメーターのチューニングに optuna を使用。 デフォルトは scikit-learn # !pip install optuna

    tuned_blended = tune_model( blended, optimize='RMSLE', search_library="optuna", # optuna の使用 choose_better = True, n_iter=30 ) 52
  53. tune_model()の使用順を変更 53

  54. SCORE 54

  55. まとめ Pycaretは導入から実行まで簡単便利。 ドキュメントを読み、 各関数の使用順 引数でできること を確認すると機械学習の勉強の整理に役立つ。 55

  56. appendix 56

  57. 57

  58. 58

  59. 59

  60. 60

  61. ご清聴ありがとうございました。 61