H2O 소개 및 간단한 사용법
안녕하세요. 여러분
제가 소개할 패키지는 h2o입니다.
지난 번 페이스북에서도 말씀드렸듯이 h2o는 java 기반의 머신러닝/AI 플랫폼인데요.
제가 처음 h2o를 사용했던 건 2016년 10월부터 사용하기 시작했는데 그 때 버전이 2.x.x.x 대였습니다.
그런데 그 때 당시 h2o를 소개하는 documentation이 너무 산재되어있어서 사용했을 때 많이 힘들었습니다.
참 마약같은 패키지라고 생각이 들었던건.. 사용하기 힘들었는데도 불구하고 지금도 계속 사용중인데요.
- 그 이유는 제 개인적인 의견으로 다음과 같습니다.
- 모델 배포가 편리하다. (POJO / 단, 동일 머신을 사용해야함.)
- POJO : Plain Old Java Object
- 확장성이 좋다. (h2o의 클러스터 모드)
- 모델의 정보를 약간(?) 정리해서 보여준다. (h2o의 UI)
초반에는 뭐가 뭔지 잘 모르실수 있지만, 익숙해지면 여러분들도 편하게 머신러닝을 이용하여 모델링 하실수 있습니다.
- 목적은 아래와 같습니다.
- h2o document를 보는데있어 영어 해석이 귀찮으신분들을 위함
- 일일히 구현하기보다는 빨리 쓰고싶어서 현기증 나시는 분들 위함
- 귀차니즘이 퍼져가는 저의 공부를 위함
물론 제가 이해한게 틀릴 수도 있다는 점 반드시 유의해주시기 바랍니다.
틀린 부분, 오타, 개선점 등 알려주시면 감사하겠습니다.
- 본 문서 작성범위
- H2O를 R에서 사용하는 방법으로 범위를 제한하고 있습니다.
- 파이썬, 자바, 하둡, 스파크 등 다른 언어상에서 사용하는 방법은 공식문서를 확인해 주시기 바랍니다.
- 데이터를 가져오는 방식도 로컬 PC에 한해서 보여주는 것이기 때문에 안타깝게도 데이터베이스(JDBC 혹은 mysql 등)와 연동해서 사용하는 방법은 본 문서에 없습니다.
- 데이터베이스와 함께 사용하는 방식은 추후에 문서를 작성해볼 예정입니다.
- h2o자체로도 데이터 핸들링이 가능하지만, 당분간은 모델링으로 제한해서 h2o를 사용하는 방법을 말씀드리려합니다.
- 핸들링 부분 역시 추후에 작성할 예정입니다.
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관련 패키지를 먼저 설치하셔야합니다.
- reference : http://timothyfox.net/?p=86
- 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의 versionH2O 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
함수 이용
- 데이터를 R로 불러들인 후
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
- GLM (for logistic regression) :
데이터 나누기
- 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 상에서도 데이터 및 모델 확인 등이 가능합니다.
Next
- 당분간은 h2o를 이용한 모델링에 집중하려하기 때문에, 다음에는 각 모델별로 argument 설명 및 사용방법을 설명하는 문서를 작성할 예정입니다.
- 그리고 모델의 결과에 대해서 설명이 없는데 이 부분도 다음 문서에 포함시켜보도록 하겠습니다.
- 어떤 모델로 할지는… 궁금하시죠?ㅎㅎ 제 마음대로 정해보겠습니다.