H2Oでお試しディープラーニング

ディープラーニングとは?

以前の記事で重回帰を用いたモデル化の紹介をしました。

この時は、目的とするパラメータに対して関連の高い(と思われる)パラメータを自分で選択してモデルを構築。モデルが正しくなければ試行錯誤を繰り返す必要がありました。

これは非常に属人性の高い業務で、慣れている人であれば単なる「作業」ですが、
この「作業」をできるようになるまでには長い修練が必要となることが多いです。

ところが近年、この分野で革命が起きています。
「ディープラーニング」という技術のおかげでコンピューターが自動でデータから特徴を抽出してくれるようになりました。

ディープラーニングとはニューラルネットワークを進化させた機械学習の手法の一種で、
下記のような特徴があります。

  • 他の機械学習技術では達成できないレベルの精度を実現できる。
  • 特徴量(パラメータ)の抽出は自動化されて人がルールを記述する必要がない。

一言でいうと、データを用意すれば高い精度で予測モデルが自動で作成されるという事。
暴力的に言うと高い精度のモデルができなければ「データが悪い」という事になります。

ディープラーニングを試したい

ディープラーニングは2012年から始まったまだ新しい技術ですが、
既にGoogleやFacebookなどの多くの企業で実運用され、いくつかのパッケージも存在しています。

ただし、どのパッケージでもPythonなどのプログラミング言語でコーディングが必要になることが多いです。
この記事では「とりあえずディープラーニングを試してみたい」という方向けにH2Oというパッケージをご紹介します。

H2Oとは?

インメモリプラットフォームとしてHadoop上やSpark上でも動作可能な機械学習フレームワークであり、オープンソースかつ、商用可能なアパッチライセンスで配布されています。
特徴的なのはWeb-UI上で解析が可能なので、ノンコーディングで動作確認できます。

H2Oの入手

H2Oパッケージはこちらからダウンロード可能です。

スクロールして左下にある
「Download H2O Latest Stable Release」をクリックしてください。

「DOWNLOAD H2O」をクリック
ここでユーザー情報などを入力する画面が表示されますが、
特に入力しなくてもダウンロードが始まります。

ダウンロードが完了したら
任意の場所で解凍します。
私はCドライブ直下に置きました。

このh2o.jarが本体です。

H2Oの起動

解凍が終わったらH2Oを起動します。
Windowsのコマンドプロンプトを起動して
cd C:\h2o-3.10.3.5
java -jar h2o.jar

のように実行します。

javaが必要になるので無い方は事前にインストールが必要です。

これでH2Oが起動しました。
お手持ちのブラウザから
http://localhost:54321
へアクセスしてみてください。

H2O Flow画面が表示できているはずです。

モデリング

こちらから実際のモデリングに取り掛かってみます。
皆さんが自分のデータで実行したい場合は下記のようなデータをご用意ください。

一つの「目的変数」と多数の「従属変数」からなるデータです。
ディープラーニングは既存のデータを学習して、予測モデルを作成してくれます。
目的変数は最終的な目的にしたいカラム。
例えば製造業でしたら不良だった/そうでなかったのか
小売りでしたら、顧客が買った/買わなかった
などです。
対して従属変数は、目的変数に関連するであろうパラメータ群です。

不良に関するパラメータだと、製造時の温度や材質などが考えられます。
従属変数は多い方が良いです。

注意事項

ここでアドバイスがあります

  • Null値(空白)は除いておいてください。
  • 日本語はカラムもデータも避けてください。

日本語は対策があるのかもしれませんが、文字化けしますし(内部的にはちゃんと保持している)割とエラーが出ますので、事前に英数字などに置換しておくのをお勧めします。

とりあえず動作だけ試したいという方は
Irisのデータを使ってください。

アヤメの萼(がく)片と花弁のサイズ、種のデータになります。
このデータにはカラム名が無いため
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
を一行目に追加してください。

種が目的変数でそれ以外は従属変数です。
こちらをiris.csvという名前で保存します。

データのインポート

H2O FlowのDataから「Import Files」を選択します。

Searchにc:\tmp\h2o\iris.csvのように手入力すると
候補が表示されますので+をクリックします。

ファイルが選択されたので、Importを押します。

パースの確認が表示されます。
区切り文字やデータの型、ヘッダーなどの設定と最初の数行を確認できます。
問題なければParseボタンを押します。

JOBが完了しiris.hexという名前でデータが内部的に保存されます。
Viewを押すと内容を確認できます。

データの統計値が確認できます。
ここからモデルを作成したいので
「Build Model」をクリックします。

モデル構築のアルゴリズムを選択することができます。

Deep Learningを選択して下さい。

H2Oはディープラーニング以外にも複数のアルゴリズムをサポートしています。

教師あり学習
  • Generalized Linear Modeling (GLM)
  • Gradient Boosting Machine (GBM)
  • Deep Learning
  • Distributed Random Forest
  • Naive Bayes
  • Stacked Ensembles
教師なし学習
  • Generalized Low Rank Models (GLRM)
  • K-Means Clustering
  • Principal Components Analysis (PCA)

モデル構築

モデルを選択すると下記画面が表示されます。
最低限選択しなければならないのは
validation_frameとresponse_columnです。

validation_frame

H2Oはモデル構築後にモデル構築に使用したデータ以外の同一フォーマットデータを使用して検証を行います。
Aというデータを元にモデルを作成したは良いが、Aに特化したモデルを作成してしまうと、別の日のBというデータに対して当てはめた時に結果が悪くなります(これを過学習といいます)。
過学習が起きた場合は、activationで設定されている活性化関数をDropoutありの物に変更するなどパラメータを調整する必要があります。

今回は元データと同じiris.hexを指定しておきます。

respose_column

目的変数です。モデルを構築する目的となるカラムを選択します。
既定ではこちらで選択されている以外のカラムは全て従属変数として扱われます。
必要ないカラムがある場合はignored_columnsでチェックを入れてください。

irisでは種である「Species」を選択します。

設定が終わったら左下の「Build Model」を押します。
データが大きい場合はかなりの時間がかかります。

JOBが終了すると結果が表示されます。

Viewを押して結果を確認しましょう。

結果確認

重要なのは下に表示されているクロス集計です。
2つの表があり、上の表は学習時の結果、下の表は検証時の結果です。
上下で結果に大きな隔たりがあれば過学習を疑ってよいでしょう。
今回は同じデータを使っているので同じ結果です。

縦が実際の値で横が予測された値です。
黄色のセルが正解で、それ以外は予測が外れたものです。
最終的な結果は右下のError 0.0267 , 4 / 150を見ます。
今回のモデルでは150のデータの内4つは実際の種を当てることはできませんでしたが、
97パーセント以上の確率で適合するモデルとなっています。

言い換えるとアヤメの萼片と花弁のサイズがわかれば、97パーセントの確率で種が推定できるという事です。

ディープラーニングはランダムに与えられる初期値が割と重要で、
いつも同じ結果が出るとは限りませんので実行する毎に異なる正解率が出ます。
この辺りも機械っぽくなくて好感が持てます。

今回はとりあえずディープラーニングを試してみたいという方向けに一番簡単な方法で試してみました。
実際のデータで試してみようと思う場合、データ収集に苦労されるケースが多いと思いますし、
大きなデータでは学習もかなり時間がかかるとは思いますが、まずはディープラーニングがどのような物で、何が革命なのか、少しでも分かっていただければと思います。