2017-09-12 1 views
0

Nous utilisons Prediction Service Builder en utilisant Java POJO pour servir notre modèle. Mais quand nous passons une nouvelle valeur catégorique d'une caractéristique que le modèle n'a pas vu auparavant pendant l'entraînement. Cela donne une exception. Comment puis-je gérer cela?h2o randomforest ne prédisant pas sur une valeur catégorique qui ne voit pas pendant la formation, il donne l'exception

+0

Je pense que la meilleure solution est peut-être juste choisir un ensemble d'entraînement qui comprend toutes les catégories. Vous pouvez également brosser les données du monde réel pour tracer des valeurs aberrantes jamais vues jusqu'à des catégories connues. –

+0

Cette question est également répondue ici: https://stackoverflow.com/questions/45093030/training-model-with-multiple-features-whos-values-are-conceptually-the-same/45094060#45094060 –

Répondre

2

Java POJO et la documentation MOJO pour H2O-3 est ici:

L'exemple pertinent au niveau POJO est collé ci-dessous:

String modelClassName = "gbm_pojo_test"; 
hex.genmodel.GenModel rawModel; 
rawModel = (hex.genmodel.GenModel) Class.forName(modelClassName).newInstance(); 

// By default, unknown categorical levels throw PredictUnknownCategoricalLevelException. 
// Optionally configure the wrapper to treat unknown categorical levels as N/A instead 
// and strings that cannot be converted to numbers also to N/As: 
EasyPredictModelWrapper model = new EasyPredictModelWrapper(
     new EasyPredictModelWrapper.Config() 
      .setModel(rawModel) 
      .setConvertUnknownCategoricalLevelsToNa(true) 
      .setConvertInvalidNumbersToNa(true) 
); 


Incidemment, Si vous utilisez des MOJO au lieu de POJO, vous n'aurez pas du tout à compiler un code de modèle Java DRF, ce qui peut poser un problème pour les grands modèles. Voici un exemple de projet qui construit un modèle d'arbre, exporte MOJO, crée un fichier WAR, et déploie dans un servlet Java très simple conteneur: