install.packages("h2o")
Installing package into ‘/cloud/lib/x86_64-pc-linux-gnu-library/4.4’
(as ‘lib’ is unspecified)
also installing the dependencies ‘bitops’, ‘RCurl’

trying URL 'http://rspm/default/__linux__/focal/latest/src/contrib/bitops_1.0-9.tar.gz'
Content type 'application/x-gzip' length 25355 bytes (24 KB)
==================================================
downloaded 24 KB

trying URL 'http://rspm/default/__linux__/focal/latest/src/contrib/RCurl_1.98-1.16.tar.gz'
Content type 'application/x-gzip' length 1064350 bytes (1.0 MB)
==================================================
downloaded 1.0 MB

trying URL 'http://rspm/default/__linux__/focal/latest/src/contrib/h2o_3.44.0.3.tar.gz'
Content type 'application/x-gzip' length 266595032 bytes (254.2 MB)
==================================================
downloaded 254.2 MB

* installing *binary* package ‘bitops’ ...
* DONE (bitops)
* installing *binary* package ‘RCurl’ ...
* DONE (RCurl)
* installing *binary* package ‘h2o’ ...
* DONE (h2o)

The downloaded source packages are in
    ‘/tmp/Rtmp6887k6/downloaded_packages’
library(h2o)

----------------------------------------------------------------------

Your next step is to start H2O:
    > h2o.init()

For H2O package documentation, ask for help:
    > ??h2o

After starting H2O, you can use the Web UI at http://localhost:54321
For more information visit https://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

Initialize H2O

h2o.init(nthreads = -1)

H2O is not running yet, starting it now...

Note:  In case of errors look at the following log files:
    /tmp/Rtmp6887k6/file14979a63367/h2o_r2993625_started_from_r.out
    /tmp/Rtmp6887k6/file1495f8e4da0/h2o_r2993625_started_from_r.err
openjdk version "11.0.22" 2024-01-16
OpenJDK Runtime Environment (build 11.0.22+7-post-Ubuntu-0ubuntu220.04.1)
OpenJDK 64-Bit Server VM (build 11.0.22+7-post-Ubuntu-0ubuntu220.04.1, mixed mode, sharing)

Starting H2O JVM and connecting: ... Connection successful!

R is connected to the H2O cluster: 
    H2O cluster uptime:         2 seconds 583 milliseconds 
    H2O cluster timezone:       UTC 
    H2O data parsing timezone:  UTC 
    H2O cluster version:        3.44.0.3 
    H2O cluster version age:    1 year, 1 month and 14 days 
    H2O cluster name:           H2O_started_from_R_r2993625_dev645 
    H2O cluster total nodes:    1 
    H2O cluster total memory:   0.24 GB 
    H2O cluster total cores:    1 
    H2O cluster allowed cores:  1 
    H2O cluster healthy:        TRUE 
    H2O Connection ip:          localhost 
    H2O Connection port:        54321 
    H2O Connection proxy:       NA 
    H2O Internal Security:      FALSE 
    R Version:                  R version 4.4.2 (2024-10-31) 
Warning in h2o.clusterInfo() : 
Your H2O cluster version is (1 year, 1 month and 14 days) old. There may be a newer version available.
Please download and install the latest version from: https://h2o-release.s3.amazonaws.com/h2o/latest_stable.html

Import Dataset

datasets <- "https://raw.githubusercontent.com/DarrenCook/h2o/bk/datasets/"
data <- h2o.importFile(paste0(datasets, "iris_wheader.csv"))

  |                                                                                                    
  |                                                                                              |   0%
  |                                                                                                    
  |==============================================================================================| 100%

Define Variables

y <- "class"
x <- setdiff(names(data), y)

Split Data into Training and Testing Sets

parts <- h2o.splitFrame(data, 0.8)
train <- parts[[1]]
test <- parts[[2]]

Train a Deep Learning Model

m <- h2o.deeplearning(x, y, train)

  |                                                                                                    
  |                                                                                              |   0%
  |                                                                                                    
  |============================                                                                  |  30%
  |                                                                                                    
  |==============================================================================================| 100%

Make Predictions

p <- h2o.predict(m, test)

  |                                                                                                    
  |                                                                                              |   0%
  |                                                                                                    
  |==============================================================================================| 100%

Model Evaluation

h2o.mse(m)
[1] 0.2050054
h2o.confusionMatrix(m)
Confusion Matrix: Row labels: Actual class; Column labels: Predicted class

Convert Predictions to Data Frame

as.data.frame(p)

Compare Predictions with Actual Classes

as.data.frame(h2o.cbind(p$predict, test$class))

Calculate Accuracy

mean(p$predict == test$class)
[1] 0.6774194

Alternative Performance Evaluation

h2o.performance(m, test)
H2OMultinomialMetrics: deeplearning

Test Set Metrics: 
=====================

MSE: (Extract with `h2o.mse`) 0.2794178
RMSE: (Extract with `h2o.rmse`) 0.5285999
Logloss: (Extract with `h2o.logloss`) 1.025064
Mean Per-Class Error: 0.2777778
AUC: (Extract with `h2o.auc`) NaN
AUCPR: (Extract with `h2o.aucpr`) NaN
Confusion Matrix: Extract with `h2o.confusionMatrix(<model>, <data>)`)
=========================================================================
Confusion Matrix: Row labels: Actual class; Column labels: Predicted class

Hit Ratio Table: Extract with `h2o.hit_ratio_table(<model>, <data>)`
=======================================================================
Top-3 Hit Ratios: 
NANANA
LS0tCnRpdGxlOiAiQ3Rpdml0eSA1IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgogCgpgYGB7cn0KaW5zdGFsbC5wYWNrYWdlcygiaDJvIikKYGBgCmBgYHtyfQpsaWJyYXJ5KGgybykKYGBgCiMgSW5pdGlhbGl6ZSBIMk8KYGBge3J9Cmgyby5pbml0KG50aHJlYWRzID0gLTEpCmBgYAoKIyBJbXBvcnQgRGF0YXNldApgYGB7cn0KZGF0YXNldHMgPC0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9EYXJyZW5Db29rL2gyby9iay9kYXRhc2V0cy8iCmRhdGEgPC0gaDJvLmltcG9ydEZpbGUocGFzdGUwKGRhdGFzZXRzLCAiaXJpc193aGVhZGVyLmNzdiIpKQpgYGAKCiMgRGVmaW5lIFZhcmlhYmxlcwpgYGB7cn0KeSA8LSAiY2xhc3MiCnggPC0gc2V0ZGlmZihuYW1lcyhkYXRhKSwgeSkKYGBgCgojIFNwbGl0IERhdGEgaW50byBUcmFpbmluZyBhbmQgVGVzdGluZyBTZXRzCmBgYHtyfQpwYXJ0cyA8LSBoMm8uc3BsaXRGcmFtZShkYXRhLCAwLjgpCnRyYWluIDwtIHBhcnRzW1sxXV0KdGVzdCA8LSBwYXJ0c1tbMl1dCmBgYAoKIyBUcmFpbiBhIERlZXAgTGVhcm5pbmcgTW9kZWwKYGBge3J9Cm0gPC0gaDJvLmRlZXBsZWFybmluZyh4LCB5LCB0cmFpbikKYGBgCgojIE1ha2UgUHJlZGljdGlvbnMKYGBge3J9CnAgPC0gaDJvLnByZWRpY3QobSwgdGVzdCkKYGBgCgojIE1vZGVsIEV2YWx1YXRpb24KYGBge3J9Cmgyby5tc2UobSkKaDJvLmNvbmZ1c2lvbk1hdHJpeChtKQpgYGAKCiMgQ29udmVydCBQcmVkaWN0aW9ucyB0byBEYXRhIEZyYW1lCmBgYHtyfQphcy5kYXRhLmZyYW1lKHApCmBgYAoKIyBDb21wYXJlIFByZWRpY3Rpb25zIHdpdGggQWN0dWFsIENsYXNzZXMKYGBge3J9CmFzLmRhdGEuZnJhbWUoaDJvLmNiaW5kKHAkcHJlZGljdCwgdGVzdCRjbGFzcykpCmBgYAoKIyBDYWxjdWxhdGUgQWNjdXJhY3kKYGBge3J9Cm1lYW4ocCRwcmVkaWN0ID09IHRlc3QkY2xhc3MpCmBgYAoKIyBBbHRlcm5hdGl2ZSBQZXJmb3JtYW5jZSBFdmFsdWF0aW9uCmBgYHtyfQpoMm8ucGVyZm9ybWFuY2UobSwgdGVzdCkKYGBgCgo=