Mahoutで体感する機械学習の実践

第1回 機械学習を実践する前の基礎知識

この記事を読むのに必要な時間:およそ 1.5 分

みなさん,次のようなことができたらいいと思ったことはありませんか?

  • 「顧客ごとに,適したタイミングと内容で,DMを送信できたら……」
  • 「CGM系サイトへの誹謗中傷なんかのスパム投稿を自動識別できたら……」
  • 「サーバの負荷が高まるタイミングを事前に予測できたら……」

一見するとこれらは実現していることがまったく異なりますが,じつはある共通点があります。それは「データを分析し,その結果を活用している」という点です。

Data is Kingの考えから得られるメリット

かつてAmazonに在籍していたRonny Kohaviは「Data is King at Amazon」と言い,データの重要性を説きました。事実,Amazonはユーザの購買履歴から商品のレコメンデーションを行い,ユーザのサイト内の遷移履歴やクリック率からサイト構造の改善を行うなど,データを徹底的に活用していることで知られています。

また最近では「ビッグデータ」という言葉の流行が示すように,大量のデータを分析し,それにより得られる知見を業務に利用する動きが以前にも増して盛んになっています。

このような,データを分析することでデータの中から思いがけない発見を得ることを総称して「データマイニング」と呼びます。

データマイニングにおける「機械学習」

それでは実際にデータマイニングを行うには,どうすればいいのでしょうか。

ひと口に「データマイニング」といっても,利用する手法にはさまざまなものがあります。その中でも一番身近なものと言うと,高校や大学でも触れる機会のある「統計学」でしょう。

しかし,統計学以外にもデータマイニングでよく利用され,かつとても強力な手法があります。それが「機械学習」です。

機械学習はもともと人工知能の分野で発達した技術で,その名のとおり,機械(コンピュータ)に学習能力を持たせるための技術です。機械学習は,そのアプローチから大きく2つに分けることができます。

教師あり学習

1つ目は「教師あり学習」と呼ばれる手法です。お手本となるデータ(これを「教師データ」と呼びます)を用意し,そのデータに沿って,解析対象のデータを判断します。

身近な例としては,メールソフトなどで利用されているスパムフィルタがあります。スパムフィルタの場合,スパムメールとスパムでないメールを教師データとしてあらかじめ用意し,それぞれに共通する特徴やパターンを導き出します。

そして新たにメールを受信した場合,教師データから導き出した特徴やパターンをもとに,スパムかスパムでないかを判断します。

教師なし学習

2つ目は「教師なし学習」と呼ばれる手法です。こちらは,判断するための教師データが与えられません。そのため,解析対象となるデータの中に存在する特徴だけをもとに,データを判断します。

身近な例としては,アンケート分析による顧客などのグループ分けがあります。この場合,回収したアンケートの回答内容に存在する特徴を探し出し,その特徴を基準に,顧客を似た者同士のいくつかのグループに分けていきます。

このように,機械学習は本来の人工知能の分野だけでなく,その特性を活かしてデータマイニングの分野でも利用されているのです。

機械学習を実装する際の問題を解決する「Mahout」

このように強力な可能性を秘めた機械学習ですが,ソフトウェアで実現するとなると,いくつか問題点が出てきます。

まず,機械学習のアルゴリズムを一から実装するとなると,機械学習のアルゴリズムを細部まで理解しなければなりません。

また,多くの機械学習のアルゴリズムの中から,それぞれの分析に最適なアルゴリズムを選択するためには,実際に分析を行い,その結果をもとに考察を行い,また別のアルゴリズムを試す……といったサイクルを回す必要が出てきます。この過程の中で,多くのアルゴリズムを実装する必要性があり,多くの工数がかかってしまいます。

しかし,これらの問題を解決するために,最近では機械学習のアルゴリズムを実装したライブラリがいくつか公開されています。その中でも,最近特に注目を浴びているのが,Apache Mahout(以下,Mahout)です。

MahoutはApache Software Foundationが公開しているOSSの機械学習アルゴリズムのライブラリで,多くのメジャーな機械学習のアルゴリズムが含まれています。また,現在も活発に開発が続けられており,今後さらにアルゴリズムや機能が追加され,改善されていくと期待されています。

このMahoutを利用することで,機械学習の複雑なアルゴリズムを一から実装する必要がなく,「とりあえず分析を行い,その結果から別のアルゴリズムでさらに分析を行う」というサイクルをより速く回すことができるようになります。

Hadoopを利用することで分散処理もかんたんに

機械学習を利用してデータマイニングを行う場合,分析の対象とするデータが大量であることが多くなります。また,利用する機械学習のアルゴリズムによっては計算量が非常に多くなるため,処理に時間がかかってしまうことが珍しくありません。

そのような問題を解決する手段の1つとして考えられるのが,複数台のマシンに処理を分散することです。

Mahoutの大きな特徴は,同じくApache Software FoundationがOSSとして公開しているApache Hadoop(以下,Hadoop)を内部で利用していることです。Hadoopにはすでに分散処理の機能が含まれているため,Mahoutを利用すれば,新たに分散処理を実装する必要がないというメリットがあります。

また,最近ではHadoopが普及しはじめており,利用する環境も多くなってきています。Hadoopの利用経験があれば,そのノウハウをMahoutの運用でも活かすことができるのは,実際の運用を考えると非常に魅力的ですね。

次回からは,このMahoutを使って,手を動かしながら機械学習を体感していきます。お楽しみに!

著者プロフィール

やまかつ(山下勝司)

開発/インフラ/統計,機械学習/プロジェクトマネージメントをこなす器用貧乏。最近はビッグデータ,Hadoop,機械学習あたりに夢中。

株式会社マーズフラッグ 先端研究開発本部所属。

趣味は妻と子供と過ごすこと。

Twitter:@yamakatu
Facebook:http://www.facebook.com/katsushi.yamashita.9

コメント

コメントの記入