H2O試してみた

# はじめに

以前からオープンソースの機械学習プラットフォームであるH2Oが気になっていたので、試しに使ってみました。データを投入して機械学習モデルを構築するところまでを紹介したいと思います。

# 環境

環境は次の通りです。H2Oを使うときに`java`を使うのでjavaのバージョンも示しています。

```shell
$sw_vers 
ProductName:	Mac OS X
ProductVersion:	10.13.6
BuildVersion:	17G9016

$java --version
java 10.0.2 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
```

# インストール

1 . 下のURLにアクセスします。
https://www.h2o.ai/download/#h2o

2 . 「DOWNLOAD H2O」ボタンをクリックして、ダウンロードします。今回使用したversion 3.28.0.1だと370MBくらいありました。
 
![Download_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/b47b6e22-6e2b-4c70-239a-88778eb88ca3.png)

3 . 上図にあるように`unzip`したあと`java`で実行します。

```shell

$ls
h2o-3.28.0.1.zip

$unzip h2o-3.28.0.1.zip 
Archive:  h2o-3.28.0.1.zip
   creating: h2o-3.28.0.1/
  inflating: h2o-3.28.0.1/h2o.jar    
   creating: h2o-3.28.0.1/bindings/
   creating: h2o-3.28.0.1/bindings/java/
 extracting: h2o-3.28.0.1/bindings/java/h2o-bindings-3.28.0.zip  
   creating: h2o-3.28.0.1/python/
  inflating: h2o-3.28.0.1/python/h2o-3.28.0.1-py2.py3-none-any.whl  
   creating: h2o-3.28.0.1/R/
  inflating: h2o-3.28.0.1/R/h2o_3.28.0.1.tar.gz  

$ls
h2o-3.28.0.1     h2o-3.28.0.1.zip

$java -jar h2o.jar 
（省略）
12-26 09:29:48.515 10.138.116.160:54321  9516   main      INFO: Registered: 186 REST APIs in: 785ms
12-26 09:29:48.517 10.138.116.160:54321  9516   main      INFO: Registered REST API extensions: [Amazon S3, XGBoost, Algos, AutoML, Core V3, TargetEncoder, Core V4]
12-26 09:29:49.113 10.138.116.160:54321  9516   main      INFO: Registered: 279 schemas in 591ms
12-26 09:29:49.113 10.138.116.160:54321  9516   main      INFO: H2O started in 3884ms
12-26 09:29:49.114 10.138.116.160:54321  9516   main      INFO: 
12-26 09:29:49.114 10.138.116.160:54321  9516   main      INFO: Open H2O Flow in your web browser: http://10.138.116.160:54321
12-26 09:29:49.114 10.138.116.160:54321  9516   main      INFO: 

```

4 . webブラウザで`localhost:54321`にアクセスするとH2Oの画面が表示されます。

![start_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/931e61ce-f271-29f5-9979-07bf9c19cbc1.png)

# モデル構築

上図の「Assistance」にある「importFiles」をクリック。
「Search」にファイルのパスを入力します。今回は[YellowBrickを紹介した記事](https://qiita.com/dyamaguc/items/ea678dbdbe518f4bf405)で扱ったシェアバイクのデータを使います。
その後「import」をクリックし、「Parse these files」をクリックします。

![import_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/a122b48d-c60d-ae63-bd97-7a91a9fcb04c.png)

ファイル読み込みの設定をします。この時点でデータの各項目や、最初の数行の内容を見ることができます。行と列が入れ替わっているように表示されます。下部の「Parse」をクリック。

![setup_parse_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/cff2dc35-786d-c234-21a7-5bd56aa2e61b.png)

データの基礎統計が表示されます。typeの「real」は要するにfloatかなと思います。
今回は何もせずに「Build Model」に進みます。

![parse_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/b5acfc98-ef5a-190d-5482-802cf6274b91.png)

アルゴリズムの選択や、目的変数を選択します。今回はアルゴリズムにXGBoostを、目的変数にridersを選択します。

![build_model_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/9211f38a-2864-d99d-47e0-03daeb895753.png)

なお、アルゴリズムは16個用意されていますが、Word2Vecのような自然言語処理で使うものも用意されていました。

![model_list_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/fd3510be-a2a1-f3d3-1b4b-2f5a15888d6e.png)


今回はデータ量が少ないこともあるせいか、1,2分で構築は終了しました。
学習時の収束していく様子や、各評価指標を確認することができます。

![model_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/8242a62c-c09c-a2e0-bfb3-08ffdc676249.png)

![model2_page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/cca6b8cd-b701-7eb8-2603-c9fbcd707fed.png)

# まとめ

プログラミング不要で機械学習モデルを簡単に構築することができました。
モデルの出力もできるので、モデルをデプロイするのも簡単だなと思いました。
今後機会があれば使っていきたいです。