Cloud ML Engineでオンライン予測リクエストを送信したときに所属確率を返すようにする
Google Cloud PlatformのML Engineでデプロイしたモデルにリクエストを送ると通常predict関数を呼ぶのでクラスの所属確率がわかりません.
クラスの所属確率をだすにはpredictをpredict_probaで上書きしたモデルを保存すればいいです.
以下は基本的にscikit-learn と XGBoost によるオンライン予測のスタートガイド | scikit-learn と XGBoost の Cloud ML Engine | Google Cloudに沿ってます.
モデルの作成
from sklearn import datasets from sklearn.linear_model import LogisticRegression from sklearn.externals import joblib def main(): iris = datasets.load_iris() clf = LogisticRegression() clf.fit(iris.data, iris.target) clf.predict = clf.predict_proba # predictをpredict_probaで上書き joblib.dump(clf, "model.joblib") if __name__ == "__main__": main()
モデルをStorageにアップロードし,デプロイ
# upload gsutil cp ./model.joblib gs://$BUCKET_NAME/model.joblib # deploy gcloud ml-engine versions create $VERSION_NAME --model $MODEL_NAME --origin $MODEL_DIR --runtime-version=1.10 --framework $FRAMEWORK --python-version=3.5
予測リクエストの送信
- input.json
{ "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] }
curl -X POST -H "Content-Type: application/json" -d @input.json \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://ml.googleapis.com/v1/projects/${PROJECT_ID}/models/${MODEL_NAME}/versions/${VERSION_NAME}:predict"
結果
{"predictions": [[0.008144896997669845, 0.7771569459145118, 0.21469815708781834], [0.041747653750674074, 0.47784428289897735, 0.48040806335034864]]}