機械学習PredictionIOはSparkを中心としたJVMベースの機械学習アプリケーションを開発・運用するために必要なミドルウェアやフレームワークなどを統合的に提供するもので、開発者はPredictionIOのフレームワークに従ってエンジンを作成することで、機械学習を使用したアプリケーションをWebサービスとしてデプロイすることができます。PredictionIOのWebサイトに掲載されているレコメンデーションのテンプレートを動かしてみます。PredictionIOのインストールドキュメントを見るとソースからビルドするべしとなっており中々スパルタンな感じです。Dockerで動かすこともできるようですが、折角なのでソースからビルドしてみることにします(Javaは予めインストールしておく必要があります)。こちらから現時点で最新版の0.11.0-incubatingの配布物をダウンロードし、適当なディレクトリに展開します。ルートディレクトリがないようなのでディレクトリを掘ってから展開するのが良いです。apache-predictionio-0.11.0-incubating展開したディレクトリ内にあるmake-distribution.shでおもむろにビルドします。./make-distribution.shビルドが成功するとPredictionIO-0.11.0-incubating.tar.gzというファイルができるので、これを適当な場所に展開します。SparkのインストールPredictionIO-0.11.0-incubating/vendorsにSparkのディストリビューションを展開しておきます。1.6.3という古いのバージョンのようです。2系を使用するようビルドすることもできるのですが、デフォルトで最新のものが使われるようになって欲しいところです。PredictionIO-0.11.0-incubating/vendorsストレージのインストールPredictionIOの動作に必要なデータや、学習に使用するデータなどを格納するためのストレージを別途インストールする必要があります。PredictionIOは以下のストレージをサポートしています(ストレージに保存するデータにはメタデータ、イベントデータ、モデルデータの3種類があり、ストレージごとに保存できるデータが異なります)。5ならイベントデータも保存可能)HBase(イベントデータ)HDFS(モデルデータ)ローカルファイルシステム(モデルデータ)デフォルトではPostgreSQLを使用するようになっているのでこれを使ってみます。MacであればHomebrewでPostgreSQLをインストールできます。postgresqlすると自動起動をやめることができます)。postgresqlPredictionIOで使用するデータベースやユーザを作成します。'pio'"PostgreSQLのJDBCドライバをダウンロードしてPredictionIO-0.11.0-incubating/libに配置します。https://jdbc.postgresql.org/download/postgresql-42.0.0.jarPredictionIOを起動するここまでできたらPredictionIOを起動してみます。&すると、7070ポートでイベントサーバが起動します。この後の操作ではPredictionIO-0.11.0-incubating/binにあるpioコマンドを多用することになるのでこのディレクトリにPATHを通しておくとよいです。学習データを登録するPredictionIOのイベントサーバにアクセスするためのアクセスキーを発行します。MyApp1こんな感じでアクセスキーが発行されます。i-zc4EleEM577EJhx3CzQhZZ0NnjBKKdSbp3MiR5JDb2zdTKKzH9nF6KLqjlMnvlこのアクセスキーを毎回指定するのは面倒なので以下のように環境変数に設定しておきます。ACCESS_KEY=i-zc4EleEM577EJhx3CzQhZZ0NnjBKKdSbp3MiR5JDb2zdTKKzH9nF6KLqjlMnvl学習データとして使用するデータをイベントサーバに登録してみます。"2014-11-10T12:34:56.123-08:00"}'登録したイベントを検索してみます。"http://localhost:7070/events.json?accessKey=$ACCESS_KEY"以下のように、2つのイベントが登録されていることが確認できます。}]レコメンデーションエンジンを動かしてみる本題のレコメンデーションエンジンです。PredictionIOのオフィシャルで提供されているエンジンテンプレートを使用してみます。gitコマンドでテンプレートのリポジトリを適当な場所にクローンします。MyRecommendation準備として予め用意されているデータをまとめてインポートします。PredictionIOのPython用SDKをインストールします。predictionio以下のようにするとサンプルデータをまとめてイベントサーバにインポートできます。$ACCESS_KEY次にMyRecommendation/engine.jsonを編集してappNameに先ほどアクセスキーを発行したしたアプリケーション名を設定します。}},...レコメンデーションエンジンをビルドします。--verbose登録したイベントデータを使用して学習を行います。trainここでスタックオーバーフローが発生してしまうことがあります。その場合はMyRecommender/src/main/scala/ALSAlgorithm.scalaの以下の行のコメントアウトを外してチェックポイントを有効にします。sc.setCheckpointDir("checkpoint")ここまででようやく準備完了です。レコメンデーションエンジンをWebサービスとしてデプロイします。deploy8000ポートでレコメンデーションエンジンのWebサービスが起動します。ブラウザでアクセスすると以下のような画面が表示されるはずです。実際にレコメンデーションエンジンを呼び出してみます。http://localhost:8000/queries.jsonすると以下のような結果が返ってくるはずです。指定したユーザに対してスコアが高い順に4つのアイテムが返却されていることがわかります。]}まとめだいぶ手順が長くなってしまいましたが、PredictionIOは機械学習を使用したアプリケーションを開発・運用するために以下のような機能を提供していることがおわかりいただけたのではないかと思います。今回は実際にPredictionIOでどのようにエンジンを開発するのかについては触れませんでしたが、興味のある方はエンジンテンプレートのソースコードを参照していただければと思います。PredictionIOのWebサイトには他にもいくつかのエンジンテンプレートが紹介されており、同様の手順で動かすことができますのでこちらも試してみていただければと思います。書籍はてなブログをはじめよう!takezoeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。