H2O 소개 및 간단한 사용법

안녕하세요. 여러분

제가 소개할 패키지는 h2o입니다.

지난 번 페이스북에서도 말씀드렸듯이 h2o는 java 기반의 머신러닝/AI 플랫폼인데요.

제가 처음 h2o를 사용했던 건 2016년 10월부터 사용하기 시작했는데 그 때 버전이 2.x.x.x 대였습니다.

그런데 그 때 당시 h2o를 소개하는 documentation이 너무 산재되어있어서 사용했을 때 많이 힘들었습니다.

참 마약같은 패키지라고 생각이 들었던건.. 사용하기 힘들었는데도 불구하고 지금도 계속 사용중인데요.

초반에는 뭐가 뭔지 잘 모르실수 있지만, 익숙해지면 여러분들도 편하게 머신러닝을 이용하여 모델링 하실수 있습니다.

물론 제가 이해한게 틀릴 수도 있다는 점 반드시 유의해주시기 바랍니다.

틀린 부분, 오타, 개선점 등 알려주시면 감사하겠습니다.


h2o 사용을 위한 환경셋팅

  • 사용하기 위해서는 먼저 설치를 해야겠죠?
  • 설치를 위해서는 먼저 java jdk를 설치하셔야 합니다.
  • java jdk version은 1.7 ~ 1.8 로 하셔야합니다.
  • 1.6.x 버전의 경우 되기는하지만 소스로 컴파일링 하거나 예전 h2o 버전을 사용하셔야합니다.
  • 1.9.x 버전의 경우 아직 지원되지 않는 걸로 알고있습니다. (확인중입니다.)
  • 그리고 OS의 경우 64 bit를 권장합니다.
    • 32bit인 경우에도 사용은 가능하지만, 메모리 사용량이 4GB로 제한되기 때문입니다.

1. java jdk 설치하기

  • In centos 7,
$ sudo yum install java-1.8.0-openjdk
  • In ubuntu 14.04/16.04,
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

2. java jdk 경로 잡아주기

  • R에서 Sys.setenv함수를 이용해서 java jdk 경로를 잡아주시거나,
  • 컴퓨터에서 환경변수 셋팅을 해주시면 됩니다.

In R, Setting environment variable abount java jdk

Sys.setenv("JAVA_HOME"=java_jdk_설치_경로)
Sys.setenv("PATH" = paste(Sys.getenv("PATH"), "java_jdk_설치_경로", sep = ":"))

In linux,

$ export JAVA_HOME=java_jdk_설치_경로
$ export PATH=java_jdk_설치_경로/bin:$PATH

3. h2o 설치하기

  • h2o 설치는 아래와 같은 명령어로 하시면 되겠습니다.
# 이전 버전의 h2o    패키지가 있다면, 이전 h2o는 삭제
if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }

# h2o 설치를 위한    의존성 패키지들    설치
pkgs <- c("RCurl","jsonlite")
for (pkg in pkgs) {
if (! (pkg %in% rownames(installed.packages()))) { install.packages(pkg) }
}

# 가장 최신버전의  h2o 설치하기 (source 타입)
install.packages("h2o", type="source", repos="http://h2o-release.s3.amazonaws.com/h2o/rel-wheeler/4/R")
  • 참고로 RCurl 패키지는 Linux 상에서 curl관련 패키지를 먼저 설치하셔야합니다.
  • cran에 등록된 h2o를 설치하고싶으시다면, 아래와 같은 명령어를 실행하시면 됩니다.
install.packages("h2o")


h2o 사용하기

1. R과 h2o 연결하기

  • h2o 설치를 끝냈으니, 한번 h2o를 사용해보겠습니다.
  • h2o.init함수를 통해 h2o를 R과 연결해보도록 하겠습니다.
require(h2o)
h2o.init(nthreads = 3, max_mem_size = "8g")
 Connection successful!

R is connected to the H2O cluster: 
    H2O cluster uptime:         29 minutes 21 seconds 
    H2O cluster version:        3.16.0.2 
    H2O cluster version age:    2 months and 12 days  
    H2O cluster name:           H2O_started_from_R_agilesoda_vde385 
    H2O cluster total nodes:    1 
    H2O cluster total memory:   7.09 GB 
    H2O cluster total cores:    12 
    H2O cluster allowed cores:  3 
    H2O cluster healthy:        TRUE 
    H2O Connection ip:          localhost 
    H2O Connection port:        54321 
    H2O Connection proxy:       NA 
    H2O Internal Security:      FALSE 
    H2O API Extensions:         Algos, AutoML, Core V3, Core V4 
    R Version:                  R version 3.4.3 (2017-11-30) 
  • 위 메세지를 하나씩 보도록 하겠습니다. (모르는 것은 건너뛰었습니다.)
  • Starting H2O JVM and connecting: ... Connection successful!
    • ==> H2O를 시작하고 연결하는중이라는 메세지로 “Connection successful!”이 뜨면 연결성공입니다.
  • R is connected to the H2O cluster:
    • ==> R이 H2O 클러스터에 연결되었으며, 아래는 어떤 클러스터에 연결되었는지 정보를 보여줍니다.
  • H2O cluster uptime : 연결시 걸린 시간
  • H2O cluster version : h2o의 version
  • H2O cluster version age : h2o의 현재 version이 나오고 난 후 지난 일수
  • H2O cluster name : h2o cluster의 이름
  • H2O cluster total nodes : 현재 h2o cluster의 노드 수
  • H2O cluster total memory : h2o의 사용 메모리 (default : 64bit의 경우 메모리사용량은 “총용량 / 4” 입니다.)
  • H2O cluster total cores : 총 thread 갯수 (core로 되어있는데 h2o상에서는 thread하나를 core하나로 봄)
  • H2O cluster allowed cores : 사용중인 thread 갯수
  • H2O Connection ip : 현재 연결된 h2o cluster의 ip정보
  • H2O Connection port : 현재 연결된 h2o cluster의 port정보
  • h2o.init함수의 arguments는 아래 사이트에 자세히 나와있습니다.
  • 제가 주로 사용하는 h2o.init의 arguments는 다음과 같습니다.
    • nthreads : h2o를 시작할때 cpu의 사용할 thread 갯수를 지정하는 argument입니다. -1은 cpu의 threads를 전부 사용한다는 의미입니다. (default: -1)
    • ip : h2o 실행시 사용할 ip주소입니다. Local에 연결시 localhost로 잡힙니다.
    • port : h2o 실행시 사용할 port 숫자입니다. (default: 54321)
    • max_mem_size : 사용할 메모리의 최대사이즈를 지정합니다. 2MB이상 설정해야합니다. ( ex “200M” or “6g” )
    • min_mem_size : 사용할 메모리의 최소사이즈를 지정합니다. 2MB이상 설정해야합니다. ( ex “200M” or “3g” )
  • h2o의 Web UI도 같이 확인할 수 있습니다.
  • 웹 브라우저상에 localhost:54321 이라고 치면 아래와 같은 화면이 나옵니다.

2. h2o 상에 데이터 올리기

  • h2o의 머신러닝 알고리즘을 사용하기 위해서는 데이터도 h2o상에 올라와야합니다.
  • 여기서 표현되는 “h2o 상에”라는 표현은 JVM상에 object를 보내는 정도로 이해하시면 됩니다.
  • 데이터를 올리는 방식은 크게 2가지로 나눌수 있습니다.
    • 데이터를 R로 불러들인 후 as.h2o함수 이용
    • h2o.importFile함수 이용

as.h2o 함수 이용

  • 우리의 영원한 example data인 iris 데이터를 h2o에 올려보도록 합시다.
data(iris)
iris_h2o <- as.h2o(iris, destination_frame = "iris_h2o")

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
  • 실제로 올라갔는지 확인해보도록합시다.
h2o.ls()
       key
1 iris_h2o
  • h2o.ls 함수는 h2o상에 올라간 objects를 확인하는 함수입니다.
  • 출력된 결과를 보면 key라는 컬럼이 생성되는데요. 이는 h2o는 Key/Value 방식으로 objects를 올리기때문입니다.
  • Key값을 참조하여 해당 Value, 즉, Object에 접근하는 방식입니다.
  • as.h2o 함수나 h2o.importFile 함수내 argument중 destination_frame이 있는데 이게 key를 설정하는 것입니다.
  • 저는 R상에서 h2o object를 가리키는 key이름과 동일하게 R object의 이름을 설정합니다.
  • 동일하게 설정 안하셔도 되긴하지만, 분석 및 모델링을 많이 하시다보면 어떤 이름으로 설정했는지 무척 헷갈리는 경우가 있습니다. (저만 그럴수도..ㅠㅠ)

  • 왠만하면 동일하게 설정하시는 걸 추천드립니다.
  • h2o Web UI 상에서 iris 데이터가 올라갔는지 확인
    • getFrames 버튼을 누르시고,
    • iris_h2o를 누르시면 아래와 같이 화면이 뜹니다.
  • 위에 UI상으로 데이터를 확인하면 각 컬럼별로 type을 확인할 수 있습니다.
    • real : 실수형
    • int : 정수형
    • enum : R에서의 factor형과 같음. 주로 범주형변수를 나타낼때 사용
    • char : 문자형.
  • R에서의 iris_h2o 오브젝트는 어떤 class를 가지는지 확인하면 다음과 같습니다.
class(iris_h2o)
[1] "H2OFrame"
head(iris_h2o)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
tail(iris_h2o)
  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          6.7         3.3          5.7         2.5 virginica
2          6.7         3.0          5.2         2.3 virginica
3          6.3         2.5          5.0         1.9 virginica
4          6.5         3.0          5.2         2.0 virginica
5          6.2         3.4          5.4         2.3 virginica
6          5.9         3.0          5.1         1.8 virginica
  • iris 데이터가 h2o 상에 잘 올라간 것을 확인할 수 있습니다.
  • 만일 iris_h2o의 구조를 R에서 확인하고 싶다면, str함수를 이용하시면 됩니다,
str(iris_h2o)
Class 'H2OFrame' <environment: 0x000000001e57f1b8> 
 - attr(*, "op")= chr "Parse"
 - attr(*, "id")= chr "iris_h2o"
 - attr(*, "eval")= logi FALSE
 - attr(*, "nrow")= int 150
 - attr(*, "ncol")= int 5
 - attr(*, "types")=List of 5
  ..$ : chr "real"
  ..$ : chr "real"
  ..$ : chr "real"
  ..$ : chr "real"
  ..$ : chr "enum"
 - attr(*, "data")='data.frame':    10 obs. of  5 variables:
  ..$ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9
  ..$ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1
  ..$ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5
  ..$ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1
  ..$ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1
n_rows <- nrow(iris_h2o)
n_cols <- ncol(iris_h2o)
print(paste0("행의 개수 : ", n_rows))
[1] "행의 개수 : 150"
print(paste0("열의 개수 : ", n_cols))
[1] "열의 개수 : 5"

h2o.importFile 함수 이용

  • 이번에는 csv 파일을 바로 h2o 상에 올리는 것을 해보도록합시다.
  • 역시 iris 데이터를 이용할 건데요. h2o 패키지의 extdata폴더내에 있는 iris.csv를 직접 가져오도록합시다.

  • 먼저 path를 잡아줍니다.

irisPath <- system.file("extdata", "prostate_folder", package = "h2o")
  • 그런 다음 h2o.importFile함수를 이용해서 key 이름을 iris_h2o_imp로 하여 가져오겠습니다.
iris_h2o_imp <- h2o.importFile(irisPath, destination_frame = "iris_h2o_imp")

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
h2o.ls()
           key
1     iris_h2o
2 iris_h2o_imp
  • 더 구체적으로 확인하고 싶으시다면, iris_h2o를 확인했던 과정처럼 한번 해보세요.


3. h2o로 모델링 해보기

  • 이번에는 h2o 패키지를 이용해서 모델링을 한번 수행해보는 작업을 해봅시다.
  • 모델링을 위해서는 데이터를 training set과 test set으로 나누어야 하는데요.
  • h2o로도 가능하지만, 여기서는 R로 나눈 후 각 set을 h2o 상에 올린 뒤에 모델링을 수행해보도록 하겠습니다.
  • 여러분들이 실제로 분석 및 모델링을 하실때는 탐색과정 및 핸들링 등 다양한 작업을 수행하셔야합니다!
  • iris 데이터를 이용해서 Species(꽃의 종류)를 분류하는 모델을 만들어보도록 하겠습니다.
  • 사용할 모델은 3가지 입니다.
    • GLM (for logistic regression) : h2o.glm
    • Random Forest : h2o.randomForest
    • Gradient Boosting Machine : h2o.gbm

데이터 나누기

  • iris 데이터를 7:3으로 하여 train set과 test set으로 구분하겠습니다.
set.seed(1234)
train_idx <- sample(1:nrow(iris), size = 0.7 * nrow(iris), replace = FALSE)
train_iris <- iris[train_idx, ]
test_iris <- iris[-train_idx, ]
  • 확인하는 김에 Species라는 변수의 level 비율들도 확인했습니다.
with(train_iris, prop.table(table(Species)))
Species
    setosa versicolor  virginica 
 0.3714286  0.2761905  0.3523810 
with(test_iris, prop.table(table(Species)))
Species
    setosa versicolor  virginica 
 0.2444444  0.4666667  0.2888889 
train_iris_h2o <- as.h2o(train_iris, "train_iris_h2o")

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
test_iris_h2o <- as.h2o(test_iris, "test_iris_h2o")

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
  • train set과 test set을 as.h2o를 이용하여 h2o 상에 데이터를 올렸습니다.

사용할 변수지정

  • 모델링시 사용할 변수를 지정하여 argument로 넣어줘야합니다.
  • 만일 Target 변수를 알고있고, Target을 제외한 나머지를 전부 feature로 넣고 싶다면, 다음과 같이 코드를 짤 수 있습니다.
target <- "Species"
features <- names(train_iris)[!names(train_iris) %in% target]

모델링하기전 알아야 하는 공통 arguments

  • h2o를 이용하여 Supervised 모델을 생성할때 기본적으로 자주 사용되는 공통적인 arguments가 있습니다.
  • arguments는 아래와 같습니다. (단, 각각의 알고리즘마다 arguments가 다를 수 있다는 점을 유의합시다.)
  • x :
    • feature 혹은 설명변수의 이름이나 위치가 들어가는 부분입니다.
    • iris에서는 1:4 혹은 c(“Sepal.Length”, “Sepal.Width”, “Petal.Length”, “Petal.Width”)로 셋팅하시면 됩니다.
  • y :
    • target 혹은 반응변수의 이름이나 위치가 들어가는 부분입니다.
    • iris에서는 5 혹은 c(“Species”)로 셋팅하시면 됩니다.
  • training_frame :
    • H2OFrame class로 된 training set이 들어갑니다.
    • 여기서는 train_iris_h2o로 셋팅하시면 됩니다.
  • model_id :
    • 현재 모델에 대한 id가 들어갑니다.
    • 원하시는 대로 셋팅하시면되는데, 저는 주로 R object 이름과 동일하게 합니다.
    • 셋팅하지 않으셔도 되긴합니다만.. 엄청난 혼돈이 오실수 있습니다.
    • 셋팅하지 않으면 id를 자기 마음대로 지정해버립니다.
  • validation_frame :
    • H2OFrame class로 된 validation set이 들어갑니다.
    • 여기서는 validation set을 나누지 않아서 셋팅하지 않았습니다.
    • 원하시면, validation set도 나누어서 셋팅하시면 됩니다.
  • nfolds :
    • cross-validation 방식 중 k-folds의 k값을 지정합니다.
    • 5-folds를 원한다면, 5 라고 셋팅하시면 됩니다.
  • seed :
    • seed값을 정합니다.
    • 그러나 이 seed가 먹히는 상황은 nthread를 1로 했을때 뿐입니다.
  • keep_cross_validation_predictions :
    • cross-validation을 하면서 생성되는 예측값들을 그대로 유지시킬건지 말지에 대한 argument입니다.
    • 유지하고 싶다면 TRUE, 그렇지 않다면 FALSE로 셋팅하시면 됩니다.
  • keep_cross_validation_fold_assignment :
    • nfold cross validation 적용시 데이터를 나누는 것을 유지할것인지 말것인지에 대한 argument입니다.
    • 유지하고 싶다면 TRUE, 그렇지 않다면 FALSE로 셋팅하시면 됩니다.
  • fold_assignment :
    • nfold cross validation 적용 + fold_column이 정해지지 않았을시에만 사용가능하며,
    • 데이터를 어떻게 나눌것인지를 나타냅니다.
    • “Auto”, “Random”, “Modulo”, “Stratified” 가 있는데 “Auto”가 default입니다.

h2o.glm함수를 이용한 multinomial logistic regression modeling

  • multinomial logistic regression 으로 모델링을 하려면 아래와 같이 하면 됩니다.
glm_model <- h2o.glm(x = features, y = target, training_frame = train_iris_h2o, 
    model_id = "glm_model", family = "multinomial")

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
summary(glm_model)
Model Details:
==============

H2OMultinomialModel: glm
Model Key:  glm_model 
GLM Model: summary
       family        link                                regularization
1 multinomial multinomial Elastic Net (alpha = 0.5, lambda = 9.091E-4 )
  number_of_predictors_total number_of_active_predictors
1                         15                          11
  number_of_iterations training_frame
1                   27 train_iris_h2o

H2OMultinomialMetrics: glm
** Reported on training data. **

Training Set Metrics: 
=====================

Extract training frame with `h2o.getFrame("train_iris_h2o")`
MSE: (Extract with `h2o.mse`) 0.0136285
RMSE: (Extract with `h2o.rmse`) 0.1167412
Logloss: (Extract with `h2o.logloss`) 0.05376167
Mean Per-Class Error: 0.02050326
Null Deviance: (Extract with `h2o.nulldeviance`) 229.0628
Residual Deviance: (Extract with `h2o.residual_deviance`) 11.28995
R^2: (Extract with `h2o.r2`) 0.9811617
AIC: (Extract with `h2o.aic`) NaN
Confusion Matrix: Extract with `h2o.confusionMatrix(<model>,train = TRUE)`)
=========================================================================
Confusion Matrix: Row labels: Actual class; Column labels: Predicted class
           setosa versicolor virginica  Error      Rate
setosa         39          0         0 0.0000 =  0 / 39
versicolor      0         28         1 0.0345 =  1 / 29
virginica       0          1        36 0.0270 =  1 / 37
Totals         39         29        37 0.0190 = 2 / 105

Hit Ratio Table: Extract with `h2o.hit_ratio_table(<model>,train = TRUE)`
=======================================================================
Top-3 Hit Ratios: 
  k hit_ratio
1 1  0.980952
2 2  1.000000
3 3  1.000000





Scoring History: 
            timestamp   duration iterations negative_log_likelihood
1 2018-02-12 09:18:42  0.000 sec          0               114.53139
2 2018-02-12 09:18:42  0.027 sec          1                36.34931
3 2018-02-12 09:18:42  0.037 sec          2                18.91843
4 2018-02-12 09:18:42  0.044 sec          3                10.48414
5 2018-02-12 09:18:42  0.052 sec          4                 7.25499
  objective
1   1.09078
2   0.35270
3   0.19200
4   0.11946
5   0.09644

---
             timestamp   duration iterations negative_log_likelihood
23 2018-02-12 09:18:42  0.142 sec         22                 5.64806
24 2018-02-12 09:18:42  0.146 sec         23                 5.64597
25 2018-02-12 09:18:42  0.150 sec         24                 5.64656
26 2018-02-12 09:18:42  0.153 sec         25                 5.64613
27 2018-02-12 09:18:42  0.156 sec         26                 5.64532
28 2018-02-12 09:18:42  0.160 sec         27                 5.64498
   objective
23   0.08774
24   0.08773
25   0.08771
26   0.08770
27   0.08769
28   0.08768

Variable Importances: (Extract with `h2o.varimp`) 
=================================================

Standardized Coefficient Magnitudes: standardized coefficient magnitudes
         names coefficients sign
1 Petal.Length    10.224789  POS
2  Petal.Width    10.100105  POS
3  Sepal.Width     3.374344  POS
4 Sepal.Length     2.011965  POS
  • “glm_model” 이란 이름으로 h2o의 glm 모델을 만들었으며, summary 함수를 통해 model의 정보를 확인하실수 있습니다.
pred_iris_glm <- as.data.frame(h2o.predict(glm_model, newdata = test_iris_h2o))

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
test_iris$pred_glm <- pred_iris_glm$predict
  • glm_model을 이용하여 test set의 예측값들을 구하고 test_iris에 Predict라는 컬럼으로 예측값을 추가하였습니다.
with(test_iris, table(Species, pred_glm, dnn = c("Real", "Predict")))
            Predict
Real         setosa versicolor virginica
  setosa         11          0         0
  versicolor      0         20         1
  virginica       0          0        13
  • iris 데이터의 feature가 좋았나봅니다.

h2o.randomForest함수를 이용한 Random Forest modeling

  • 이번에는 랜덤포레스트 모델을 생성하였습니다.
  • tree갯수는 100개로 지정하였습니다.
rf_model <- h2o.randomForest(x = features, y = target, training_frame = train_iris_h2o, 
    model_id = "rf_model", ntrees = 100)

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
pred_iris_rf <- as.data.frame(h2o.predict(rf_model, newdata = test_iris_h2o))

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
test_iris$pred_rf <- pred_iris_rf$predict
with(test_iris, table(Species, pred_rf, dnn = c("Real", "Predict")))
            Predict
Real         setosa versicolor virginica
  setosa         11          0         0
  versicolor      0         20         1
  virginica       0          1        12

h2o.gbm 함수를 이용한 Gradient Boosting Machine modeling

  • 이번에는 GBM 모델을 생성하였습니다.
  • tree갯수는 100개로 지정하였습니다.
gbm_model <- h2o.gbm(x = features, y = target, training_frame = train_iris_h2o, 
    model_id = "gbm_model", ntrees = 100)

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |====                                                             |   6%
  |                                                                       
  |=================================================================| 100%
pred_iris_gbm <- as.data.frame(h2o.predict(gbm_model, newdata = test_iris_h2o))

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%
test_iris$pred_gbm <- pred_iris_gbm$predict
with(test_iris, table(Species, pred_gbm, dnn = c("Real", "Predict")))
            Predict
Real         setosa versicolor virginica
  setosa         11          0         0
  versicolor      0         20         1
  virginica       0          1        12

Web UI상에서 모델 확인해보기

  • 랜덤포레스트 모델을 h2o Web UI 상에서 확인하면 아래와 같습니다.
  • Web UI상에서 getModels를 누르면 위와 같은 화면이 나옵니다.
  • 그중 rf_model을 누르면 Random Forest 모델 정보를 확인할 수 있습니다.
  • Loss graph와 변수중요도(variable importance)도 확인가능하군요.
  • train set의 confusion matrix도 확인가능합니다.

Summary

  • 지금까지 내용을 간단하게 요약해보겠습니다.
  • h2o는 Java Virtual Machine에서 실행되는 머신러닝/AI 플랫폼입니다.
  • h2o를 사용하기 위해서는 먼저 java jdk (1.7.x ~ 1.8.x)을 설치해야합니다.
  • h2o.init함수를 이용해서 R과 h2o를 연결합니다.
  • 연결시 thread 갯수, 최대 및 최소 메모리 사이즈 등을 지정할 수 있습니다.
  • 모델 생성을 하려면 당연히 데이터가 필요한데 그 데이터도 h2o상에 올려야합니다.
  • 이때, h2o상에서는 Key/Value방식으로 object에 접근할 수 있습니다.
  • h2o.<알고리즘이름> 계열 함수를 이용하면 모델링을 할 수 있습니다.
  • h2o Web UI 상에서도 데이터 및 모델 확인 등이 가능합니다.

2018-02-12