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/

Akihiro Suto

March 05, 2022
Tweet

More Decks by Akihiro Suto

Other Decks in Technology

Transcript

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

    月~) Python (2021 年 9 月~) Rugby (1993 年~) Kendama (2020 年~) Qiita https://qiita.com/hanaseleb 2
  2. 4

  3. データセットの分割 今回のコンクールでは、目的変数が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
  4. Pycaret Quick Start 回帰問題における Pycaret の最小の流れは、 1. setup() 2. create_model()

    3. predict_model() の流れです。インスタンスを作成したあと、モデルも決め打ちで、ビ ジュアライズもとくになしで OK であれば、この 3 つの関数に最低限 の引数およびデータを入れてあげればすぐに機械学習を実行すること が可能です 12
  5. このコードを実行するだけで、予測値が出力されます。 # 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
  6. 14

  7. 18

  8. 20

  9. 23

  10. 25

  11. 26

  12. 27

  13. 29

  14. 31

  15. 32

  16. 33

  17. 34

  18. 36

  19. 37

  20. 42

  21. 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
  22. '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
  23. 仕上げ ② 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
  24. setup() 引数追加 exp = setup(data=train_co, target='target_carbon_monoxide', normalize = True, #

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

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

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

    tuned_blended = tune_model( blended, optimize='RMSLE', search_library="optuna", # optuna の使用 choose_better = True, n_iter=30 ) 52
  28. 57

  29. 58

  30. 59

  31. 60