Rのパッケージh2oは、さまざまなクラスタ環境内のニューラルネットワーク(ディープラーニング)、ランダムフォレスト、勾配ブースティングマシン、一般化線形モデルなどの並列分散機械学習アルゴリズムを計算するビッグデータのためのオープンソースの数学エンジンH2O用のRスクリプト機能です。

ここでは、ubuntu14.04環境下でh2oパッケージのインストールの仕方についてお伝えします。

インストール手順

まず最初に、端末(ターミナル)上で次のコマンドを実行します。
これは、h2oパッケージの依存パッケージであるRCurlをインストールする場合に必要となるライブラリです。すでにRCurlパッケージがインストールされている場合は次のコマンドは不要です。


sudo apt-get install libcurl4-openssl-dev

次に、H2Oはjava上で動作するため、java環境を準備する必要があります。
ここでは、openjdk-7-jreを使うことにします。
すでに、OracleJavaやJDK7以上がインストールされている場合は次のコマンドは不要です。
次のコマンドの意味は、openjavaのバージョンが7で、開発環境がない実行環境のみのjavaをインストールするということです。


sudo apt-get install openjdk-7-jre

次にRまたはRStudioを立ち上げて、次のコマンドを実行します。
これでインストールは完了です。


install.packages("h2o")

ディープラーニングのデモを試す

h2oのディープラーニングをデモで見てみます。


# h2oパッケージをロード
library(h2o)

# ディープラーニングのデモを実行
demo(h2o.deeplearning)

デモの結果は次のようになる。




	demo(h2o.deeplearning)
	---- ~~~~~~~~~~~~~~~~

Type  	 to start : 

> # This is a demo of H2O's Deep Learning function
> # It imports a data set, parses it, and prints a summary
> # Then, it runs Deep Learning on the dataset
> # Note: This demo runs H2O on localhost:54321
> library(h2o)

> localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE)

H2O is not running yet, starting it now...

Note:  In case of errors look at the following log files:
    /tmp/RtmpHWhpgE/h2o_system_developer_started_from_r.out
    /tmp/RtmpHWhpgE/h2o_system_developer_started_from_r.err

java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-0ubuntu0.14.04.2)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

..Successfully connected to http://localhost:54321/ 

R is connected to H2O cluster:
    H2O cluster uptime:         4 seconds 85 milliseconds 
    H2O cluster version:        3.0.0.22 
    H2O cluster name:           H2O_started_from_R_system-developer_uul730 
    H2O cluster total nodes:    1 
    H2O cluster total memory:   0.63 GB 
    H2O cluster total cores:    1 
    H2O cluster allowed cores:  1 
    H2O cluster healthy:        TRUE 

Note:  As started, H2O is limited to the CRAN default of 2 CPUs.
       Shut down and restart H2O as shown below to use all your CPUs.
           > h2o.shutdown(localH2O)
           > localH2O = h2o.init(nthreads = -1)


> prostate.hex = h2o.uploadFile(localH2O, path = system.file("extdata", "prostate.csv", package="h2o"), destination_frame = "prostate.hex")
  |============================================================================================================================================================================| 100%

> summary(prostate.hex)
 ID               CAPSULE          AGE             RACE            DPROS           DCAPS           PSA               VOL             GLEASON        
 Min.   :  1.00   Min.   :0.0000   Min.   :43.00   Min.   :0.000   Min.   :1.000   Min.   :1.000   Min.   :  0.300   Min.   : 0.00   Min.   :0.000  
 1st Qu.: 95.75   1st Qu.:0.0000   1st Qu.:62.00   1st Qu.:1.000   1st Qu.:1.000   1st Qu.:1.000   1st Qu.:  4.900   1st Qu.: 0.00   1st Qu.:6.000  
 Median :190.50   Median :0.0000   Median :67.00   Median :1.000   Median :2.000   Median :1.000   Median :  8.664   Median :14.20   Median :6.000  
 Mean   :190.50   Mean   :0.4026   Mean   :66.04   Mean   :1.087   Mean   :2.271   Mean   :1.108   Mean   : 15.409   Mean   :15.81   Mean   :6.384  
 3rd Qu.:285.25   3rd Qu.:1.0000   3rd Qu.:71.00   3rd Qu.:1.000   3rd Qu.:3.000   3rd Qu.:1.000   3rd Qu.: 17.063   3rd Qu.:26.40   3rd Qu.:7.000  
 Max.   :380.00   Max.   :1.0000   Max.   :79.00   Max.   :2.000   Max.   :4.000   Max.   :2.000   Max.   :139.700   Max.   :97.60   Max.   :9.000  

> # Set the CAPSULE column to be a factor column then build model.
> prostate.hex$CAPSULE = as.factor(prostate.hex$CAPSULE)

> model = h2o.deeplearning(x = setdiff(colnames(prostate.hex), c("ID","CAPSULE")), y = "CAPSULE", training_frame = prostate.hex, activation = "Tanh", hidden = c(10, 10, 10), epochs = 10000)
  |============================================================================================================================================================================| 100%

> print(model@model$model_summary)
Status of Neuron Layers:
     layer     units    type dropout       l1       l2 mean_rate rate_RMS momentum mean_weight weight_RMS mean_bias bias_RMS
1 1.000000  7.000000   Input  0.00 %                                                                                        
2 2.000000 10.000000    Tanh  0.00 % 0.000000 0.000000  0.006025 0.010133 0.000000   -0.068544   0.975921 -0.188694 0.486558
3 3.000000 10.000000    Tanh  0.00 % 0.000000 0.000000  0.015935 0.016414 0.000000    0.290550   1.529273  0.073799 0.793197
4 4.000000 10.000000    Tanh  0.00 % 0.000000 0.000000  0.018007 0.025610 0.000000   -0.146090   1.740220 -0.196112 1.467025
5 5.000000  2.000000 Softmax         0.000000 0.000000  0.009652 0.004613 0.000000    0.688943   4.818391  0.082278 1.215682

> # Make predictions with the trained model with training data.
> predictions = predict(object = model, newdata = prostate.hex)

> # Export predictions from H2O Cluster as R dataframe.
> predictions.R = as.data.frame(predictions)

> head(predictions.R)
  predict           p0           p1
1       0 1.000000e+00 1.768709e-11
2       0 9.991143e-01 8.856702e-04
3       0 1.000000e+00 2.899589e-12
4       0 9.995110e-01 4.890519e-04
5       0 1.000000e+00 1.784630e-10
6       1 2.741250e-25 1.000000e+00

> tail(predictions.R)
    predict          p0           p1
375       0 1.000000000 7.365224e-14
376       0 0.995499909 4.500029e-03
377       0 1.000000000 5.529978e-19
378       1 0.002203206 9.977968e-01
379       0 1.000000000 1.167493e-20
380       0 0.999924660 7.536520e-05

> # Check performance of classification model.
> performance = h2o.performance(model = model)

> print(performance)
H2OBinomialMetrics: deeplearning
** Reported on training data. **
Description: Metrics reported on temporary (load-balanced) training frame

MSE:  0.006801479
R^2:  0.9717961
LogLoss:  0.02699277
AUC:  0.9995105
Gini:  0.999021

Confusion Matrix for F1-optimal threshold:
         0   1    Error    Rate
0      225   2 0.008811  =2/227
1        1 152 0.006536  =1/153
Totals 226 154 0.007895  =3/380

Maximum Metrics:
                      metric threshold    value       idx
1                     max f1  0.104665 0.990228 94.000000
2                     max f2  0.104665 0.992167 94.000000
3               max f0point5  0.879355 0.996016 90.000000
4               max accuracy  0.879355 0.992105 90.000000
5              max precision  1.000000 1.000000  0.000000
6           max absolute_MCC  0.879355 0.983669 90.000000
7 max min_per_class_accuracy  0.104665 0.991189 94.000000

h2oでの使用が完了したら、次のコマンドでシャットダウンしておく。
シャットダウンしたら、h2o関連のオブジェクトの中身が見れなくなるので注意が必要だ。


h2o.shutdown(localH2O)
Are you sure you want to shutdown the H2O instance running at http://localhost:54321/ (Y/N)? y
[1] TRUE
R×Ubuntu h2oパッケージのインストールの方法