IBMのAutoAIのチュートリアルIBM Watson Studio AutoAI: Modeling for the rest of usの日本語解説 #3 の補足です。
このページではチュートリアルで使用する以下のAutoAI Model Access
notebookファイルの中身の説明をします。
- ダウンロード先: AutoAI Model Access: AutoAIModelAccess.ipynb
なので、まず日本語解説 #3を実施した上で、中身がわからない場合に参照してください。
0. 事前準備
日本語解説 #3
が完了していることが前提です。
あるいは、日本語解説 #3をやりつつ、こちらも参照ください。
1. AutoAIModelAccess.ipynb の解説
このノートブックでは、Watson Machine Learning(WML)APIを使用して、使用可能なモデルをリストして、使用可能なモデルを指定します。
次に、Churn modelを使用していくつかのレコードを予測します。
最後に、Deploymentを削除する方法を示します。
Watson Machine Learning(WML)APIの詳細情報は以下を参照してください。
- https://wml-api-pyclient-dev-v4.mybluemix.net/
- https://watson-ml-v4-api.mybluemix.net/
- https://wml-api-pyclient.mybluemix.net/
1. notebook環境にWatson Machine Learning API clientの導入
Watson Studioの標準notebook環境にはWatson Machine Learning API client
が導入されていませんので、以下のように、仮想環境に対して直接pip
コマンドを利用してWatson Machine Learning API client
を導入します。
# Install the Watson Machine Learning API client
!pip install watson-machine-learning-client-v4
2. Machine Learning Service の資格情報を設定
ここでMachine Learning Serviceを使用するための、自分のMachine Learning Serviceの資格情報をセットします。
wml_credentials = {
"apikey": "",
"instance_id": "",
"url": ""
}
3. 必要なライブラリをImportし、WatsonMachineLearningAPIClientのインスタンスを作成
引数には2で設定したwml_credentials
をセットします。
from watson_machine_learning_client import WatsonMachineLearningAPIClient
client = WatsonMachineLearningAPIClient(wml_credentials)
4. 今現在自分のMachine Learning Serviceに作成されているModelを表示
repositoryのlist_modelsメソッドを呼び出して、 今現在自分のMachine Learning Serviceに作成されているModelを出力します。
尚、ここはModelの表示の仕方をを示しているだけで、後続作業には関係がありません。
API Doc参考: https://wml-api-pyclient-dev-v4.mybluemix.net/#client.Repository.list_models
# List models already in the repository
client.repository.list_models()
以下のような感じで出力されます。ちょっと列がずれてますが、項目と値が表示されています。2つ以上モデルを作っていれば複数行表示されます。
5. 今現在自分のMachine Learning Serviceに作成されているDeploymentを一覧表示
deploymaneのlistメソッドを呼び出して、 今現在自分のMachine Learning Serviceに作成されているDeploymentを出力します。
ここで表示されたNAME
を次の詳細出力で利用しています。
API Doc参考: https://wml-api-pyclient-dev-v4.mybluemix.net/#client.Deployments.list
# List the deployed models
client.deployments.list()
以下のような感じで出力されます。ちょっと列がずれてますが、項目と値が表示されています。2つ以上モデルを作っていれば複数行表示されます。
6. Deployment 「Churn model deployment」の詳細を取得し、そこからguidを取得。
deploymentのget_detailsメソッドを呼び出して、 今現在自分のMachine Learning Serviceに作成されているDeploymentの詳細をdeployments_details
に取得します。詳細は辞書型(dict)で返ってきます。
その後、resources
の値にリストで、各Deploymentの詳細が辞書型で入っていますので、今回使用する 「Churn model deployment」のguid
をdeployed_uid
に取得しています。
もしDeploymentを他の名前で作っていた場合は、Churn model deployment
の部分を変更する必要があります。
API Doc参考: https://wml-api-pyclient-dev-v4.mybluemix.net/#client.Deployments.get_details
# Extract the information for "Churn model deployment"
deployments_details = client.deployments.get_details()
deployed_uid = next(item for item in deployments_details['resources']
if item['entity']["name"] == "Churn model deployment")['metadata']['guid']
参考: deployments_details
の中身の例
{'resources': [{'metadata': {'parent': {'href': ''},
'name': 'Churn model deployment',
'guid': '5e8b3001-23e1-447d-868a-a73022142f9e',
'description': '',
'id': '5e8b3001-23e1-447d-868a-a73022142f9e',
'modified_at': '2020-02-21T04:51:19.040Z',
'created_at': '2020-02-19T06:04:20.117Z',
'href': '/v4/deployments/5e8b3001-23e1-447d-868a-a73022142f9e'},
'entity': {'name': 'Churn model deployment',
'custom': {},
'online': {},
'description': '',
'tags': [{'value': 'dsx-autoai',
'description': 'An identifier for distinguishing v4 deployments created from Watson Studio AutoAI'}],
'status': {'state': 'ready',
'online_url': {'url': 'https://us-south.ml.cloud.ibm.com/v4/deployments/5e8b3001-23e1-447d-868a-a73022142f9e/predictions'}},
'asset': {'href': '/v4/models/cd8bfb7f-5d18-48f1-a32c-59eacdc1c7e8?rev=21eea238-da49-4b5f-a56a-a3466df89d10'}}}]}
7. idとデータを引数にして、AutoAIで作成したモデルを使用して予測
client.deployments.ScoringMetaNames.INPUT_DATAは'input_data'と定義されているものですが(2020/02/21現在)、これをkeyとして、以下のソースに書かれているように予測したいデータの項目名と値を設定し、scoring_payloadに代入します。下記のソースには2レコード分のデータがあります。
その後、deploymentのscoreメソッドをuidとscoring_payloadを引数にして呼び出して、 予測結果を取得しています。
API Doc参考: https://wml-api-pyclient-dev-v4.mybluemix.net/#client.Deployments.score
# Execute the model
scoring_payload = { client.deployments.ScoringMetaNames.INPUT_DATA:
[{
'fields': ['ID','Gender','Status','Children','Est Income','Car Owner',
'Age','LongDistance','International','Local','Dropped',
'Paymethod','LocalBilltype','LongDistanceBilltype',
'Usage','RatePlan'],
'values': [[1,'F','S',1.0,38000.0,'N',24.393333,23.56,0.0,206.08,0.0,'CC','Budget','Intnl_discount',229.64,3.0],
[6,'M','M',2.0,29616.0,'N',49.426667,29.78,0.0,45.5,0.0, 'CH','FreeLocal','Standard',75.29,2.0]
]
}]
}
predictions = client.deployments.score(deployed_uid, scoring_payload)
実行には多少時間がかかります。以下の赤で囲んだ部分の*
が数字に変わる(=完了)まで待ちます。
8. 予測の表示
実行結果predictionsの中身を表示します。
predictions
以下のように出力されます。valuesの中身が配列になっていて、それぞれ一番目のレコードの結果、二番目のレコードの結果となります。
「一番可能性の高い予測値」、「各クラス(今回はFとT)の確率のリスト」 が予測結果となります。
9. 予測を見やすく表示
辞書型のままだと見にくいので、見やすいように整形して表示ししています。自分で結果を加工するときの参考となるコードです。
for prediction in predictions['predictions'] :
for result in prediction['values'] :
print('Prediction: ' + str(result[0]) + ", probability: [" +
str(result[1][0]) + ', ' + str(result[1][1]) + "]" )
10. Deploymentの削除
以下はDeploymentを削除するコードです。Deployment削除したくない場合は実行しないでください。
removeメソッドを使用して、リポジトリからモデルを削除できます。 以下の例では、すでにuidを持っているため、それを使用してDeploymentを削除します。 この上で実施したものと同じ方法でuidを取得すれば、すべてのDeploymentを削除できます。
似たような操作で、保存されたmodelも削除できます。(ここでは説明していません)
10.1: 比較のために現在のDeploymentの一覧を表示
# Display the list first
client.deployments.list()
10.2: uidを指定してdeploymentを削除
# Remove the deployment
client.deployments.delete(deployed_uid)
10.3: 比較のために現在のDeploymentの一覧を表示
client.deployments.list()
最初の表示と比べて、uidで指定したDeployment(=Churn model deployment
)が消えているのを確認します。
以上です。