30
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AtraeAdvent Calendar 2015

Day 9

Apache Sparkを勉強して分散処理できますよ!って言えるようになる その2

Last updated at Posted at 2015-12-09

前回はこちら

はじめに

今日はsparkの標準ライブラリであるMLlibを利用してみます。
sparkにはMLlibを含め、4種類の標準ライブラリがあります。

スクリーンショット 2015-12-09 23.29.43.png

他のライブラリに関しては、こちらを参照ください。

MLlibとは

spark上に実装されている機械学習のライブラリです。
機械学習の実装はすごくムズカシイのですが、MLlibは割と簡単に試すことができ、サポートしているアルゴリズムも豊富なのでとっつきやすい気がします(私見です)。

とりあえず、協調フィルタリングを試してみます。
協調フィルタリングについてはこのブログが大変参考になりました。

実装手順

1. 必要なライブラリをimportする

from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating

2. データを読み込んでRDDを生成する

テストデータはコレを利用します。

レビューした人のID、レビューされたもののID、レビュー結果といった感じでしょうか?

data = sc.textFile("data/mllib/als/test.data")

3. 適当に変数を設定します

rank:特徴量数、numIterations:繰り返し数といった変数を設定します。
rankは増やせば増やすほど性能が改善するらしいです。10ぐらいから変わらなくなるらしいのでとりあえず10にしときます。
numIterationsも増やせば増やすだけ学習サイクルが増えるので精度が上がる筈です。
これもとりあえず10回にしときます。

rank = 10
numIterations = 10

4. modelを作成して、dataを学習させます

  1. で読み込んだライブラリのtrainメソッドを叩くだけです。
model = ALS.train(ratings, rank, numIterations)

5. 適当に値をぶっこんで予測をしてもらいます。

>>> model.predict(2,4)
1.0015225077674874

(2,4)に対する正解は1なのでまぁまぁいいのかな?

6. モデルを保存したり、ロードしたりします。

折角学習させたデータなので、保存して任意のタイミングで利用できるようにしたいですね。
saveMatrixFactorizationModel.loadを利用すればそれも簡単にできるそうです。

model.save(sc, "own/model/path")
sameModel = MatrixFactorizationModel.load(sc, "own/model/path")

終わりに

ALSを利用するところはわりかしさくっとできました。
どちらかというと、アルゴリズムの選定や理解の方が厄介そうです。

それくらいAPIは素晴らしいので何かしら機械学習を試してみたい方は
sparkから始めてもよいとおもいました。

こちらに試せるアルゴリズムが紹介されているのでご参照ください。

次回は、「mySQL」とつなぐ、仮想サーバを用いて分散処理を試してみる
のどちらかを書こうと思います。

おわり

30
30
1

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
30
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?