2017-11-03 2 views
0
public BinomialModelPrediction predictBinomial(RowData data) throws PredictException { 
     double[] preds = this.preamble(ModelCategory.Binomial, data); 
     BinomialModelPrediction p = new BinomialModelPrediction(); 
     double d = preds[0]; 
     p.labelIndex = (int)d; 
     String[] domainValues = this.m.getDomainValues(this.m.getResponseIdx()); 
     p.label = domainValues[p.labelIndex]; 
     p.classProbabilities = new double[this.m.getNumResponseClasses()]; 
     System.arraycopy(preds, 1, p.classProbabilities, 0, p.classProbabilities.length); 
     if(this.m.calibrateClassProbabilities(preds)) { 
      p.calibratedClassProbabilities = new double[this.m.getNumResponseClasses()]; 
      System.arraycopy(preds, 1, p.calibratedClassProbabilities, 0, p.calibratedClassProbabilities.length); 
     } 
     return p; 
    } 

ZB: classProbabilities = [0.82333,0,276666] labelIndex = 1 Label = true domainValues ​​= [false, true]EasyPredictModelWrapper geben falsche Vorhersage

was dieses labelIndex bedeutet tut und ist die Klassenwahrscheinlichkeiten Ordnung ist die gleiche wie die Domain-Wert-Reihenfolge, Wenn Reihenfolge gleich ist, dann bedeutet dies, dass hier Wahrscheinlichkeit von false ist 0,82333 und Wahrscheinlichkeit von wahr ist 0,27666, aber warum ist dieser labelIndex als 1 und Beschriftung als wahr.

Bitte helfen Sie mir, dieses Problem zu lösen.

+0

Warum denken Sie, die Antwort ist falsch? Der Schwellenwert, der zum Auswählen der vorhergesagten Klasse für Binomialklassifikationsprobleme verwendet wird, ist max-F1. Wenn Ihnen diese Schwelle nicht gefällt, können Sie die Schwellenwertbildung selbst durchführen. – TomKraljevic

Antwort

0

Wie Tom kommentierte, ist die Vorhersage nicht "falsch". Daraus können Sie ableiten, dass der Schwellenwert, den H2O gewählt hat, kleiner als 0,27666 ist. Sie haben wahrscheinlich unausgewogene Trainingsdaten, sonst hätte H2O keine niedrige Schwelle für die Klassifizierung eines vorhergesagten Wertes von 0,27666 als 1 gewählt. Enthält Ihr Trainingssatz weniger Beispiele für die positive Klasse als die negative Klasse?

Wenn Sie diesen Schwellenwert aus irgendeinem Grund nicht mögen, können Sie manuell Ihren eigenen erstellen. Stellen Sie nur sicher, dass Sie wissen, wie Sie die Auswirkungen der Verwendung unterschiedlicher Schwellenwerte auf die Leistung Ihres Modells richtig auswerten können. Andernfalls würde ich nur empfehlen, den Standardschwellenwert zu verwenden.

Der Name "ClassProbabilities" ist eine falsche Bezeichnung. Diese sind nicht tatsächliche Wahrscheinlichkeiten, sie sind vorhergesagte Werte, obwohl Leute die Ausdrücke häufig synonym verwenden. Binäre Klassifikationsalgorithmen erzeugen "vorhergesagte Werte", die wie Wahrscheinlichkeiten aussehen, wenn sie zwischen 0 und 1 liegen, aber außer calibration process is performed repräsentieren sie nicht die Wahrscheinlichkeiten. Kalibrierung ist nicht unbedingt ein einfacher Prozess und es gibt viele Techniken. Hier finden Sie einige weitere info über Kalibriermethoden für unausgewogene Daten. In H2O können Sie die Kalibrierung mithilfe der Platt-Skalierung unter Verwendung der Option calibrate_model durchführen. Aber das ist wahrscheinlich nicht wirklich notwendig für das, was Sie versuchen zu tun.

Die richtige Methode zur Verwendung der Raw-Ausgabe eines binären Klassifikationsmodells besteht darin, nur den vorhergesagten Wert für die positive Klasse zu betrachten (Sie können den vorhergesagten Wert für die negative Klasse einfach ignorieren). Dann wählen Sie einen Schwellenwert, der Ihren Anforderungen entspricht, oder Sie können den Standardschwellenwert in H2O verwenden, der zur Maximierung des F1-Werts ausgewählt wird. Einige andere Software verwenden einen hardcoded Schwellenwert von 0,5, aber das ist eine schreckliche Wahl, wenn Sie nicht eine gerade Anzahl von positiven und negativen Beispielen in Ihren Trainingsdaten haben. Wenn Sie nur wenige positive Beispiele in Ihren Trainingsdaten haben, ist der beste Schwellenwert etwas niedriger als 0,5.

+0

Danke für die Antwort. –

+0

Vielen Dank. Meine Trainingsdaten sind verzerrt und haben mehr negative Beispiele. Eigentlich bin ich neu in H2O. Ich habe noch weitere Fragen. 1). Gibt es in H2O eine Dokumentation bezüglich der Auswahl der Schwellenwerte und der Vorhersage und Verwendung der Kalibrierung? 2). Wie kann ich den Schwellenwert für die automatische Erstellung verwenden? –

Verwandte Themen