Machine learning với H2O

Tinh chỉnh siêu tham số trong R

Dr. Shirin Elsinghorst

Senior Data Scientist

H2O là gì?

library(h2o)
h2o.init()
H2O chưa chạy, đang khởi động...
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)
Đang khởi động JVM H2O và kết nối: ... Kết nối thành công!
R đã kết nối tới cụm H2O: 
    Thời gian hoạt động cụm H2O: 1 giây 620 mili-giây 
    Múi giờ cụm H2O:            UTC 
    Múi giờ phân tích dữ liệu:  UTC 
    Phiên bản cụm H2O:          3.38.0.1 
    Tuổi phiên bản cụm:         2 tháng 25 ngày  
    Tên cụm H2O:                H2O_started_from_R_repl_chk886 
    Số nút trong cụm:           1 
    Tổng bộ nhớ cụm:            0.98 GB 
    Tổng số lõi cụm:            2 
    Số lõi được phép:           2 
    Tình trạng cụm:             TRUE 
    IP kết nối H2O:             localhost 
    Cổng kết nối H2O:           54321 
    Proxy kết nối H2O:          NA 
    Bảo mật nội bộ H2O:         FALSE 
    Phiên bản R:                R version 4.2.1 (2022-06-23)
Tinh chỉnh siêu tham số trong R

Bộ dữ liệu mới: seeds

glimpse(seeds_data)
Số quan sát: 150
Biến: 8
$ area          <dbl> 15.26, 14.88, 14.29, 13.84 ...
$ perimeter     <dbl> 14.84, 14.57, 14.09, 13.94 ...
$ compactness   <dbl> 0.8710, 0.8811, 0.9050 ...
$ kernel_length <dbl> 5.763, 5.554, 5.291, 5.324 ...
$ kernel_width  <dbl> 3.312, 3.333, 3.337, 3.379 ...
$ asymmetry     <dbl> 2.2210, 1.0180, 2.6990 ...
$ kernel_groove <dbl> 5.220, 4.956, 4.825, 4.805 ...
$ seed_type     <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
seeds_data %>%
  count(seed_type)
# A tibble: 3 x 2
  seed_type     n
      <int> <int>
1         1    50
2         2    50
3         3    50
Tinh chỉnh siêu tham số trong R

Chuẩn bị dữ liệu để mô hình hóa với H2O

  • Dữ liệu dạng H2O Frame

    seeds_data_hf <- as.h2o(seeds_data)
    
  • Xác định features và target

    y <- "seed_type"
    x <- setdiff(colnames(seeds_data_hf), y)
    
  • Với phân loại, target phải là factor

    seeds_data_hf[, y] <- as.factor(seeds_data_hf[, y])
    
Tinh chỉnh siêu tham số trong R

Tập train, validation và test

sframe <- h2o.splitFrame(data = seeds_data_hf, 
                         ratios = c(0.7, 0.15),
                         seed = 42)
train <- sframe[[1]]
valid <- sframe[[2]]
test <- sframe[[3]]
summary(train$seed_type, exact_quantiles = TRUE)
seed_type
 1:36     
 2:36     
 3:35
summary(test$seed_type, exact_quantiles = TRUE)
 seed_type
 1:8      
 2:8      
 3:5
Tinh chỉnh siêu tham số trong R

Huấn luyện mô hình với H2O

  • Mô hình gradient boosting với h2o.gbm() & h2o.xgboost()
  • Mô hình tuyến tính tổng quát với h2o.glm()
  • Rừng ngẫu nhiên với h2o.randomForest()
  • Mạng nơ-ron với h2o.deeplearning()
Tinh chỉnh siêu tham số trong R

Huấn luyện mô hình với H2O

gbm_model <- h2o.gbm(x = x, y = y, 
                     training_frame = train, 
                     validation_frame = valid)
Chi tiết mô hình:
=================

H2OMultinomialModel: gbm
ID mô hình:  GBM_model_R_1540736041817_1 
Tóm tắt mô hình: 
number_of_trees number_of_internal_trees model_size_in_bytes min_depth 
             50                      150               24877         2 
max_depth mean_depth min_leaves max_leaves mean_leaves
        5    4.72000          3         10     8.26667
Tinh chỉnh siêu tham số trong R
  • Đánh giá hiệu năng mô hình
perf <- h2o.performance(gbm_model, test)

h2o.confusionMatrix(perf)
Ma trận nhầm lẫn: Hàng: Lớp thực; Cột: Lớp dự đoán
       1 2 3  Lỗi      Tỉ lệ
1      7 0 1 0.1250 =  1 / 8
2      0 8 0 0.0000 =  0 / 8
3      0 0 5 0.0000 =  0 / 5
Tổng   7 8 6 0.0476 = 1 / 21
h2o.logloss(perf)
0.2351779
  • Dự đoán dữ liệu mới
h2o.predict(gbm_model, test)
Tinh chỉnh siêu tham số trong R

Ayo berlatih!

Tinh chỉnh siêu tham số trong R

Preparing Video For Download...