Hiện có rất nhiều sự quan tâm dành cho các thuật toán học máy cũng như nhu cầu về chuyên gia trong lĩnh vực này. Chúng ta đều biết có một khoảng cách đáng kể về yêu cầu kỹ năng. Mục tiêu của H2O là cung cấp một nền tảng giúp người không chuyên có thể dễ dàng thử nghiệm với học máy.
Kiến trúc H2O có thể chia thành nhiều lớp: lớp trên cùng là các API khác nhau, còn lớp dưới cùng là H2O JVM.
Mã lõi của H2O được viết bằng Java, cho phép toàn bộ khung làm việc hỗ trợ đa luồng. Dù viết bằng Java, H2O vẫn cung cấp giao diện cho R, Python và một vài ngôn ngữ khác như trong kiến trúc, nhờ đó có thể sử dụng hiệu quả.
Tóm lại, H2O là một nền tảng học máy và phân tích dự đoán mã nguồn mở, trong bộ nhớ, phân tán, nhanh và có khả năng mở rộng, cho phép việc xây dựng mô hình học máy trở nên dễ dàng.
Quy trình cài đặt
R
Nếu bạn muốn dùng chức năng của H2O trong R, bạn có thể đơn giản cài gói H2O bằng lệnh install.packages("h2o").
##
## ----------------------------------------------------------------------
##
## Your next step is to start H2O:
## > h2o.init()
##
## For H2Opackage documentation, ask forhelp:
## >??h2o
##
## After starting H2O, you can use the Web UI at http://localhost:54321
## For more information visit http://docs.h2o.ai
##
## ----------------------------------------------------------------------
##
## Attaching package:'h2o'
## The following objects are masked from'package:stats':
##
## cor, sd,var
## The following objects are masked from'package:base':
##
## %*%,%in%,&&,||, apply,as.factor,as.numeric, colnames,
## colnames<-, ifelse, is.character, is.factor, is.numeric, log,
## log10, log1p, log2, round, signif, trunc
Được hỗ trợ bởi
## Connection successful!
##
## R is connected to the H2Ocluster:
## H2O cluster uptime:32 minutes 57 seconds
## H2O cluster timezone: Asia/Kolkata
## H2O data parsing timezone:UTC
## H2O cluster version:3.20.0.2
## H2O cluster version age:3 months and 22 days !!!
## H2O cluster name: H2O_started_from_R_NSingh1_wou076
## H2O cluster total nodes:1
## H2O cluster total memory:1.55GB
## H2O cluster total cores:4
## H2O cluster allowed cores:4
## H2O cluster healthy:TRUE
## H2O Connection ip: localhost
## H2O Connection port:54321
## H2O Connection proxy:NA
## H2O Internal Security:FALSE
## H2OAPIExtensions: Algos, AutoML, Core V3, Core V4
## RVersion:R version 3.5.1(2018-07-02)Được hỗ trợ bởi
Khởi tạo H2O có thể báo lỗi trên hệ thống của bạn nếu bạn không có JDK 64-bit. Nếu gặp vấn đề như vậy, hãy cài đặt JDK 64-bit phiên bản mới nhất; sau đó sẽ hoạt động bình thường.
Python
Nếu bạn dùng Python, cách làm cũng tương tự: từ dòng lệnh chạy pip install -U h2o là h2o sẽ được cài cho môi trường Python của bạn. Quá trình khởi tạo h2o cũng giống như trên.
Lệnh h2o.init() khá thông minh và làm nhiều việc. Trước tiên, nó tìm bất kỳ phiên bản h2o đang chạy nào trước khi khởi động phiên bản mới, và chỉ khởi tạo khi không có phiên bản sẵn có.
Nó có các tham số giúp phân bổ tài nguyên cho phiên bản h2o, thường dùng là:
nthreads: Mặc định, giá trị nthreads là -1, nghĩa là phiên bản có thể dùng tất cả các lõi CPU; bạn có thể đặt số lõi sử dụng bằng cách truyền giá trị cho tham số này.
max_mem_size: Truyền giá trị cho tham số này để giới hạn bộ nhớ tối đa cấp cho phiên bản. Kiểu chuỗi, có thể truyền như ‘2g’ hoặc ‘2G’ cho 2 GB bộ nhớ; tương tự nếu muốn cấp phát theo MB.
Sau khi phiên bản được tạo, bạn có thể truy cập Flow bằng cách gõ http://localhost:54321 trong trình duyệt. Flow là tên giao diện web đi kèm h2o, không cần cài đặt thêm, được viết bằng CoffeeScript (một ngôn ngữ giống JavaScript). Bạn có thể dùng để:
Tải dữ liệu trực tiếp
Xem dữ liệu do client tải lên
Tạo mô hình trực tiếp
Xem các mô hình do bạn hoặc client tạo
xem dự đoán
Chạy dự đoán trực tiếp
Giao diện khá hữu ích và dễ dùng cho người không chuyên; tôi khuyến nghị bạn thử và tự thực hiện một vài thí nghiệm.
AutoML
Phần AutoML của H2O hỗ trợ huấn luyện và hiệu chỉnh tự động nhiều mô hình trong một khoảng thời gian do người dùng chỉ định.
Phiên bản hiện tại của hàm AutoML có thể huấn luyện và đánh giá chéo Random Forest, Extremely-Randomized Forest, một lưới ngẫu nhiên các Gradient Boosting Machines (GBM), một lưới ngẫu nhiên các Mạng Nơ-ron Sâu, rồi huấn luyện một Stacked Ensemble sử dụng tất cả các mô hình.
Khi nói đến AutoML, nó nên bao quát các khía cạnh chuẩn bị dữ liệu, tạo mô hình và Ensemble, đồng thời cung cấp càng ít tham số càng tốt để người dùng thao tác ít bối rối hơn. H2O AutoML thực hiện tốt nhiệm vụ này với sự dễ dàng và số tham số tối thiểu do người dùng truyền vào.
Trong cả API R và Python, nó dùng cùng các tham số liên quan dữ liệu là x, y, training_frame, validation frame, trong đó y và training_frame là bắt buộc, còn lại là tùy chọn. Bạn cũng có thể cấu hình max_runtime_sec và max_models; ở đây max_runtime_sec là bắt buộc, còn max_model là tùy chọn; nếu không truyền, mặc định là NULL.
Tham số x là vectơ các biến dự báo từ training_frame; nếu bạn không muốn dùng tất cả biến dự báo trong frame đã truyền, bạn có thể chỉ định chúng qua x.
Bây giờ nói về một số tham số tùy chọn và linh tinh; hãy thử tinh chỉnh chúng dù bạn chưa nắm rõ, điều đó sẽ giúp bạn hiểu thêm các chủ đề nâng cao:
validation_frame: Dùng để dừng sớm các mô hình riêng lẻ trong automl. Đây là một dataframe bạn truyền vào để xác thực mô hình, hoặc có thể là một phần của dữ liệu huấn luyện nếu bạn không truyền.
leaderboard_frame: Nếu truyền vào, các mô hình sẽ được chấm điểm theo tập này thay vì dùng số liệu đánh giá chéo. Tương tự, nếu bạn không truyền, nó sẽ lấy từ dữ liệu huấn luyện.
nfolds: Số lần gấp trong đánh giá chéo K-fold, mặc định là 5; có thể ảnh hưởng đến hiệu năng mô hình.
fold_columns: Chỉ định chỉ mục cho đánh giá chéo.
weights_column: Nếu bạn muốn gán trọng số cho các cột cụ thể, dùng tham số này; gán trọng số 0 nghĩa là loại trừ cột.
ignored_columns: Chỉ có trong Python, là đối nghịch với x.
stopping_metric: Chỉ định thước đo để dừng sớm các tìm kiếm lưới và mô hình; mặc định là logloss cho phân loại và deviance cho hồi quy.
sort_metric: Tham số để sắp xếp các mô hình trên bảng xếp hạng ở cuối. Mặc định là AUC cho phân loại nhị phân, mean_per_class_error cho phân loại đa lớp, và deviance cho hồi quy.
validation_frame và leaderboard_frame phụ thuộc vào tham số đánh giá chéo là nfolds.
Các kịch bản sau có thể xảy ra trong hai trường hợp:
Khi dùng đánh giá chéo trong automl: * Chỉ truyền training frame - Dữ liệu sẽ được chia 80-20 cho tập huấn luyện và xác thực. * Truyền training và leaderboard frame - Không thay đổi việc chia 80-20 giữa huấn luyện và xác thực. * Khi truyền training và validation frame - Không chia. * Khi truyền cả ba frame - Không chia.
Khi không dùng đánh giá chéo, điều này sẽ ảnh hưởng nhiều đến leaderboard frame (nfolds = 0): * Chỉ truyền training frame - Dữ liệu được chia 80/10/10 cho huấn luyện, xác thực và leaderboard. * Truyền training và leaderboard frame - Dữ liệu được chia 80-20 cho huấn luyện và xác thực. * Khi truyền training và validation frame - Dữ liệu của validation_frame được chia 50-50 cho xác thực và leaderboard. * Khi truyền cả ba frame - Không chia.
Triển khai trong R và Python
R
H2O nhập dữ liệu dưới dạng Frame, khác với data frame mà chúng ta dùng trong R và Python để thao tác.
Tạo một đối tượng automl bằng cách truyền các tham số bắt buộc. Ở đây chúng ta chỉ truyền training frame, và tham số nfolds dùng giá trị mặc định. Bạn có thể tăng thời gian chạy của mô hình tùy nhu cầu.
train[,y]<- as.factor(train[,y])
aml <- h2o.automl(x = x, y = y,
training_frame = train,
max_runtime_secs =30)Được hỗ trợ bởi
##
|||0%||=|1%||=|2%||==|3%||===|4%||===|5%||====|6%||=====|8%||======|9%||======|10%||========|13%||==========|15%||==========|16%||===========|16%||===========|17%||===========|18%||============|18%||==============================================================|95%||=================================================================|100%Được hỗ trợ bởi
Mô tả về H2O
Hiện có rất nhiều sự quan tâm dành cho các thuật toán học máy cũng như nhu cầu về chuyên gia trong lĩnh vực này. Chúng ta đều biết có một khoảng cách đáng kể về yêu cầu kỹ năng. Mục tiêu của H2O là cung cấp một nền tảng giúp người không chuyên có thể dễ dàng thử nghiệm với học máy.
Kiến trúc H2O có thể chia thành nhiều lớp: lớp trên cùng là các API khác nhau, còn lớp dưới cùng là H2O JVM.
Mã lõi của H2O được viết bằng Java, cho phép toàn bộ khung làm việc hỗ trợ đa luồng. Dù viết bằng Java, H2O vẫn cung cấp giao diện cho R, Python và một vài ngôn ngữ khác như trong kiến trúc, nhờ đó có thể sử dụng hiệu quả.
Tóm lại, H2O là một nền tảng học máy và phân tích dự đoán mã nguồn mở, trong bộ nhớ, phân tán, nhanh và có khả năng mở rộng, cho phép việc xây dựng mô hình học máy trở nên dễ dàng.
Quy trình cài đặt
R
Nếu bạn muốn dùng chức năng của H2O trong R, bạn có thể đơn giản cài gói H2O bằng lệnh
install.packages("h2o").Khởi tạo H2O có thể báo lỗi trên hệ thống của bạn nếu bạn không có JDK 64-bit. Nếu gặp vấn đề như vậy, hãy cài đặt JDK 64-bit phiên bản mới nhất; sau đó sẽ hoạt động bình thường.
Python
Nếu bạn dùng Python, cách làm cũng tương tự: từ dòng lệnh chạy
pip install -U h2olà h2o sẽ được cài cho môi trường Python của bạn. Quá trình khởi tạo h2o cũng giống như trên.Lệnh h2o.init() khá thông minh và làm nhiều việc. Trước tiên, nó tìm bất kỳ phiên bản h2o đang chạy nào trước khi khởi động phiên bản mới, và chỉ khởi tạo khi không có phiên bản sẵn có.
Nó có các tham số giúp phân bổ tài nguyên cho phiên bản h2o, thường dùng là:
nthreads: Mặc định, giá trị nthreads là -1, nghĩa là phiên bản có thể dùng tất cả các lõi CPU; bạn có thể đặt số lõi sử dụng bằng cách truyền giá trị cho tham số này.
max_mem_size: Truyền giá trị cho tham số này để giới hạn bộ nhớ tối đa cấp cho phiên bản. Kiểu chuỗi, có thể truyền như ‘2g’ hoặc ‘2G’ cho 2 GB bộ nhớ; tương tự nếu muốn cấp phát theo MB.
Sau khi phiên bản được tạo, bạn có thể truy cập Flow bằng cách gõ http://localhost:54321 trong trình duyệt. Flow là tên giao diện web đi kèm h2o, không cần cài đặt thêm, được viết bằng CoffeeScript (một ngôn ngữ giống JavaScript). Bạn có thể dùng để:
Giao diện khá hữu ích và dễ dùng cho người không chuyên; tôi khuyến nghị bạn thử và tự thực hiện một vài thí nghiệm.
AutoML
Phần AutoML của H2O hỗ trợ huấn luyện và hiệu chỉnh tự động nhiều mô hình trong một khoảng thời gian do người dùng chỉ định.
Phiên bản hiện tại của hàm AutoML có thể huấn luyện và đánh giá chéo Random Forest, Extremely-Randomized Forest, một lưới ngẫu nhiên các Gradient Boosting Machines (GBM), một lưới ngẫu nhiên các Mạng Nơ-ron Sâu, rồi huấn luyện một Stacked Ensemble sử dụng tất cả các mô hình.
Khi nói đến AutoML, nó nên bao quát các khía cạnh chuẩn bị dữ liệu, tạo mô hình và Ensemble, đồng thời cung cấp càng ít tham số càng tốt để người dùng thao tác ít bối rối hơn. H2O AutoML thực hiện tốt nhiệm vụ này với sự dễ dàng và số tham số tối thiểu do người dùng truyền vào.
Trong cả API R và Python, nó dùng cùng các tham số liên quan dữ liệu là
x,y,training_frame,validation frame, trong đóyvàtraining_framelà bắt buộc, còn lại là tùy chọn. Bạn cũng có thể cấu hìnhmax_runtime_secvàmax_models; ở đâymax_runtime_seclà bắt buộc, cònmax_modellà tùy chọn; nếu không truyền, mặc định là NULL.Tham số
xlà vectơ các biến dự báo từtraining_frame; nếu bạn không muốn dùng tất cả biến dự báo trong frame đã truyền, bạn có thể chỉ định chúng quax.Bây giờ nói về một số tham số tùy chọn và linh tinh; hãy thử tinh chỉnh chúng dù bạn chưa nắm rõ, điều đó sẽ giúp bạn hiểu thêm các chủ đề nâng cao:
validation_frame: Dùng để dừng sớm các mô hình riêng lẻ trong automl. Đây là một dataframe bạn truyền vào để xác thực mô hình, hoặc có thể là một phần của dữ liệu huấn luyện nếu bạn không truyền.
leaderboard_frame: Nếu truyền vào, các mô hình sẽ được chấm điểm theo tập này thay vì dùng số liệu đánh giá chéo. Tương tự, nếu bạn không truyền, nó sẽ lấy từ dữ liệu huấn luyện.
nfolds: Số lần gấp trong đánh giá chéo K-fold, mặc định là 5; có thể ảnh hưởng đến hiệu năng mô hình.
fold_columns: Chỉ định chỉ mục cho đánh giá chéo.
weights_column: Nếu bạn muốn gán trọng số cho các cột cụ thể, dùng tham số này; gán trọng số 0 nghĩa là loại trừ cột.
ignored_columns: Chỉ có trong Python, là đối nghịch với
x.stopping_metric: Chỉ định thước đo để dừng sớm các tìm kiếm lưới và mô hình; mặc định là logloss cho phân loại và deviance cho hồi quy.
sort_metric: Tham số để sắp xếp các mô hình trên bảng xếp hạng ở cuối. Mặc định là AUC cho phân loại nhị phân, mean_per_class_error cho phân loại đa lớp, và deviance cho hồi quy.
validation_frame và leaderboard_frame phụ thuộc vào tham số đánh giá chéo là
nfolds.Các kịch bản sau có thể xảy ra trong hai trường hợp:
Khi dùng đánh giá chéo trong automl: * Chỉ truyền training frame - Dữ liệu sẽ được chia 80-20 cho tập huấn luyện và xác thực. * Truyền training và leaderboard frame - Không thay đổi việc chia 80-20 giữa huấn luyện và xác thực. * Khi truyền training và validation frame - Không chia. * Khi truyền cả ba frame - Không chia.
Khi không dùng đánh giá chéo, điều này sẽ ảnh hưởng nhiều đến leaderboard frame (nfolds = 0): * Chỉ truyền training frame - Dữ liệu được chia 80/10/10 cho huấn luyện, xác thực và leaderboard. * Truyền training và leaderboard frame - Dữ liệu được chia 80-20 cho huấn luyện và xác thực. * Khi truyền training và validation frame - Dữ liệu của validation_frame được chia 50-50 cho xác thực và leaderboard. * Khi truyền cả ba frame - Không chia.
Triển khai trong R và Python
R
H2O nhập dữ liệu dưới dạng Frame, khác với data frame mà chúng ta dùng trong R và Python để thao tác.
Thiết lập biến dự báo và biến phản hồi.
Tạo một đối tượng automl bằng cách truyền các tham số bắt buộc. Ở đây chúng ta chỉ truyền training frame, và tham số nfolds dùng giá trị mặc định. Bạn có thể tăng thời gian chạy của mô hình tùy nhu cầu.
Xem bảng xếp hạng các mô hình khác nhau.
Python
Nếu bạn muốn học thêm bằng Python, hãy tham gia khóa Parallel Computing with Dask của DataCamp.