2017-05-26 1 views
0

J'utilise Steam pour tenter de construire un service de prédiction en utilisant un script de pré-traitement python. Lorsque python transmet les données nettoyées au service de prédiction dans leh2o Servlet de prédiction de vapeur n'acceptant pas les valeurs de caractères du script python

variable:value var2:value2 var3:value3 
le format

(comme on le voit dans le Spam Detection Example) Je reçois un

ERROR PredictPythonServlet - Failed to parse 

erreur du service. Quand je regarde le fichier PredictPythonServlet.java il semble utiliser uniquement la fonction strMapToRowData qui prend chaque valeur dans la chaîne d'entrée est un nombre:

for (String p : pairs) { 
    String[] a = p.split(":"); 
    String term = a[0]; 
    double value = Float.parseFloat(a[1]); 
    row.put(term, value); 
    } 

sont des valeurs de caractères ne peuvent pas être envoyés dans ce format? Si oui, existe-t-il un moyen d'obtenir le fichier PredictPythonServlet pour utiliser la fonction csvToRowData définie mais jamais utilisée? Je ne voudrais pas avoir à utiliser l'encodage One-Hot pour mes modèles, donc être capable de passer la représentation réelle de la chaîne de caractères serait idéal.

De plus, je suis passé à la représentation numérique trouvée dans le fichier pojo modèle pour les variables et reçu l'erreur:

hex.genmodel.easy.exception.PredictUnknownTypeException: Unexpected object type java.lang.Double for categorical column home_team 

il ressemble le service attend une chaîne de caractères, mais je ne peux pas comprendre comment le transmettre au modèle actuel. Toute aide serait grandement appréciée!

Répondre

1

Le service de prédiction utilise EasyPredictModelWrapper et il ne peut utiliser que ce que le modèle sous-jacent utilise. Ici, le modèle que vous utilisez n'est pas clair, mais la plupart utilisent des valeurs numériques flottantes. Dans l'extrait de code de boucle for, vous pouvez voir que le numéro doit être flottant.

+0

J'utilise un modèle GBM et utilise la gestion catégorielle 'Enum' pour que le modèle sache accepter des chaînes pour ces variables, et non des valeurs numériques. –

+1

Salut Matt, j'ai modifié le code pour revenir à l'utilisation de la chaîne si elle ne peut pas l'analyser comme un flotteur. Le code a été poussé donc cela devrait fonctionner pour vous maintenant. – Magnus

+0

J'ai soumis un PR (https://github.com/h2oai/steam/pull/375) pour ajouter également cette modification à la fonction strMapToRowData. Le modèle GBM que j'utilise semble être par défaut strMapToRowData pas la fonction sparseToRowData –