LoginSignup
51
52

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-28

はじめに

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

挑戦はしたものの、難解な数式の前に敗北した人も多いのではないでしょうか?数学の知識がなくても、機械学習を使えたら…
そんな悩みを解決するのが、Apache PredictionIOです。

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

PredictionIOとは?

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

PredictionIO_architecture.png画像は公式から

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

Event Server

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

データベースは以下の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に収集したデータを学習し、予測モデルを作成します。以下のようなイメージです。

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

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

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

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

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

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

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

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

どんなデータが必要か?

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

予測結果の返答

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

PredictionIO_query.png

予測結果は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を始めてみてはいかがでしょうか?

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

51
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
52