Er is veel buzz rondom machinelearning-algoritmen én een groeiende vraag naar experts. We weten allemaal dat er een flinke kloof is in de benodigde vaardigheden. Het doel van H2O is om een platform te bieden waarmee niet-experts gemakkelijk kunnen experimenteren met machine learning.
De H2O-architectuur is op te delen in verschillende lagen, waarbij de bovenste laag uit verschillende API’s bestaat en de onderste laag uit de H2O JVM.
De kerncode van H2O is geschreven in Java, wat het hele framework geschikt maakt voor multithreading. Hoewel het in Java is geschreven, biedt het interfaces voor R, Python en enkele andere talen die in de architectuur staan, waardoor je het efficiënt kunt gebruiken.
Kortom: H2O is open source, in-memory, gedistribueerd, snel en schaalbaar voor machine learning en voorspellende analyses, en maakt het bouwen van machinelearningmodellen een stuk eenvoudiger.
Installatieproces
R
Als je H2O-functionaliteit in R wilt gebruiken, kun je simpelweg het H2O-pakket installeren met het commando 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
Mogelijk gemaakt door
## 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)Mogelijk gemaakt door
Het initialiseren van H2O kan een fout geven als je geen 64-bits JDK hebt. Installeer in dat geval de nieuwste 64-bits JDK; daarna zou het probleem verholpen moeten zijn.
Python
Gebruik je Python, dan werkt het hetzelfde: via de commandline pip install -U h2o en h2o wordt in je Python-omgeving geïnstalleerd. Het initialiseren van h2o verloopt op dezelfde manier.
Het commando h2o.init() is behoorlijk slim en doet veel werk. Eerst zoekt het naar een actieve h2o-instantie voordat het een nieuwe start, en start pas een nieuwe als er geen instantie aanwezig is.
Er zijn ook argumenten om resources toe te wijzen aan de h2o-instantie; vaak gebruikte zijn:
nthreads: Standaard is de waarde van nthreads -1, wat betekent dat de instantie alle CPU-cores mag gebruiken. Je kunt het aantal gebruikte cores instellen door een waarde door te geven.
max_mem_size: Met dit argument kun je het maximale geheugen beperken dat aan de instantie wordt toegewezen. Het is van het type string; je kunt een waarde doorgeven als ‘2g’ of ‘2G’ voor 2 GB geheugen, en op dezelfde manier voor MB’s.
Zodra de instantie is aangemaakt, kun je de Flow openen door http://localhost:54321 in je browser te typen. Flow is de naam van de webinterface die onderdeel is van h2o en geen extra installatie vereist. Het is geschreven in CoffeeScript (een JavaScript-achtige taal). Je kunt het gebruiken voor het volgende:
Data direct uploaden
Data bekijken die door de client is geüpload
Direct modellen maken
Modellen bekijken die jij of je client hebt gemaakt
voorspellingen bekijken
Direct voorspellingen draaien
De interface is erg handig en laagdrempelig voor niet-experts. Ik raad je aan om het te proberen en zelf wat experimenten te doen.
AutoML
Dan nu het AutoML-gedeelte van H2O: AutoML helpt bij het automatisch trainen en tunen van veel modellen binnen een door de gebruiker ingestelde tijdslimiet.
De huidige versie van de AutoML-functie kan een Random Forest, een Extremely-Randomized Forest, een willekeurig raster van Gradient Boosting Machines (GBM’s), een willekeurig raster van Deep Neural Nets trainen en cross-validaten, en traint daarna een Stacked Ensemble met al deze modellen.
Als we het over AutoML hebben, moet het aspecten afdekken als datavoorbereiding, modelgeneratie en ensembles, en daarbij zo weinig mogelijk parameters vragen zodat gebruikers met minder verwarring aan de slag kunnen. H2O AutoML doet dit eenvoudig, met een minimum aan door de gebruiker opgegeven parameters.
In zowel de R- als de Python-API gebruikt het dezelfde data-gerelateerde argumenten x, y, training_frame, validation frame, waarvan y en training_frame verplicht zijn en de rest optioneel. Je kunt ook waarden instellen voor max_runtime_sec en max_models; hier is de parameter max_runtime_sec vereist en max_model optioneel. Als je niets meegeeft, is de standaardwaarde NULL.
De parameter x is de vector met voorspellers uit training_frame. Als je niet alle voorspellers uit het frame wilt gebruiken dat je hebt doorgegeven, kun je ze specificeren via x.
Laten we nu enkele optionele en overige parameters bespreken. Probeer gerust met de parameters te spelen, ook als je ze nog niet kent; zo verdiep je je kennis in gevorderde onderwerpen:
validation_frame: Deze parameter wordt gebruikt voor early stopping van individuele modellen in AutoML. Het is een dataframe dat je doorgeeft voor de validatie van een model, of het kan een deel van de trainingsdata zijn als je niets doorgeeft.
leaderboard_frame: Als je dit doorgeeft, worden de modellen gescoord op basis van deze waarden in plaats van op cross-validatiemetrieken. Ook hier geldt: als je niets doorgeeft, worden waarden uit de trainingsdata gebruikt.
nfolds: K-voudige cross-validatie, standaard 5; kan worden gebruikt om de modelprestaties te beïnvloeden.
fold_columns: Geeft de index op voor cross-validatie.
weights_column: Als je gewichten aan specifieke kolommen wilt toekennen, gebruik je deze parameter. Gewicht 0 betekent dat je de kolom uitsluit.
ignored_columns: Alleen in Python; het omgekeerde van x.
stopping_metric: Geeft een metriek op voor early stopping van grids en modellen; standaard logloss voor classificatie en deviance voor regressie.
sort_metric: De parameter om de leaderboard-modellen aan het eind te sorteren. Standaard AUC voor binaire classificatie, mean_per_class_error voor multinomiale classificatie en deviance voor regressie.
De parameters validation_frame en leaderboard_frame zijn afhankelijk van de cross-validatieparameter nfolds.
De volgende scenario’s kunnen zich in twee gevallen voordoen:
als we cross-validatie gebruiken in AutoML: * Alleen training frame is doorgegeven - Dan worden de data in 80-20 gesplitst voor training en validatie. * training en leaderboard frame zijn doorgegeven - Geen verandering in de 80-20-split van data in training en validatie. * Als training en validation frame zijn doorgegeven - Geen split. * als alle drie frames zijn doorgegeven - Geen splits.
Als we geen cross-validatie gebruiken, wat veel invloed heeft op het leaderboard frame (nfolds = 0): * Alleen training frame is doorgegeven - De data worden gesplitst in 80/10/10 voor training, validatie en leaderboard. * training en leaderboard frame zijn doorgegeven - Data worden gesplitst in 80-20 voor training en validatie. * Als training en validation frame zijn doorgegeven - De validation_frame-data worden gesplitst in 50-50 voor validatie en leaderboard. * als alle drie frames zijn doorgegeven - Geen splits.
Implementatie in R en Python
R
H2O importeert data als een Frame, wat verschilt van een data frame dat we in R en Python gebruiken voor verschillende bewerkingen.
Maak een automl-object door de verplichte parameters door te geven. We geven alleen het training frame door, en de parameter nfolds heeft zijn standaardwaarde. Je kunt de runtime van het model vergroten naar behoefte.
train[,y]<- as.factor(train[,y])
aml <- h2o.automl(x = x, y = y,
training_frame = train,
max_runtime_secs =30)Mogelijk gemaakt door
##
|||0%||=|1%||=|2%||==|3%||===|4%||===|5%||====|6%||=====|8%||======|9%||======|10%||========|13%||==========|15%||==========|16%||===========|16%||===========|17%||===========|18%||============|18%||==============================================================|95%||=================================================================|100%Mogelijk gemaakt door
De leaderboard van verschillende modellen bekijken.
H2O beschrijven
Er is veel buzz rondom machinelearning-algoritmen én een groeiende vraag naar experts. We weten allemaal dat er een flinke kloof is in de benodigde vaardigheden. Het doel van H2O is om een platform te bieden waarmee niet-experts gemakkelijk kunnen experimenteren met machine learning.
De H2O-architectuur is op te delen in verschillende lagen, waarbij de bovenste laag uit verschillende API’s bestaat en de onderste laag uit de H2O JVM.
De kerncode van H2O is geschreven in Java, wat het hele framework geschikt maakt voor multithreading. Hoewel het in Java is geschreven, biedt het interfaces voor R, Python en enkele andere talen die in de architectuur staan, waardoor je het efficiënt kunt gebruiken.
Kortom: H2O is open source, in-memory, gedistribueerd, snel en schaalbaar voor machine learning en voorspellende analyses, en maakt het bouwen van machinelearningmodellen een stuk eenvoudiger.
Installatieproces
R
Als je H2O-functionaliteit in R wilt gebruiken, kun je simpelweg het H2O-pakket installeren met het commando
install.packages("h2o").Het initialiseren van H2O kan een fout geven als je geen 64-bits JDK hebt. Installeer in dat geval de nieuwste 64-bits JDK; daarna zou het probleem verholpen moeten zijn.
Python
Gebruik je Python, dan werkt het hetzelfde: via de commandline
pip install -U h2oen h2o wordt in je Python-omgeving geïnstalleerd. Het initialiseren van h2o verloopt op dezelfde manier.Het commando h2o.init() is behoorlijk slim en doet veel werk. Eerst zoekt het naar een actieve h2o-instantie voordat het een nieuwe start, en start pas een nieuwe als er geen instantie aanwezig is.
Er zijn ook argumenten om resources toe te wijzen aan de h2o-instantie; vaak gebruikte zijn:
nthreads: Standaard is de waarde van nthreads -1, wat betekent dat de instantie alle CPU-cores mag gebruiken. Je kunt het aantal gebruikte cores instellen door een waarde door te geven.
max_mem_size: Met dit argument kun je het maximale geheugen beperken dat aan de instantie wordt toegewezen. Het is van het type string; je kunt een waarde doorgeven als ‘2g’ of ‘2G’ voor 2 GB geheugen, en op dezelfde manier voor MB’s.
Zodra de instantie is aangemaakt, kun je de Flow openen door http://localhost:54321 in je browser te typen. Flow is de naam van de webinterface die onderdeel is van h2o en geen extra installatie vereist. Het is geschreven in CoffeeScript (een JavaScript-achtige taal). Je kunt het gebruiken voor het volgende:
De interface is erg handig en laagdrempelig voor niet-experts. Ik raad je aan om het te proberen en zelf wat experimenten te doen.
AutoML
Dan nu het AutoML-gedeelte van H2O: AutoML helpt bij het automatisch trainen en tunen van veel modellen binnen een door de gebruiker ingestelde tijdslimiet.
De huidige versie van de AutoML-functie kan een Random Forest, een Extremely-Randomized Forest, een willekeurig raster van Gradient Boosting Machines (GBM’s), een willekeurig raster van Deep Neural Nets trainen en cross-validaten, en traint daarna een Stacked Ensemble met al deze modellen.
Als we het over AutoML hebben, moet het aspecten afdekken als datavoorbereiding, modelgeneratie en ensembles, en daarbij zo weinig mogelijk parameters vragen zodat gebruikers met minder verwarring aan de slag kunnen. H2O AutoML doet dit eenvoudig, met een minimum aan door de gebruiker opgegeven parameters.
In zowel de R- als de Python-API gebruikt het dezelfde data-gerelateerde argumenten
x,y,training_frame,validation frame, waarvanyentraining_frameverplicht zijn en de rest optioneel. Je kunt ook waarden instellen voormax_runtime_secenmax_models; hier is de parametermax_runtime_secvereist enmax_modeloptioneel. Als je niets meegeeft, is de standaardwaarde NULL.De parameter
xis de vector met voorspellers uittraining_frame. Als je niet alle voorspellers uit het frame wilt gebruiken dat je hebt doorgegeven, kun je ze specificeren viax.Laten we nu enkele optionele en overige parameters bespreken. Probeer gerust met de parameters te spelen, ook als je ze nog niet kent; zo verdiep je je kennis in gevorderde onderwerpen:
validation_frame: Deze parameter wordt gebruikt voor early stopping van individuele modellen in AutoML. Het is een dataframe dat je doorgeeft voor de validatie van een model, of het kan een deel van de trainingsdata zijn als je niets doorgeeft.
leaderboard_frame: Als je dit doorgeeft, worden de modellen gescoord op basis van deze waarden in plaats van op cross-validatiemetrieken. Ook hier geldt: als je niets doorgeeft, worden waarden uit de trainingsdata gebruikt.
nfolds: K-voudige cross-validatie, standaard 5; kan worden gebruikt om de modelprestaties te beïnvloeden.
fold_columns: Geeft de index op voor cross-validatie.
weights_column: Als je gewichten aan specifieke kolommen wilt toekennen, gebruik je deze parameter. Gewicht 0 betekent dat je de kolom uitsluit.
ignored_columns: Alleen in Python; het omgekeerde van
x.stopping_metric: Geeft een metriek op voor early stopping van grids en modellen; standaard logloss voor classificatie en deviance voor regressie.
sort_metric: De parameter om de leaderboard-modellen aan het eind te sorteren. Standaard AUC voor binaire classificatie, mean_per_class_error voor multinomiale classificatie en deviance voor regressie.
De parameters validation_frame en leaderboard_frame zijn afhankelijk van de cross-validatieparameter
nfolds.De volgende scenario’s kunnen zich in twee gevallen voordoen:
als we cross-validatie gebruiken in AutoML: * Alleen training frame is doorgegeven - Dan worden de data in 80-20 gesplitst voor training en validatie. * training en leaderboard frame zijn doorgegeven - Geen verandering in de 80-20-split van data in training en validatie. * Als training en validation frame zijn doorgegeven - Geen split. * als alle drie frames zijn doorgegeven - Geen splits.
Als we geen cross-validatie gebruiken, wat veel invloed heeft op het leaderboard frame (nfolds = 0): * Alleen training frame is doorgegeven - De data worden gesplitst in 80/10/10 voor training, validatie en leaderboard. * training en leaderboard frame zijn doorgegeven - Data worden gesplitst in 80-20 voor training en validatie. * Als training en validation frame zijn doorgegeven - De validation_frame-data worden gesplitst in 50-50 voor validatie en leaderboard. * als alle drie frames zijn doorgegeven - Geen splits.
Implementatie in R en Python
R
H2O importeert data als een Frame, wat verschilt van een data frame dat we in R en Python gebruiken voor verschillende bewerkingen.
Voorspellers en de response instellen.
Maak een automl-object door de verplichte parameters door te geven. We geven alleen het training frame door, en de parameter nfolds heeft zijn standaardwaarde. Je kunt de runtime van het model vergroten naar behoefte.
De leaderboard van verschillende modellen bekijken.
Python
Wil je meer leren in Python? Volg dan DataCamp’s cursus Parallel Computing with Dask.