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

はじめに

機械学習をとにかく体験したい人、難解な計算式を前に機械学習をあきらめた人に朗報です。機械学習のコードをまったく書かずに、機械学習を活用したシステムが作れます。機械学習、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を始めてみてはいかがでしょうか?

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


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。