Edited at

数学の知識がなくてもできる機械学習

More than 1 year has passed since last update.


はじめに

機械学習をとにかく体験したい人、難解な計算式を前に機械学習をあきらめた人に朗報です。機械学習のコードをまったく書かずに、機械学習を活用したシステムが作れます。機械学習、AIという言葉を毎日のように目に、耳にする今日この頃、機械学習に挑戦した人も多いのではないでしょうか?

挑戦はしたものの、難解な数式の前に敗北した人も多いのではないでしょうか?数学の知識がなくても、機械学習を使えたら…

そんな悩みを解決するのが、Apache PredictionIOです。

本記事では、そのPredictionIOについて書いています。手軽に機械学習を体験したい人、これから機械学習を勉強する人にもおすすめです。


PredictionIOとは?

PredictionIOはオープンソースの機械学習サーバで、使用言語はScalaです。アーキテクチャは以下になります。

画像は公式から

アーキテクチャ図からもわかる通り、Event ServerとEngine(s)で成り立っています。これらについて紹介します。


Event Server

まず、Event Serverから紹介します。Event ServerはPredictionIOと連携させたいアプリのデータを収集する場所になります。1つのEvent Serverに複数のアプリのデータを保存することも可能です。以下のようなイメージです。



画像は公式から

データベースは以下の3つが使用可能です。


  • PostgreSQL 9.1

  • MySQL 5.1

  • HBase 0.98.6 & Elasticsearch 1.4.0

※表記より新しいバージョンも可


データベース作成時の注意

データベースを作る際、データベース名パスワードはイベントサーバの設定と統一させる必要があります。


Event Serverへデータ送信

Event Serverへのデータの送信方法については、公式に以下が用意されています。


  • REST API

  • PHP SDK

  • Python SDK

  • Ruby SDK

  • Java SDK

これらのほかにもコミュニティによるSDKもあります。こちらをどうぞ

Event APIは以下が用意されています。


  • accessKey:連携するアプリのアクセスキー

  • event:イベント名(viewやbuy等)

  • entityType:entityの名前、RDBのテーブル名

  • entityTipeId:entityのid(ユニーク値)

  • targetEntityType:(option)entityTypeに従属するテーブル名

  • targetEntityId:(option)targetEntityTypeのid

  • properties:(option)event、entityの関連情報

optionに関しては使用するEngineによります。

詳細はこちら


Engine(s)

次に、Engine(s)について説明します。Engine(s)は主に2つの働きをします。


  • Event Serverに収集したデータを学習し、予測モデル作成

  • アプリからのクエリに対する予測結果の返答


予測モデルの作成

Engine(s)はEvent Serverに収集したデータを学習し、予測モデルを作成します。以下のようなイメージです。



これまで、Engine(s)と書いている通り、Engineは1つだけでなく、複数実装することも可能です。

さて、Engineを複数実装すると、どのようなメリットがあるのか?と思う人もいるのではないでしょうか?複数のEngineを実装することで何ができるのかを一言で言うと、

複数の予測結果を返答させることができる!

そのまんますぎるので、具体例で説明します。

例えば、Facebookで考えてみましょう。Facebookには「おすすめの投稿」と「○○さんと知り合いですか?」という投稿友達をレコメンドする機能があります。複数の予測結果を返してますね!

では、どうように予測結果を返しているのでしょうか?「おすすめの投稿」はユーザの閲覧履歴から予測モデルを作成し、「○○さんと知り合いですか?」はユーザの友達から予測モデルを作成していると考えられます。(実際、Facebookがどうしているのかは知りません)

要するに、複数の予測モデルを作成するときに複数のEngineを実装します。以下のようなイメージになります。

上図のEngine1とEngine2はそれぞれの学習アルゴリズムが必要とするデータ(閲覧履歴や友達等)を使用して、予測モデルを作成しています。

従って、Event ServerにはEngine(s)が予測モデルを作成するのに使うデータを送る必要があります。


どんなデータが必要か?

アプリからEvent Serverにデータを送る際、データの形式はEngineに依存します。どんなデータの形式が必要になるかはEngineのREADMEを参照してください。PredictionIOの公式にEngineのテンプレートがあるのでそちらをどうぞ。


予測結果の返答

予測モデルを作成したら、アプリからクエリをEngine(s)に送ります。すると、Engine(s)が作成した予測モデルとクエリから予測結果を返してくれます。以下のようなイメージです。※Engineを複数実装している場合、各Engineにクエリを送る必要があります。

予測結果はJSONで返ってきます。


PredictionIOで何ができるか?

ここまでをまとめると、PredictionIOとは


  • Event ServerとEngine(s)で構成

  • アプリからEvent Serverにデータを送り、そのデータをEngine(s)に学習させ、予測モデル作成

  • 予測モデルを作ったEngine(s)にクエリ投げると、予測結果を返答

というイメージができているでしょうか?

次に、PredictionIOで何ができるのか?について説明します。

PredictionIOで何ができるか?一言で言うと、

どんなEngine(s)が使えるか?と同じです。

使えるEngineとして以下のようなカテゴリーにテンプレートが用意されています。


  • Recommenders

  • Classification

  • Regression

  • NLP

  • Clustering

  • Similarity

  • Other

詳細はこちら

この中から、自分が必要なEngine(s)を選択して、使用することになります。全てのテンプレートEngineがGitHubで公開されているので、使い方はそちらを参考にしてください。


PredictionIOを使うのに必要なもの

PredictionIOを使うためには以下のものも必要になります。


  • Apache Spark 1.4.0

  • Java SE Development Kit 7

  • Apache Hadoop 2.4.0 (option)

  • 上記のDB(PostgreSQL、MySQL、HBase & Elasticsearch)のいずれか

※上記より新しいバージョンも可


PredictionIOを使うのになくても問題ないもの

なくても問題ないものは以下です。


  • 機械学習の理論、数学知識(なくても使えます)

  • 機械学習のコードを書くタスク(テンプレートのEngineを使えば機械学習のコードは書きません)

PredictionIOを使うだけなら、機械学習の知識はなくても問題ありません。データさえ用意すれば使えます。


機械学習の知識を活かしたい、学習アルゴリズムを作りたい人には

PredictionIOを使うだけなら、機械学習の知識がなくても使えると書きました。が、エンジニアたるものEngine

を使うだけでなく、作りたい、勉強した機械学習の知識を活用したいという人もいるでしょう。

そんな方は、Engineを作ってみてはいかがでしょうか?作ったEngineをテンプレートとして提出することもできます。詳細はこちら

機械学習を使えるだけでなく、提供もできる。それがPredictionIOです。


さいごに

PredictionIOについて、いかがだったでしょうか?機械学習初心者や計算が苦手な人にも手軽に使えるところ、機械学習のエキスパートにはEngineを作って、提供できるところが良いと感じています。

PredictionIOを活用して、機械学習ライフを楽しんでみてはいかがでしょうか?

まずはレコメンドのテンプレートからPredictionIOを始めてみてはいかがでしょうか?

少しでも、興味を持っていただけたらいいねをお願いします。