読者です 読者をやめる 読者になる 読者になる

六本木で働くデータサイエンティストのブログ

元祖「銀座で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木

Hadoop + HiveからUDFでお手軽に機械学習を回せるライブラリ"hivemall"がリリースされたとのこと

Hadoop Hive 機械学習

TL上にものすごーく刺激的な情報が飛び込んできたので、思わずご紹介。



ということで、ご本人のツイートにもあるようにGitHubに一式全て上がっています。ライセンスもLPGLなので自由に使えるという素晴らしさ。これ職場の分析マシンにもcloneしようかな(笑)。


Wikiページを見ると、このライブラリの使い方が書いてあるんですが。。。何が凄いって、何とHiveクエリを書く要領で機械学習まわりの演算を全て実行できてしまう!というところ。ちょっと失礼して、引用しながら見てみましょう。


インストール

1ページこっきり説明があって、たったのこれだけです(笑)。いや、UDFのjar使うだけなんで確かにそれはそうなんですが、それにしてもこれはめちゃくちゃ簡単!


実際の機械学習の実行コード


そしてもっと凄いのが、個々の実行コード。要はHiveに機械学習の演算をしてくれるUDFをぶち込んで回すだけなので*1、見た目には完全にただHiveクエリ書いているようにしか見えません。

ロジスティック回帰:学習

create table a9a_model1 
as
select 
 cast(feature as int) as feature,
 cast(avg(weight) as float) as weight
from 
 (select 
     logress(addBias(features),label,"-total_steps ${total_steps}") as (feature,weight)
  from 
     a9atrain
 ) t 
group by feature;

ロジスティック回帰:予測

create or replace view a9a_predict1 
as
select
  t.rowid, 
  sigmoid(sum(m.weight)) as prob,
  sum(m.weight) as total_weight,
  CAST((case when sum(m.weight) > 0.0 then 1.0 else 0.0 end) as FLOAT) as label
from 
  a9atest_exploded t LEFT OUTER JOIN
  a9a_model1 m ON (t.feature = m.feature)
group by
  t.rowid;


本当にたったのこれだけ。これはAmazon Elastic MapReduceでも使えるはずなので、AWSアカウントを持っている人でHiveならサクサク書けるという人なら、今すぐにでもHDFS上で分散処理による機械学習をお手軽に体験できるんじゃないでしょーか。


ところで何でこのライブラリに注目したのか


理由は簡単です。

  1. Javaでゴリゴリ書くのは辛くてもHive(QL)なら書けるという人は多い
  2. Hiveに限らずSQLのスキルは今後データサイエンティストに必須として習得する人が増えると思われる


要は、ノンプログラミングで何とかして分散処理をやりたい人の方が多いというのが僕の観測で*2、そのニーズにこのhivemallは絶対にマッチするだろうと思ってます。いやMahoutだって簡単じゃん!という人もいるだろうとは思いますが、Hiveだけで回せるというのはやっぱり楽ですよ。


ということで、機会があったらこのhivemallを是非自分でも試してみようと思います。いやむしろJavaコードの方を読んで勉強すべきかもしれませんが。。。

*1:さすがにUDFの入れ方ぐらいは皆さん知ってますよね?

*2:自前でMapperとReducer書いて回したことしかないとかいう御仁が毎日隣にいますが気にしない