0. 개요

1. h2o 기동

library(h2o)
h2o.init(ip = 'localhost',      # default
         port = 54321,          # default
         name = 'GBM_Test',     # 임의로 지정함
         min_mem_size = '1G',   # 2MB 보다는 크고, 1024의 배수로 지정. 뒤에 M/m 또는 G/g를 붙이면 MB/GB
         max_mem_size = '2G')   # 2MB 보다는 크고, 1024의 배수로 지정. 뒤에 M/m 또는 G/g를 붙이면 MB/GB
##  Connection successful!
## 
## R is connected to the H2O cluster: 
##     H2O cluster uptime:         2 hours 31 minutes 
##     H2O cluster timezone:       Asia/Seoul 
##     H2O data parsing timezone:  UTC 
##     H2O cluster version:        3.30.0.1 
##     H2O cluster version age:    3 months and 24 days !!! 
##     H2O cluster name:           GBM_Test 
##     H2O cluster total nodes:    1 
##     H2O cluster total memory:   1.46 GB 
##     H2O cluster total cores:    8 
##     H2O cluster allowed cores:  8 
##     H2O cluster healthy:        TRUE 
##     H2O Connection ip:          localhost 
##     H2O Connection port:        54321 
##     H2O Connection proxy:       NA 
##     H2O Internal Security:      FALSE 
##     H2O API Extensions:         Amazon S3, Algos, AutoML, Core V3, TargetEncoder, Core V4 
##     R Version:                  R version 4.0.2 (2020-06-22)

2. cars dataset을 불러오기

cars <- h2o.importFile("https://s3.amazonaws.com/h2o-public-test-data/smalldata/junit/cars_20mpg.csv")
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |======================================================================| 100%

3. 분석에 사용할 종속변수(x1,x2…)와 독립변수(y) 지정하기

여기서는 종속변수를 predictors에 담았고, 독립변수를 response에 담았다.

predictors <- c("displacement", "power", "weight", "acceleration", "year")
response <- "cylinders"

4. dataset을 train set과 valid set으로 분리

여기에서 사용된 h2oframe은 data.frame과 거의 동일한데, 큰 차이점은 메모리에 저장되지 않고 원격에(여기서는 localhost) 저장된다는 점이 다름.

cars_splits <- h2o.splitFrame(data =  cars, ratios = 0.8, seed = 1234)
train <- cars_splits[[1]]
valid <- cars_splits[[2]]

5. 이제 GBM 모델을 build 하고 훈련시켜 보자

cars_gbm <- h2o.gbm(x = predictors,
                    y = response,
                    training_frame = train,
                    validation_frame = valid,
                    distribution = "poisson",
                    seed = 1234)
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |==================================                                    |  48%
  |                                                                            
  |======================================================================| 100%

6. 성능 확인.

구현된 cars_gbm의 성능을 성능 지표로 확인해 본다.
* 회귀분석의 성능 지표의 의미는 다음과 같다.
* R2 결정 계수: R squared는 회귀 분석으로 만든 model이 실제 data에 얼마나 잘 적용되었는지 보여주는 척도(0~1). 클수록 좋음. * deviance(이탈도): R2의 반대 개념. 모델의 부적합도(작을 수록 좋음)
* MSE(Mean Squared Error;평균제곱오차): 실제 값과 예측 값의 차이를 제곱해 평균한 것. 실제값과 추정값의 편차를 알아보는데 사용함. 작을수록 좋음.
* RMSE(Root Mean Squared Error;평균제곱근오차): MSE 값은 오류의 제곱을 구하므로 실제 오류 평균보다 더 커지는 특성이 있어 MSE에 루트를 씌운 값.
* MSLE (Mean Squared Log Error): MSE에 로그를 적용해준 지표입니다.
* RMSLE (Root Mean Squared Logarithmic Error) : RMSE에 로그를 적용해준 지표
* MAE (Mean Absolute Error): 실제 값과 예측 값의 차이를 제곱해 평균한 것

perf <- h2o.performance(cars_gbm, valid)
perf
## H2ORegressionMetrics: gbm
## 
## MSE:  0.03769792
## RMSE:  0.1941595
## MAE:  0.07947862
## RMSLE:  0.0335913
## Mean Residual Deviance :  -9.918301
# R2 결정 계수: R squared는 회귀 분석으로 만든 model이 실제 data에 얼마나 잘 적용되었는지 보여주는 척도(0~1). 클수록 좋음. 
h2o.r2(cars_gbm, train = T, valid = T)
##     train     valid 
## 0.9930651 0.9886704
# 잔차 이탈도. R2와는 반대로 모델이 얼마나 데이터를 잘못 설명하는지 보여주는 척도. 작을수록 좋음
h2o.mean_residual_deviance(cars_gbm, train = T, valid = T)
##     train     valid 
## -7.781964 -9.918301
plot(cars_gbm) 

plot(cars_gbm, timestep = "duration", metric = "deviance") # timestep은 No of Tree 또는 duration_sec 중의 하나. metric은 rmse, mae, deviance 중의 하나.

# deviance(이탈도): R2의 반대 개념. 모델의 부적합도(작을 수록 좋음)  
plot(cars_gbm, timestep = "number_of_trees", metric = "deviance")

# RMSE(Root Mean Squared Error;평균제곱근오차):    MSE 값은 오류의 제곱을 구하므로 실제 오류 평균보다 더 커지는 특성이 있어 MSE에 루트를 씌운 값.  
plot(cars_gbm, timestep = "duration", metric = "rmse")

plot(cars_gbm, timestep = "number_of_trees", metric = "rmse")

# MAE (Mean Absolute Error):    실제 값과 예측 값의 차이를 제곱해 평균한 것  
plot(cars_gbm, timestep = "number_of_trees", metric = "mae")

7. 결론

R2 계수가 0.99이므로 모델의 적합도가 매우 좋다고 할 수 있다.