Apache PredictionIOは、SalesforceによってApache Software Foundationに寄贈されたオープンソースの機械学習プラットフォームです。
PredictionIOは機械学習ワークフローの全プロセスをカバーし、エンジンテンプレートという雛形をベースにすることで機械学習を使用した予測Web API簡単に作成することができます。 すぐに使える様々なエンジンテンプレートが用意されており、その中から目的に合ったものを選ぶことができます。 ただし、エンジンテンプレートはあくまでテンプレートなので、使用するデータやアルゴリズムにあわせてScala / Javaコードを書いてテンプレートをカスタマイズする必要があります。
一方で、TransmogrifAIは、Salesforceによって開発されたApache Spark上で動作するAutoMLライブラリで、コーディングなしで最良のモデルを見つけることを自動化することができます。そこで、TransmogrifAIを使用してPredictionIO用のコーディング不要の機械学習テンプレートを作成できるのではないかと思い、作ってみました。
タイタニックのサンプルを実行してみる
テンプレートの使い方を見るためにタイタニックのサンプルを動かしてみましょう。その前にPredictionIO自体のセットアップは済ませておく必要があります。
まずはpio
コマンドでアプリケーションを作成します。
$ pio app new MyAutoMLApp1 [INFO] [App$] Initialized Event Store for this app ID: 4. [INFO] [Pio$] Created a new app: [INFO] [Pio$] Name: MyAutoMLApp1 [INFO] [Pio$] ID: 1 [INFO] [Pio$] Access Key: xxxxxxxxxxxxxxxx
アクセスキーを環境変数に設定します。
$ export ACCESS_KEY=xxxxxxxxxxxxxxxx
イベントサーバーを起動します。
$ pio eventserver &
イベントデータをイベントサーバにインポートします。テンプレートのルートディレクトリで以下のコマンドを実行します。
$ python ./data/import_titanic.py --file ./data/titanic.csv --access_key $ACCESS_KEY
学習を行います。結構時間がかかります。
$ pio train
学習が終了したらWeb API起動します。デフォルトでは8080ポートで起動します。
$ pio deploy
実際にリクエストを投げて動作を確認します。
$ curl -H "Content-Type: application/json" -d '{ "pClass": "2", "name": "Wheadon, Mr. Edward H", "sex": "male", "age": 66, "sibSp": 0, "parCh": 0, "ticket": "C.A 24579", "fare", 10.5, "cabin": "", "embarked": "S" }' http://localhost:8000/queries.json {"survived":0.0} $ curl -H "Content-Type: application/json" -d '{ "pClass": "2", "name": "Nicola-Yarred, Miss. Jamila", "sex": "female", "age": 14, "sibSp": 1, "parCh": 0, "ticket": "2651", "fare", 11.2417, "cabin": "", "embarked": "C" }' http://localhost:8000/queries.json {"survived":1.0}
データにあわせてカスタマイズする
カスタマイズするにはコードを変更する必要はなく、テンプレートに含まれているengine.json
という設定ファイルを修正するだけです。
"algorithms": [ { "name": "algo", "params": { "target" : "survived", "schema" : [ { "field": "survived", "type": "double", "nullable": false }, { "field": "pClass", "type": "string", "nullable": true }, ... ] } } ]
データにあわせてschema
を定義し、予測対象のフィールド名をtarget
に指定します。現時点ではtarget
で指定するフィールドはdouble
型である必要があります。
まとめ
Apache PredictionIOとTransmogrifAIはどちらもApache Sparkで動作し、Salesforce社によってオープンソース化された機械学習プロダクトです。組み合わせて利用することで機械学習のワークフロー全体を自動化することができます。もちろんこのAutoMLテンプレートには改善点も多々ありますが、組み合わせ的にはなかなか良いコンビネーションなのではないかと思います。
なお、このテンプレートの作成中、TransmogrifAIの主要開発者の1人であるMatthew TovbinさんからTwitter上でいくつかの有用なアドバイスをいただきました。また、TransmogrifAIのドキュメントでこの記事の英語版を紹介していただきました。ありがとうございました。