LoginSignup
2
0

AutoAIで作成したModelをローカルPythonで実行する

Posted at

AutoAIで作成したモデルは、通常はWatson Machine Learningで実行します。
しかしながら、不良の予測などの場合、ネットワークにつながらないエッジのローカルのパソコンなどで実行したい場合があります。

ここではAutoAIで作成したモデルをローカルPCにダウンロードして、予測を行ってみたいと思います。

具体的にはAutoAIで作成したエクスペリメントを操作するNotebookをダウンロードし、Watson StudioからモデルをローカルPCに取得してpickleファイルにして、別のPythonコードから読み込んで予測します。

image.png

  • テスト環境
    • CP4DaaS (2024-03-05)
    • Python 3.10.9
    • ibm-watson-machine-learning-1.0.349
    • ibm-watsonx-ai-0.2.0
    • autoai-libs-1.16.2
    • lale-0.7.11
    • scikit-learn-1.1.1
    • xgboost-1.6.2
    • snapml-1.13.2

1. モデルの作成

モデルは以下の@makaishi2 さんの記事を参照して作った「営業成約予測」のモデルを使います。以下の手順を参考にモデルを作ってください。

2. エクスペリメントのNotebookの保存

今回は「パイプライン2」が最優秀なモデルとして選ばれています(ランダム要素もあるので結果は変わる可能性があります)。
ここで「コードの保存」をクリックして、Notebookとして保存します。
image.png

image.png

image.png
プロジェクト内に「営業成約予測」のNotebookができましたので開き、ダウンロードボタンでローカルのPCにダウンロードします。

3. APIキーの作成

ハンバーガーメニューから「IAM」を選びます。
image.png

「APIキー」を選び、「作成」をクリックします。
image.png

適当な名前を指定して「作成」をクリックします。
image.png

コピーやダウンロードをして保存しておきます。(このAPIキーがあるとユーザーの操作がなんでもできてしまうようになるので、管理には気を付けてください)
image.png

4. Notebookでモデルを抽出する

ここではWindows上のVisual Studio Codeで実行していきます。

パッケージ導入

最初のセルのpackageを導入します。
image.png

Windowsだとこのままでは動かないのでコンソールなどで以下のコマンドで導入します。バージョンにシビアなのでこのセルの通りの順序で導入してください。

pip install ibm-watsonx-ai
pip install autoai-libs==1.16.2
pip install -U "lale>=0.7,<0.8"
pip install scikit-learn==1.1.1
pip install xgboost==1.6.2
pip install lightgbm==3.3.2
pip install snapml==1.13.2

APIキーの設定

先ほど#3で取得したAPIキーを以下に設定します。

image.png

api_key = 'PUT_YOUR_APIKEY_HERE'

最高ランクのパイプラインをpickle化する

pipのセル以外を「Get pipeline as a scikit-learn pipeline model」の前まで実行していきます。

まず、ポイントになるのは「Get fitted AutoAI optimizer」です。ここで先ほどAutoAIで実行したエクスペリメントを呼び出しています。

image.png

そして、「Get pipeline as a scikit-learn pipeline model」のコードを以下に変更して実行します。get_pipeline(pipeline_name='Pipeline_2')で最高ランクだったパイプライン2を取得して、pickle.dumpでpipeline_model.pickleというファイルに書き出しています。

image.png

#pipeline_model = pipeline_optimizer.get_pipeline()
pipeline_model = pipeline_optimizer.get_pipeline(pipeline_name='Pipeline_2')
import pickle

with open('pipeline_model.pickle', mode='wb') as fo:
  pickle.dump(pipeline_model, fo)

以下のようにpipeline_model.pickleというファイルができます。

image.png

必要パッケージimport文の生成

次に「Preview pipeline model as a Python code」のセルを実行します。

以下のようにパイプラインのPythonコードを出力します。
image.png

このコードの中からimport文の部分を抜き出しておきます。この内容はパイプラインによって変化します。このモデルではxgboostを使っていますが、モデルによってはrandomforestを使っていたり、pcaを使っていたりします。

Notebookはまだ続きますが、この後はWatson Machine Learningにモデルをアップしていくコードになりますので、今回はローカルで実行したいので実行しません。

5. 予測用Notebook

いまダウンロードしたpipeline_model.pickleをつかって予測をしていきます。

新しいnotebook、ここではpredict.ipynbを作成し、先ほどのimport文を貼り付けます。
image.png

from autoai_libs.transformers.exportable import NumpyColumnSelector
from autoai_libs.transformers.exportable import CompressStrings
from autoai_libs.transformers.exportable import NumpyReplaceMissingValues
from autoai_libs.transformers.exportable import NumpyReplaceUnknownValues
from autoai_libs.transformers.exportable import boolean2float
from autoai_libs.transformers.exportable import CatImputer
from autoai_libs.transformers.exportable import CatEncoder
import numpy as np
from autoai_libs.transformers.exportable import float32_transform
from sklearn.pipeline import make_pipeline
from autoai_libs.transformers.exportable import FloatStr2Float
from autoai_libs.transformers.exportable import NumImputer
from autoai_libs.transformers.exportable import OptStandardScaler
from sklearn.pipeline import make_union
from autoai_libs.transformers.exportable import NumpyPermuteArray
from xgboost import XGBClassifier

次にpickle.loadでpipeline_model.pickleを読み込みます。

#モデルの読み込み
import pickle
with open('pipeline_model.pickle', 'rb') as p:
    pipeline = pickle.load(p)

次にデータを読み込みます。

#データの読み込み
import pandas as pd
df=pd.read_csv('bank-train-jp-autoai.csv')
df_x= df.drop(['今回販促結果'],axis=1)

image.png

先頭10行を予測してみます。ネットワークのつながっていない。ローカルPC上でも実行ができました。

#予測
pipeline.predict(df_x.values[:10])

image.png

サンプル

エクスペリメントNotebook

予測Notebook

requirements.txt

piclkeファイル

2
0
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
2
0