1. domokun70cm

    No comment

    domokun70cm
Changes in body
Source | HTML | Preview
@@ -1,275 +1,281 @@
# この記事について
[JAWS-UG CLI専門支部 #67 MachineLearning入門](https://jawsug-cli.doorkeeper.jp/events/41917)で実施するハンズオン用の手順書です。
# 前提条件
## 必要な権限
作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。
- MachineLearningのフルコントロール権限
- S3のフルコントロール権限
- STSの関するフルコントロール権限
# 0. 準備
## 0.1. リージョンを指定
```bash:コマンド
export AWS_DEFAULT_REGION="eu-west-1"
```
## 0.2. 資格情報を確認
```bash:コマンド
aws configure list
```
インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。
```text:結果
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************TMNA shared-credentials-file
secret_key ****************xnA1 shared-credentials-file
region eu-west-1 env AWS_DEFAULT_REGION
```
## 0.3. バージョン確認
```bash:コマンド
aws --version
```
```text:結果
aws-cli/1.10.66 Python/2.7.12 Linux/4.4.19-29.55.amzn1.x86_64 botocore/1.4.56
```
## 0.4. バージョンアップ(必要に応じて)
```bash:コマンド
sudo pip install -U awscli
```
## 0.5. 変数の確認
```bash:コマンド
-${AWS_ID}
+cat << ETX
+
+ AWS_ID: ${AWS_ID}
+ TRAINING_DATA_SOURCE_ID: ${TRAINING_DATA_SOURCE_ID}
+
+ETX
```
```text:結果
+ AWS_ID: ************
+ TRAINING_DATA_SOURCE_ID: training-cli-************
+
```
# 1. 学習モデルの作成
## 1.1. 学習モデルの作成
### 学習モデルIDの指定
```bash:コマンド
ML_MODEL_ID="ml-model-cli-${AWS_ID}"
```
### 学習モデルの種類の指定
今回は二項分類を行います。
```bash:コマンド
ML_MODEL_TYPE="BINARY"
```
### 変数の確認
```bash:コマンド
cat << ETX
ML_MODEL_ID: ${ML_MODEL_ID}
ML_MODEL_TYPE: ${ML_MODEL_TYPE}
TRAINING_DATA_SOURCE_ID: ${TRAINING_DATA_SOURCE_ID}
ETX
```
```text:結果
ML_MODEL_ID: ml-model-cli-************
ML_MODEL_TYPE: BINARY
TRAINING_DATA_SOURCE_ID: training-cli-************
```
### 学習モデルの作成
```bash:コマンド
ML_MODEL_ID=$(aws machinelearning create-ml-model \
--ml-model-id ${ML_MODEL_ID} \
--ml-model-type ${ML_MODEL_TYPE} \
--training-data-source-id ${TRAINING_DATA_SOURCE_ID} \
) \
echo ${ML_MODEL_ID}
```
```text:結果
ml-model-cli-************
```
### 学習モデルの確認(1)
```bash:コマンド
aws machinelearning get-ml-model \
--ml-model-id ${ML_MODEL_ID}
```
完了前には以下のような結果になります。
```json:結果
{
"Status": "INPROGRESS",
"TrainingParameters": {
"sgd.maxPasses": "10",
"algorithm": "sgd",
"sgd.l2RegularizationAmount": "1E-6",
"sgd.shuffleType": "none",
"sgd.maxMLModelSizeInBytes": "100000000",
"sgd.l1RegularizationAmount": "0.0"
},
"MLModelType": "BINARY",
"CreatedByIamUser": "arn:aws:iam::************:user/user01",
"EndpointInfo": {
"PeakRequestsPerSecond": 0,
"EndpointStatus": "NONE"
},
"MLModelId": "ml-model-cli-************",
"InputDataLocationS3": "s3://jawsug-cli-ml-************/banking.csv",
"LastUpdatedAt": 1474609005.35,
"TrainingDataSourceId": "training-cli-************",
"StartedAt": 1474608877.295,
"Message": "Current Step: TRAINING (1/1) Current Iteration: (10/10) 100%",
"CreatedAt": 1474608873.692
}
```
完了後には以下のような結果になります。
作成時のログを確認することができます。(裏ではEMRを使っているのでしょうか?)
```json:結果
{
"Status": "COMPLETED",
"SizeInBytes": 467150,
"ComputeTime": 102000,
"TrainingParameters": {
"sgd.maxPasses": "10",
"algorithm": "sgd",
"sgd.l2RegularizationAmount": "1E-6",
"sgd.shuffleType": "none",
"sgd.maxMLModelSizeInBytes": "100000000",
"sgd.l1RegularizationAmount": "0.0"
},
"MLModelType": "BINARY",
"CreatedByIamUser": "arn:aws:iam::************:user/user01",
"EndpointInfo": {
"PeakRequestsPerSecond": 0,
"EndpointStatus": "NONE"
},
"MLModelId": "ml-model-cli-************",
"InputDataLocationS3": "s3://jawsug-cli-ml-************/banking.csv",
"LastUpdatedAt": 1474609062.644,
"TrainingDataSourceId": "training-cli-************",
"StartedAt": 1474608877.295,
"LogUri": "https://eml-prod-dub-emr.s3.amazonaws.com/************-pr-ml-model-cli/userlog/************-pr-ml-model-cli?AWSAccessKeyId=********************&Expires=1475213899&Signature=************************************",
"CreatedAt": 1474608873.692,
"FinishedAt": 1474609062.644
}
```
### 学習モデルの確認(2)
-```TrainingParameters```は以下の公式ドキュメントを参照してください。
+`TrainingParameters`は以下の公式ドキュメントを参照してください。
[Training Parameters](http://docs.aws.amazon.com/machine-learning/latest/dg/training-parameters.html)
毎度おなじみのDevelopers.IOでも解説されています。
[AWS再入門 Amazon Machine Learning編](http://dev.classmethod.jp/cloud/aws/cm-advent-calendar-2015-getting-started-again-amazon-ml/)
予測の精度や計算量に影響するパラメータです。
```bash:コマンド
aws machinelearning describe-ml-models
```
```json:結果
{
"Results": [
{
"Status": "COMPLETED",
"SizeInBytes": 467150,
"ComputeTime": 102000,
"Algorithm": "sgd",
"TrainingParameters": {
"sgd.maxPasses": "10",
"algorithm": "sgd",
"sgd.l2RegularizationAmount": "1E-6",
"sgd.shuffleType": "none",
"sgd.maxMLModelSizeInBytes": "100000000",
"sgd.l1RegularizationAmount": "0.0"
},
"MLModelType": "BINARY",
"CreatedByIamUser": "arn:aws:iam::************:user/user01",
"EndpointInfo": {
"PeakRequestsPerSecond": 0,
"EndpointStatus": "NONE"
},
"MLModelId": "ml-model-cli",
"InputDataLocationS3": "s3://jawsug-cli-ml-************/banking.csv",
"LastUpdatedAt": 1474609062.644,
"TrainingDataSourceId": "training-cli",
"StartedAt": 1474608877.295,
"CreatedAt": 1474608873.692,
"FinishedAt": 1474609062.644
}
]
}
```
### Recipeの確認
Recipeは、データソースを学習モデル作成時にどのような前処理をするか表現したものになります。
AMLがデータソースの作成時に推奨Recipeを作成してくれます。
自身でRecipeを作成することも可能です。
-AMLでの前処理を行わない場合は、データソースの作成時に事前に実施しておく必要があります。
[Data Transformations for Machine Learning](http://docs.aws.amazon.com/machine-learning/latest/dg/data-transformations-for-machine-learning.html)
こちらもDevelopers.IOにまとめられてました。最高かよ。
[Amazon Machine Learning Recipeまとめ](http://dev.classmethod.jp/cloud/aws/aml-recipe/)
```bash:コマンド
aws machinelearning get-ml-model \
--ml-model-id ${ML_MODEL_ID} \
--verbose \
--query "Recipe"
```
```json:結果
"{\n \"groups\" : {\n \"NUMERIC_VARS_QB_50\" : \"group('cons_price_idx')\",\n \"NUMERIC_VARS_QB_20\" : \"group('previous')\",\n \"NUMERIC_VARS_QB_500\" : \"group('age','emp_var_rate','campaign')\",\n \"NUMERIC_VARS_QB_10\" : \"group('duration','euribor3m','cons_conf_idx','pdays','nr_employed')\"\n },\n \"assignments\" : { },\n \"outputs\" : [ \"ALL_BINARY\", \"ALL_CATEGORICAL\", \"quantile_bin(NUMERIC_VARS_QB_50,50)\", \"quantile_bin(NUMERIC_VARS_QB_20,20)\", \"quantile_bin(NUMERIC_VARS_QB_500,500)\", \"quantile_bin(NUMERIC_VARS_QB_10,10)\" ]\n}"
```
以上です。