2017-07-17 1 views
0

J'essaie de faire usage de max_runtime_seconds mais soit j'ai du mal à comprendre comment cela devrait fonctionner, ou ce que je ressens est plus probable - il y a une sorte de bug.h2o max_runtime_seconds - ne semble pas avoir d'impact?

J'ai testé avec des forêts aléatoires et il ne semble jamais réduire le temps d'exécution.

import h2o 
h2o.init() 
from h2o.estimators import H2ORandomForestEstimator 

df=h2o.import_file('covtype.csv') #### https://archive.ics.uci.edu/ml/machine-learning-databases/covtype/ 
for i in df.names: 
    df[i]=df[i].asfactor() 
df.types ## just showing everything is categorical 


train,test = df.split_frame(ratios=[0.75], seed = 2017) 

response = 'C55' 
xvars = train.drop(["C55"]).col_names 


mymodel = H2ORandomForestEstimator(
nfolds = 10, 
max_runtime_secs = 30, 
    stopping_rounds = 5, 
    ntrees = 500 
) 

mymodel.train(
x = xvars, 
y = response, 
validation_frame = test, 
training_frame = train) 
## does not finish remotely close to <30 seconds 
mymodel.actual_params() 

Notez que le paramètre de temps de fonctionnement max ne semble pas être sauvegardé et reste à 0. J'utilise la version « bleeding edge » de h2o dès maintenant ~ 3,13 et python.

+0

Ma supposition est que 'max_runtime_secs' fait référence aux secondes allouées maximum pour exécuter chaque pour chaque arbre. Ainsi, si vous avez 'ntrees = 100', alors le temps maximum pour construire ce modèle est 100 arbres x 90 sec x 5 fois, ou 45000 secondes. –

+0

Si vous publiez un exemple entièrement reproductible, il est plus probable que quelqu'un essaiera de vous aider à déboguer le problème: https://stackoverflow.com/help/mcve Vous pouvez même copier celui des documents: http: // docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/max_runtime_secs.html En ajoutant également du code pour chronométrer la formation en utilisant le module timeit ou similaire, cela aiderait à démontrer s'il s'agit réellement d'un bug ou pas. –

+0

@ Scratch'N'Purr C'est une bonne supposition, mais non, les docs indiquent que c'est l'exécution maximale pour le modèle entier (pas chaque arbre). Donc, en effet, la variable 'max_runtime_secs' devrait imposer une limite de temps de 90 secondes dans le code ci-dessus. –

Répondre

0

J'ai confirmé qu'il s'agit d'un bug de l'API Python (le code max_runtime_secs fonctionne sur le backend et également sur le client R). J'ai ouvert un ticket here et j'espère que cela sera corrigé dans la prochaine version.

+1

Ok Erin, merci de me battre pour cela par quelques secondes. J'ai mis à jour ce qui précède avec un exemple en utilisant le jeu de données de type couverture. Merci! – jack