load library and start h2o
library(h2o)
h2o.init()
Connection successful!
R is connected to the H2O cluster:
H2O cluster uptime: 2 hours 8 minutes
H2O cluster version: 3.14.0.3
H2O cluster version age: 25 days
H2O cluster name: H2O_started_from_R_r631758_lcl606
H2O cluster total nodes: 1
H2O cluster total memory: 3.32 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: Algos, AutoML, Core V3, Core V4
R Version: R version 3.4.2 (2017-09-28)
h2o.removeAll()
[1] 0
import ECG data
train_ecg <- h2o.importFile( path = "http://h2o-public-test-data.s3.amazonaws.com/smalldata/anomaly/ecg_discord_train.csv", header = FALSE, sep = ",")
|
| | 0%
|
|=====================================================================================| 100%
test_ecg<-h2o.importFile(path="http://h2o-public-test-data.s3.amazonaws.com/smalldata/anomaly/ecg_discord_test.csv", header = FALSE, sep = ",")
|
| | 0%
|
|=====================================================================================| 100%
Train deep autoencoder learning model on “normal”
training data, y ignored
anomaly_model<-h2o.deeplearning(x=names(train_ecg),training_frame = train_ecg,activation="Tanh",autoencoder = TRUE,hidden=c(50,20,50),sparse=TRUE,l1=1e-4,epochs=100)
|
| | 0%
|
|=====================================================================================| 100%
Compute reconstruction erro with the Anomaly
detection app (MSE between output and input layers)
Pull reconstruction error data into R and plot to find outliers (last 3 heartbeats)
recon_error<-as.data.frame(recon_error)
recon_error
plot.ts(recon_error)

Note: Testing =reconstructin the test dataset
test_recon<-h2o.predict(anomaly_model,test_ecg)
|
| | 0%
|
|=====================================================================================| 100%
head(test_recon)
h2o.shutdown()
LS0tDQp0aXRsZTogIkVDRyBBbm9tYWx5IERldGVjdGlvbiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiNsb2FkIGxpYnJhcnkgYW5kIHN0YXJ0IGgybw0KYGBge3J9DQpsaWJyYXJ5KGgybykNCmgyby5pbml0KCkNCmgyby5yZW1vdmVBbGwoKQ0KYGBgDQoNCiNpbXBvcnQgRUNHIGRhdGENCmBgYHtyfQ0KdHJhaW5fZWNnIDwtIGgyby5pbXBvcnRGaWxlKCBwYXRoID0gImh0dHA6Ly9oMm8tcHVibGljLXRlc3QtZGF0YS5zMy5hbWF6b25hd3MuY29tL3NtYWxsZGF0YS9hbm9tYWx5L2VjZ19kaXNjb3JkX3RyYWluLmNzdiIsIGhlYWRlciA9IEZBTFNFLCBzZXAgPSAiLCIpDQp0ZXN0X2VjZzwtaDJvLmltcG9ydEZpbGUocGF0aD0iaHR0cDovL2gyby1wdWJsaWMtdGVzdC1kYXRhLnMzLmFtYXpvbmF3cy5jb20vc21hbGxkYXRhL2Fub21hbHkvZWNnX2Rpc2NvcmRfdGVzdC5jc3YiLCBoZWFkZXIgPSBGQUxTRSwgc2VwID0gIiwiKQ0KdHJhaW4uUjwtYXMuZGF0YS5mcmFtZSh0cmFpbl9lY2cpDQoNCmBgYA0KDQojIFRyYWluIGRlZXAgYXV0b2VuY29kZXIgbGVhcm5pbmcgbW9kZWwgb24gIm5vcm1hbCINCiMgdHJhaW5pbmcgZGF0YSwgeSBpZ25vcmVkDQpgYGB7cn0NCmFub21hbHlfbW9kZWw8LWgyby5kZWVwbGVhcm5pbmcoeD1uYW1lcyh0cmFpbl9lY2cpLHRyYWluaW5nX2ZyYW1lID0gdHJhaW5fZWNnLGFjdGl2YXRpb249IlRhbmgiLGF1dG9lbmNvZGVyID0gVFJVRSxoaWRkZW49Yyg1MCwyMCw1MCksc3BhcnNlPVRSVUUsbDE9MWUtNCxlcG9jaHM9MTAwKQ0KYGBgDQoNCiNDb21wdXRlIHJlY29uc3RydWN0aW9uIGVycm8gd2l0aCB0aGUgQW5vbWFseQ0KIyBkZXRlY3Rpb24gYXBwIChNU0UgYmV0d2VlbiBvdXRwdXQgYW5kIGlucHV0IGxheWVycykNCmBgYHtyfQ0KcmVjb25fZXJyb3I8LWgyby5hbm9tYWx5KGFub21hbHlfbW9kZWwsdGVzdF9lY2cpDQpgYGANCg0KI1B1bGwgcmVjb25zdHJ1Y3Rpb24gZXJyb3IgZGF0YSBpbnRvIFIgYW5kIHBsb3QgdG8gZmluZCBvdXRsaWVycyAobGFzdCAzIGhlYXJ0YmVhdHMpDQpgYGB7cn0NCnJlY29uX2Vycm9yPC1hcy5kYXRhLmZyYW1lKHJlY29uX2Vycm9yKQ0KcmVjb25fZXJyb3INCnBsb3QudHMocmVjb25fZXJyb3IpDQpgYGANCg0KI05vdGU6IFRlc3RpbmcgPXJlY29uc3RydWN0aW4gdGhlIHRlc3QgZGF0YXNldA0KYGBge3J9DQp0ZXN0X3JlY29uPC1oMm8ucHJlZGljdChhbm9tYWx5X21vZGVsLHRlc3RfZWNnKQ0KaGVhZCh0ZXN0X3JlY29uKQ0KYGBgDQoNCg0KDQoNCg0KYGBge3J9DQpoMm8uc2h1dGRvd24oKQ0KYGBgDQoNCg==