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

Gurobi Machine Learning 2 機械学習と数理最適化の統合

Gurobi Machine Learning 2 機械学習と数理最適化の統合

More Decks by NearMeの技術発表資料です

Transcript

  1. 3 変数Zを導入して、教師として学習 Pythonコード例 1モデル // 学習データ df = pd.DataFrame({ 'y':

    [1, 0, 1, 0], //合格したか?(response) 't': [1, 1, 0, 0], // 勉強したか?(treatment) 'x1': [0.2, 0.8, 0.3, 0.4], 'x2': [0.4, 0.4, 0.2, 0.2] }) x = df[['x1', 'x2']] z = 1 - (df['y'] ^ train['t']) // z = [1, 0, 0, 1] model.fit(x, z) // どんな分類器でも可
  2. 6 既知のデータを学習することで、未知のデータについて予測する 通常高速 回帰 • スパムフィルタ • 画像認識 予測 •

    株価予測 • 不動産価格予測 与えられた制約内で厳密な解を求めるのは苦手 機械学習の得意分野 制約を破ると罰則を与える等のアプローチがあるが、厳密な解は通常得られない(アート)
  3. 7 与えられた制約の中で、厳密な最適解を見つける 通常時間がかかる • セールスマン巡回問題 • 配送計画問題 • ナップサック問題 •

    スケジューリング問題 リソース(時間、お金)に限りがある場合に用いられる 数理最適化の得意分野 意思決定に有効
  4. 13 • 機械学習を使って数理最適化のパラメータを学習し、より良い組み合わせを選択 機械学習 ⊃ 数理最適化 数理最適化 ⊃ 機械学習 •

    数理最適化を使って機械学習の特徴選択をサポートする • 数理最適化を使って決定木を最適化(できるらしい) ◦ 参考:https://www.youtube.com/watch?v=l1b3qEO8_Z
  5. 14 • 機械学習 → 数理最適化 • 数理最適化 → 機械学習 •

    機械学習 ⊃ 数理最適化 • 数理最適化 ⊃ 機械学習 • 上記4つの組み合わせ 5つのアプローチ ← Gurobi Machine Learning
  6. 16 • MNIST手書きデータセットに対する「最適な」敵対的サンプル生成 • 非線形関数をReLuを使ったニューラルネットワークによって近似する • 奨学金による入学する学生数の最大化 • 価格調整による収益の最大化 Gurobi

    Machine Learning のサンプル集 https://gurobi-machinelearning.readthedocs.io/en/stable/mlm-examples/2DPeakFunction.html https://gurobi-machinelearning.readthedocs.io/en/stable/mlm-examples/adversarial_mnist.html https://gurobi-machinelearning.readthedocs.io/en/stable/mlm-examples/student_admission.html https://gurobi-machinelearning.readthedocs.io/en/stable/mlm-examples/price_optimization.html 因果推論とアップリフトモデリングに近い分野
  7. 17 • 奨学金による入学する学生数の最大化 ◦ 奨学金を配ることで、学生の入学率はどのように変化するだろうか? ◦ 奨学金をどのように配ることで、学生の入学数を最大化できるだろうか? • 価格調整による収益の最大化 ◦

    価格を調整することで、収益はどのように変化するだろうか? ◦ 価格をどのように調整することで、収益を最大化できるだろうか? 機械学習と数理最適化の統合 (機械学習) (数理最適化) (機械学習) (数理最適化) 価格調整による推定収益をGurobi Machine Learningの変数に組み込む 奨学金による学生の推定入学率をGurobi Machine Learningの変数に組み込む
  8. 18 import pandas as pd from sklearn.linear_model import LogisticRegression import

    gurobipy as gp from gurobi_ml import add_predictor_constr import gurobipy_pandas as gppd historical_data = pd.read_csv(...) studentsdata = pd.read_csv(...) regression = LogisticRegression() regression.fit(X=historical_data.loc[:, [“merit”, “SAT”, “GPA”]], y=historical_data.loc[:, ”enroll”]) Gurobi Machine Learningの使い方(奨学金による入学数最大化) 1. 機械学習モデルを用意する
  9. 19 m = gp.Model() # 入学率を変数 “y” とする y =

    gppd.add_vars(m, studentsdata, name='enroll_probability') # 1人あたりの奨学金の上限(250万円)を制約に加える studentsdata = studentsdata.gppd.add_vars(m, lb=0.0, ub=2.5, name='merit') # 配る奨学金の金額を変数 “x” とする x = studentsdata.loc[:, "merit"] Gurobi Machine Learningの使い方 2. 普通の定式化を行う
  10. 20 # 目的関数を定式化する m.setObjective(y.sum(), gp.GRB.MAXIMIZE) # 予算制約を定式化する m.addConstr(x.sum() <= 0.2

    * nstudents) # 機械学習モデルを制約に加える pred_constr = add_predictor_constr(m, regression, studentsdata, y, output_type="probability_1") # 最適化を実行する m.optimize() # 結果を出力する pred_constr.input_values Gurobi Machine Learningの使い方 3. 機械学習のモデルを制約に加える
  11. 23 サポートしているモデルや変換器が限定されている • モデル(scikit-learn, Keras, PyTorch) ◦ 線型回帰 ◦ ロジスティック回帰(唯一の二分類器)

    ◦ ニューラルネット(ReLu全結合のみ) ◦ 決定木・ランダムフォレスト ◦ 勾配ブースティング • 変換器 ◦ StandardScaler ◦ PolynomialFeatures ◦ ColumnTransformer サポートしていないモデルを使用しようとするとエラーになる Gurobi Machine Learning の制約