この記事について
JAWS-UG CLI専門支部 #67 MachineLearning入門で実施するハンズオン用の手順書です。
前提条件
必要な権限
作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。
- MachineLearningのフルコントロール権限
- S3のフルコントロール権限
0. 準備
0.1. リージョンを指定
コマンド
export AWS_DEFAULT_REGION="eu-west-1"
0.2. 資格情報を確認
コマンド
aws configure list
インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。
結果
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************GMWA iam-role
secret_key ****************obFC iam-role
region eu-west-1 env AWS_DEFAULT_REGION
0.3. バージョン確認
コマンド
aws --version
結果
aws-cli/1.10.66 Python/2.7.12 Linux/4.4.19-29.55.amzn1.x86_64 botocore/1.4.56
0.4. バージョンアップ(必要に応じて)
コマンド
sudo pip install -U awscli
0.5. 変数の確認
コマンド
cat << ETX
BUCKET_NAME: ${BUCKET_NAME}
AWS_ID: ${AWS_ID}
ML_MODEL_ID: ${ML_MODEL_ID}
ETX
結果
BUCKET_NAME: jawsug-cli-ml-************
AWS_ID: ************
ML_MODEL_ID: ml-model-cli-************
1. データソースの作成(バッチ予測用)
1.1. サンプルデータのダウンロード
予測用データのダウンロード
コマンド
curl https://s3.amazonaws.com/aml-sample-data/banking-batch.csv > banking-batch.csv
結果
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 469k 100 469k 0 0 189k 0 0:00:02 0:00:02 --:--:-- 189k
ファイルを確認
コマンド
ls -al | grep banking-batch.csv
結果
-rw-rw-r-- 1 ec2-user ec2-user 480428 Jan 29 2015 banking-batch.csv
1.2. スキーマファイルの生成
CSVファイルの構造を定義します。
ヘッダー情報の確認
CSVの1列目を確認します。
ターゲット変数が含まれていないことが確認できます。
コマンド
head -1 banking-batch.csv
結果
age,job,marital,education,default,housing,loan,contact,month,day_of_week,duration,campaign,pdays,previous,poutcome,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed
ファイル名の指定
コマンド
PREDICTION_DATA_SCHEMA_FILE="prediction_data_schema.json"
スキーマファイルの生成
バッチ予測用のため、ターゲット変数は指定されていません。
コマンド
cat << EOF > ${PREDICTION_DATA_SCHEMA_FILE}
{
"version":"1.0",
"rowId":null,
"rowWeight":null,
"dataFormat":"CSV",
"dataFileContainsHeader":true,
"attributes":[
{"attributeName":"age","attributeType":"NUMERIC"},
{"attributeName":"job","attributeType":"CATEGORICAL"},
{"attributeName":"marital","attributeType":"CATEGORICAL"},
{"attributeName":"education","attributeType":"CATEGORICAL"},
{"attributeName":"default","attributeType":"CATEGORICAL"},
{"attributeName":"housing","attributeType":"CATEGORICAL"},
{"attributeName":"loan","attributeType":"CATEGORICAL"},
{"attributeName":"contact","attributeType":"CATEGORICAL"},
{"attributeName":"month","attributeType":"CATEGORICAL"},
{"attributeName":"day_of_week","attributeType":"CATEGORICAL"},
{"attributeName":"duration","attributeType":"NUMERIC"},
{"attributeName":"campaign","attributeType":"NUMERIC"},
{"attributeName":"pdays","attributeType":"NUMERIC"},
{"attributeName":"previous","attributeType":"NUMERIC"},
{"attributeName":"poutcome","attributeType":"CATEGORICAL"},
{"attributeName":"emp_var_rate","attributeType":"NUMERIC"},
{"attributeName":"cons_price_idx","attributeType":"NUMERIC"},
{"attributeName":"cons_conf_idx","attributeType":"NUMERIC"},
{"attributeName":"euribor3m","attributeType":"NUMERIC"},
{"attributeName":"nr_employed","attributeType":"NUMERIC"}
],
"excludedAttributeNames":[]
}
EOF
cat ${PREDICTION_DATA_SCHEMA_FILE}
スキーマファイルの検証
コマンド
jsonlint -q ${PREDICTION_DATA_SCHEMA_FILE}
1.3. 予測用データのアップロード
アップロードするファイル名を指定
コマンド
PREDICTION_DATA_FILE="banking-batch.csv"
ファイルのアップロード
コマンド
aws s3 cp ${PREDICTION_DATA_FILE} s3://${BUCKET_NAME}
aws s3 cp ${PREDICTION_DATA_SCHEMA_FILE} s3://${BUCKET_NAME}
結果
upload: ./banking-batch.csv to s3://jawsug-cli-ml-************/banking-batch.csv
upload: ./prediction_data_schema.json to s3://jawsug-cli-ml-************/prediction_data_schema.json
アップロードされたファイルを確認
コマンド
aws s3 ls ${BUCKET_NAME} | grep ${PREDICTION_DATA_FILE}
aws s3 ls ${BUCKET_NAME} | grep ${PREDICTION_DATA_SCHEMA_FILE}
結果
2016-10-23 06:51:38 480428 banking-batch.csv
2016-10-23 06:51:41 1404 prediction_data_schema.json
2. データソースの作成
2.1. バッチ予測用データソースの作成
データソースIDの指定
コマンド
PREDICTION_DATA_SOURCE_ID="prediction-cli-${AWS_ID}-$(date +%Y%m%d%H)"
データソーススペックファイル名の指定
コマンド
PREDICTION_DATA_SOURCE_SPEC_FILE="prediction_data_source_spec.json"
変数の確認
コマンド
cat << ETX
PREDICTION_DATA_SOURCE_SPEC_FILE: ${PREDICTION_DATA_SOURCE_SPEC_FILE}
BUCKET_NAME: ${BUCKET_NAME}
PREDICTION_DATA_FILE: ${PREDICTION_DATA_FILE}
DATA_SCHEMA_FILE:${PREDICTION_DATA_SCHEMA_FILE}
ETX
結果
PREDICTION_DATA_SOURCE_SPEC_FILE: prediction_data_source_spec.json
BUCKET_NAME: jawsug-cli-ml-************
PREDICTION_DATA_FILE: banking-batch.csv
DATA_SCHEMA_FILE:prediction_data_schema.json
データソーススペックファイルの生成
コマンド
cat << EOF > ${PREDICTION_DATA_SOURCE_SPEC_FILE}
{
"DataLocationS3": "s3://${BUCKET_NAME}/${PREDICTION_DATA_FILE}",
"DataSchemaLocationS3": "s3://${BUCKET_NAME}/${PREDICTION_DATA_SCHEMA_FILE}"
}
EOF
cat ${PREDICTION_DATA_SOURCE_SPEC_FILE}
結果
{
"DataLocationS3": "s3://jawsug-cli-ml-************/banking-batch.csv",
"DataSchemaLocationS3": "s3://jawsug-cli-ml-************/prediction_data_schema.json"
}
データソーススペックファイルの検証
コマンド
jsonlint -q ${PREDICTION_DATA_SOURCE_SPEC_FILE}
変数の確認
コマンド
cat << ETX
PREDICTION_DATA_SOURCE_ID: ${PREDICTION_DATA_SOURCE_ID}
PREDICTION_DATA_SOURCE_SPEC_FILE: ${PREDICTION_DATA_SOURCE_SPEC_FILE}
ETX
結果
PREDICTION_DATA_SOURCE_ID: prediction-cli-************
PREDICTION_DATA_SOURCE_SPEC_FILE: prediction_data_source_spec.json
データソースの作成
コマンド
aws machinelearning create-data-source-from-s3 \
--data-source-id ${PREDICTION_DATA_SOURCE_ID} \
--data-spec file://${PREDICTION_DATA_SOURCE_SPEC_FILE}
結果
{
"DataSourceId": "prediction-cli-************"
}
データソースの確認
コマンド
aws machinelearning get-data-source \
--data-source-id ${PREDICTION_DATA_SOURCE_ID}
結果
{
"Status": "COMPLETED",
"NumberOfFiles": 1,
"DataLocationS3": "s3://jawsug-cli-ml-************/banking-batch.csv",
"CreatedByIamUser": "arn:aws:iam::************:user/user01",
"DataSizeInBytes": 480428,
"ComputeStatistics": false,
"LastUpdatedAt": 1474613517.536,
"DataSourceId": "prediction-cli-************",
"CreatedAt": 1474613515.885,
"FinishedAt": 1474613517.536
}
データソースの一覧
コマンド
aws machinelearning describe-data-sources
結果
{
"Results": [
{
"Status": "COMPLETED",
"NumberOfFiles": 1,
"DataLocationS3": "s3://jawsug-cli-ml-************/banking-batch.csv",
"CreatedByIamUser": "arn:aws:sts::************:assumed-role/CLI/i-0****************",
"DataSizeInBytes": 480428,
"ComputeStatistics": false,
"LastUpdatedAt": 1477205620.185,
"DataSourceId": "prediction-cli-************-2016102306",
"CreatedAt": 1477205618.067,
"FinishedAt": 1477205620.185
},
{
"Status": "COMPLETED",
"ComputeTime": 1296000,
"NumberOfFiles": 1,
"DataLocationS3": "s3://jawsug-cli-ml-************/banking.csv",
"CreatedByIamUser": "arn:aws:sts::************:assumed-role/CLI/i-0****************",
"DataSizeInBytes": 4882918,
"ComputeStatistics": true,
"LastUpdatedAt": 1477201359.786,
"DataSourceId": "training-cli-************-2016102305",
"StartedAt": 1477201112.605,
"CreatedAt": 1477201110.17,
"FinishedAt": 1477201359.786
}
]
}
以上です。