Distribuirano strojno učenje unutar R-a

Big data / Poslovna analitika / Rudarenje podataka

Distribuirano strojno učenje unutar R-a

U ovom članku će se predstaviti integracija H2O – open source sustav za distribuirano strojno učenje i statističkog jezika R. Do sada je bilo govora o oba ova pojma te ste se mogli teorijski upoznati s njima, a sad će se prikazati kratki demo kao demonstracija moći ove integracije. R jezik ima mnogo tzv. paketa (Package) koji služe kako bi nam olakšali svakodnevni rad u R-u. Jedan od njih je H2O i on nam služi za tu integraciju između R-a i H2O servera. No, da bi se H20 paket koristio potrebno je prvo instalirati H2O server, koji će u našem slučaju biti instaliran lokalno na računalu. Koraci za tu instalaciju se nalaze ispod:


cd Desktop
cd h2o-2.8.
java -Xmx4g -jar h2o.jar

Dakle, sve što je potrebno u našem slučaju je preuzeti dokument u ZIP obliku, raspakirati ga, otvoriti cmd te unijeti adresu gdje je H2O raspakiran (Desktop u mom slučaju), te ga jednostavno samo pokrenuti. Nakon toga u našem internetskom pretraživaču možete jednostavno unijeti http://localhost:54321 te ćete vidjeti H2O koji je spreman za rad. Naime, vi možete raditi direktno u tom pretraživaču (učitavanje podataka, izrada modela, predikcija, validacija rezultata, usporedba modela), ali mi ovdje želimo pokazati kako prenijeti dio rada u R-u na H2O i to onaj dio koji H2O radi odlično, a to je strojno učenje. Nakon instalacije, predlažem da prvo pogledate što sve H2O nudi te prođete osnovne vježbe kako bi se što bolje upoznali, jer će kasniji dijelovi biti jasniji.

Sad slijedi instalacija H2O paketa unutar R-a. Veoma je važno koja je verzija samog H2O paketa, ali i samog H2O-a. Da bi bili sigurni koristite kod koji se nalazi ispod, a služi za brisanje starijih verzije te instalaciju zadnje.


# Brisanje starih H2O paketa iz R-a
if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }

# Preuzimanje i instalacija novog H20 paketa
install.packages("h2o", repos=(c("http://h2o-release.s3.amazonaws.com/h2o/rel-mandelbrot/1/R", getOption("repos"))))

Kad smo i taj dio gotovi kreće programiranje onoga što želimo. Prvi korak je unijeti sve informacije o H2O Serveru, dakle IP, port te možemo unijeti i dodatne stvari (za više informacija unesite ?h2o.init). Nakon ovog koraka slijedi učitavanje podataka. Za potrebe ovog našeg kratkog treninga, učitat ćemo podatke u R, prebaciti te podatke u format koji je pogodan za H2O te narediti H2O-u da odradi trening i predikciju podataka. Nakon toga izraditi matricu (Confusion matrix – h2o.confusionMatrix) te dodatnu statistiku (h2o.performance) da provjerimo performanse modela. Sam dokument s kojim radimo preuzmite ovdje.

library(h2o)
localH2O <- h2o.init(ip = 'localhost', port = 54321, max_mem_size = '5g') #podaci servera

#ucitaj podatke
podaci<-read.table("podaciProstate.csv",sep=";")
Prostate.h2o <- as.h2o(localH2O, podaci,key="Prostate.hex")#iz R formata u H2O format

#napravi model
prostate.glm= h2o.glm(y = "CAPSULE", x = c("AGE","RACE","PSA","DCAPS"), data =
                        Prostate.h2o, family = "binomial", nfolds = 10, alpha = 0.5)

#predvidi na podacima (istim)
prostate.fit = h2o.predict(object = prostate.glm, newdata = Prostate.h2o)
summary(prostate.fit)

#Provjera performansi modela
h2o.confusionMatrix(prostate.fit[,"predict"], Prostate.h2o[,"CAPSULE"]) #Confusion matrix
h2o.performance(prostate.fit[,3], Prostate.h2o[,"CAPSULE"], measure = "F1")

Razlog zbog kojih je H2O još zanimljiv je taj što je jedan od malobrojnih paketa za R koji nudi Deep Learning algoritme te je i njih moguće iskoristiti na ovim istim podacima. U novijim verzijama su se pojavili i detekcija anomalija te DFE (Deep Feature Extractor). Uz već standardne AUC (Area under the curve) i „Confusion matrix“ koju ste imali prilike vidjeti na kraju gornjeg koda, u novijim verzijama je moguće prikazat „Lift curve“ te uspoređivati više modela. No, ukoliko Vam je H2O nešto novo onda je zasigurno logičnije prvo da sve ove korake odraditi unutar preglednika (bez ikakvog programiranja), jer je u tom slučaju grafičko sučelje intuitivnije te tu možete pronaći materijale za učenje.

Ukoliko ste radili u R-u strojno učenje primijetit ćete kako R zahvaljujući H2O veoma brzo odradi samo učenje i predikciju. Upravo je to i razlog ovog izvrsnog načina integracije moćnog R-a i novaka H2O-a. Ovo vam može drastično pomoći da ubrzate svoju R skriptu kad očekujete velike količine podataka. Osobno mi je najkorisniji prilikom određivanja mišljenja korisnika dakle tzv. “sentiment analysis”, jer se radi o velikim matricama. Također, veoma jednostavno možete podatke iz R-a poslati u H2O (as.h2o naredba) te jednako tako vratiti ih natrag u R (as.data.frame naredba). Ovdje se radi više-manje o standardnom primjeru ove integracije, a u jednom od sljedećih članaka će biti govora o naprednijoj primjeni.