J'ai un modèle DRF créé en h2o flow
qui est censé être binomiale et flow
indique qu'il est binomialeh2o résultats du service de prédiction de la vapeur ne pas être reconnu comme BinaryPrediction pour estimateur binomiale
mais je suis ayant un problème où, l'important dans h2o steam
et le déployant vers le service de prédiction, le modèle ne semble pas être reconnu comme binomial. La raison pour laquelle je pense que c'est vrai est montrée ci-dessous. La raison pour laquelle c'est un problème est parce que je pense que c'est ce qui fait que le service de prédiction ne montre PAS la valeur de confiance pour la prédiction (ce raisonnement est également montré ci-dessous).
Dans le service de prédiction, je peux obtenir une étiquette de prédiction, mais aucune valeur renseignée dans la table de probabilités d'étiquette-index.
Utilisation de l'inspecteur du navigateur (Google Chrome), la sortie de prédiction semble dépendre d'un fichier appelé predict.js
.
Afin d'obtenir les valeurs de probabilité de prédiction à afficher dans le service de prédiction, il semble que this bloc de code doit courir pour se rendre à this ligne. Ouverture du fichier predict.js
au sein de l'inspecteur sur la page des services de prévision et en ajoutant quelques instructions de sortie de débogage quelques-unes des lignes supérieures (indiquées avec des commentaires DEBUG/ENDDEBUG dans le code ci-dessous), ma fonction showResults() ressemble alors:
function showResult(div, status, data) {
////////// DEBUG
console.log("showResult entered")
////////// ENDDEBUG
var result = '<legend>Model Predictions</legend>'
////////// DEBUG
console.log(data)
console.log(data.classProbabilities)
console.log("**showResult: isBinPred=" + isBinaryPrediction)
////////// ENDDEBUG
if (data.classProbabilities) {
////////// DEBUG
console.log("**showResult: data.classProbabilities not null")
////////// ENDDEBUG
// binomial and multinomial
var label = data.label;
var index = data.labelIndex;
var probs = data.classProbabilities;
var prob = probs[index];
result += '<p>Predicting <span class="labelHighlight">' + label + '</span>';
if (probs.length == 2) {
result += ' based on max F1 threshold </p>';
}
result += ' </p>';
result += '<table class="table" id="modelPredictions"> \
<thead> \
<tr> \
<th>Index</th> \
<th>Labels</th> \
<th>Probability</th> \
</tr> \
</thead> \
<tbody> \
';
if (isBinaryPrediction) {
var labelProbabilitiesMapping = [];
outputDomain.map(function(label, i) {
var labelProbMap = {};
labelProbMap.label = outputDomain[i];
labelProbMap.probability = probs[i];
if (i === index) {
labelProbMap.predicted = true;
}
labelProbMap.originalIndex = i;
labelProbabilitiesMapping.push(labelProbMap);
});
labelProbabilitiesMapping.sort(function(a, b) {
return b.probability - a.probability;
});
var limit = labelProbabilitiesMapping.length > 5 ? 5 : labelProbabilitiesMapping.length;
for (var i = 0; i < limit; i++) {
if (labelProbabilitiesMapping[i].predicted === true) {
result += '<tr class="rowHighlight">'
} else {
result += '<tr>'
}
result += '<td>' + labelProbabilitiesMapping[i].originalIndex + '</td><td>' + labelProbabilitiesMapping[i].label + '</td> <td>' + labelProbabilitiesMapping[i].probability.toFixed(4) + '</td></tr>';
}
} else {
for (var label_i in outputDomain) {
if (parseInt(label_i) === index){
result += '<tr class="rowHighlight">'
} else {
result += '<tr>'
}
result += '<td>' + label_i + '</td><td>' + outputDomain[label_i] + '</td> <td>' + probs[label_i].toFixed(4) + '</td></tr>';
}
}
result += '</tbody></table>';
}
else if ("cluster" in data) {
// clustering result
result = "Cluster <b>" + data["cluster"] + "</b>";
}
else if ("value" in data) {
// regression result
result = "Value <b>" + data["value"] + "</b>";
}
else if ("dimensions" in data) {
// dimensionality reduction result
result = "Dimensions <b>" + data["dimensions"] + "</b>";
}
else {
result = "Can't parse result: " + data;
}
div.innerHTML = result;
}
et en cliquant sur « prévoir » dans le service de prévision génère maintenant la sortie de la console:
Si je devais ajouter une déclaration à isBinaryPrediction = true
forcec la variable globale true (autour here) et exécuter à nouveau la prédiction, la console visualise:
indiquant que le variableoutputDomain
est indéfini. La variable outputDomain
semble être définie dans functionshowModel
. Cette fonction semble s'exécuter lors du chargement de la page. Je ne peux donc pas la modifier dans l'inspecteur de chrome pour voir les valeurs des variables. Si quelqu'un sait comment résoudre ce problème (obtenir les valeurs de probabilité de prédiction pour le service de prédiction h2o steam
pour les modèles binomiaux), cela serait d'une grande aide. Merci :)
Je ne pense pas que le modèle est importé en tant que MOJO dans ce cas, car je ne rencontre pas les mêmes types de problèmes que ceux que j'ai rencontrés dans ce post (https://stackoverflow.com/q/ 46353578/8236733) lorsqu'il était plus probable que le modèle était importé en tant que MOJO. Le modèle que j'utilise maintenant est beaucoup plus petit (200MB contre 800MB). – lampShadesDrifter
Je crois que Steam envoie toujours des modèles DRF en tant que MOJO. Vous pouvez essayer de l'exporter en tant que POJO et construire un service de prédiction à partir de cela, et voir si vous obtenez le même résultat. – Magnus
Note utile pour les autres: Depuis l'URL du service de prédiction (par exemple, localhost: 16563), vous pouvez accéder au sous-domaine "/ info" (par exemple localhost: 16563/info) pour voir une carte json de certaines informations sur le modèle utilisé. – lampShadesDrifter