2017-07-07 1 views
3

J'essaie de prédire les temps de test dans un compil Kaggle en utilisant la fonction H2OGeneralizedLinearEstimator. Le modèle s'entraîne normalement à la ligne 3 et les mesures sont toutes raisonnables. Cependant, quand je viens à l'étape prédire, je reçois une erreur malgré la trame de données de test correspondant à la trame de données de train.H2OGeneralizedLinearEstimator() - Erreur de prédiction

Quelqu'un at-il déjà vu cette erreur?

h2o_glm = H2OGeneralizedLinearEstimator() 

h2o_glm.train(training_frame=train_h2o,y='y') 

h2o_glm_predictions = h2o_glm.predict(test_data=test_h2o).as_data_frame() 

test_pred = pd.read_csv('test.csv')[['ID']] 
test_pred['y'] = h2o_glm_predictions 
test_pred.to_csv('h2o_glm_predictions.csv',index=False) 

glm Progression de la construction du modèle: | █████████████████████████████████████ ██████████ | 100%

glm prediction progress: | (failed) 

OSError Traceback (most recent call last) in() 3 h2o_glm.train(training_frame=train_h2o,y='y') 4 ----> 5 h2o_glm_predictions = h2o_glm.predict(test_data=test_h2o).as_data_frame() 6 7 test_pred = pd.read_csv('test.csv')[['ID']] 

/Applications/anaconda/lib/python3.6/site-packages/h2o/model/model_base.py in predict(self, test_data) 130 j = H2OJob(h2o.api("POST /4/Predictions/models/%s/frames/%s" % (self.model_id, test_data.frame_id)), 131 self._model_json["algo"] + " prediction") --> 132 j.poll() 133 return h2o.get_frame(j.dest_key) 134 

/Applications/anaconda/lib/python3.6/site-packages/h2o/job.py in poll(self) 71 if (isinstance(self.job, dict)) and ("stacktrace" in list(self.job)): 72 raise EnvironmentError("Job with key {} failed with an exception: {}\nstacktrace: " ---> 73 "\n{}".format(self.job_key, self.exception, self.job["stacktrace"])) 74 else: 75 raise EnvironmentError("Job with key %s failed with an exception: %s" % (self.job_key, self.exception)) 

OSError: Job with key $03017f00000132d4ffffffff$_868312f4c32f683871930a1145c1476a failed with an exception: DistributedException from /127.0.0.1:54321: 'null', caused by java.lang.ArrayIndexOutOfBoundsException stacktrace: DistributedException from /127.0.0.1:54321: 'null', caused by java.lang.ArrayIndexOutOfBoundsException at water.MRTask.getResult(MRTask.java:478) at water.MRTask.getResult(MRTask.java:486) at water.MRTask.doAll(MRTask.java:390) at water.MRTask.doAll(MRTask.java:396) at hex.glm.GLMModel.predictScoreImpl(GLMModel.java:1215) at hex.Model.score(Model.java:1077) at water.api.ModelMetricsHandler$1.compute2(ModelMetricsHandler.java:351) at water.H2O$H2OCountedCompleter.compute(H2O.java:1349) at jsr166y.CountedCompleter.exec(CountedCompleter.java:468) at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263) at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974) at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477) at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) Caused by: java.lang.ArrayIndexOutOfBoundsException

+1

Cela ressemble à la même erreur que j'ai posté ici: https://stackoverflow.com/questions/44901421/h2o-predictions-sometimes-fail-whonse-variable-not-present-in-test-set solution de contournement, essayez d'ajouter une fausse colonne de réponse (par exemple, ajoutez une colonne constante 'y' à test_data) – Richard

+0

Cela a fonctionné tout de suite - merci! Espérons que ce bug sera corrigé dans une mise à jour ultérieure. Merci – George

+0

Pouvez-vous me dire quelle version de H2O est-ce que je peux suivre dans le rapport de bogue? THX. –

Répondre

2

Pour résumer les commentaires ci-dessus, la solution actuelle est d'ajouter une colonne de réponse (avec des données fausses si elle n'existe pas) au cadre test_data. Cependant, ceci est un bug qui devrait être corrigé. Le JIRA est here.

+1

Je peux confirmer que ce bug existe aussi dans R (à la fois h2o 3.10.3.3 et 3.12.0.1) et qu'il ne semble pas être spécifique à GLM, mais plutôt quelque chose à voir avec un encodage explicite à chaud - voir la question à laquelle je suis lié dans les commentaires. – Richard