Ich trainierte und erstellte ein J48-Modell mit WEKA-GUI. Ich habe die Modelldatei auf meinem Computer gespeichert und möchte sie jetzt dazu verwenden, eine einzelne Instanz in meinem Java-Code zu klassifizieren. Ich möchte eine Vorhersage für das Attribut "Cluster" erhalten. Was ich tue, ist die folgende:Klassifizierung einzelner Instanzen in Weka
public void classify(double lat, double lon, double co)
{
// Create attributes to be used with classifiers
Attribute latitude = new Attribute("latitude");
Attribute longitude = new Attribute("longitude");
Attribute carbonmonoxide = new Attribute("co");
// Create instances for each pollutant with attribute values latitude, longitude and pollutant itself
inst_co = new DenseInstance(4);
// Set instance's values for the attributes "latitude", "longitude", and "pollutant concentration"
inst_co.setValue(latitude, lat);
inst_co.setValue(longitude, lon);
inst_co.setValue(carbonmonoxide, co);
inst_co.setMissing(cluster);
Classifier cls_co = (Classifier) weka.core.SerializationHelper.read("/CO_J48Model.model");//load classifier from file
// Test the model
double result = cls_co.classifyInstance(inst_co);
}
aber ich erhalte eine IndexArrayOutofBoundsException auf der Linie inst_co.setValue(latitude, lat);
. Ich konnte den Grund für diese Ausnahme nicht finden. Ich werde es begrüßen, wenn mir jemand in die richtige Richtung zeigen könnte.
Vielen Dank für die tolle Antwort. Nur um zu verdeutlichen, sind Klasse A und Klasse B die möglichen Ergebnisse der Klassifizierung, d. H. Meine Clusternamen, richtig? Ich denke, sie müssen mit denen identisch sein, die während der Erstellung des Modells verwendet wurden. – Erol
Nicht funktioniert, ich bekomme weka.core.UnassignedDatasetException: DenseInstance hat keinen Zugriff auf einen Datensatz! Error. Ich denke, ich muss es einem Datensatz zuordnen, vielleicht dem, mit dem ich es trainiert habe? – Erol
@babatenor Sie müssen es Datensatz mit dem gleichen Header zuweisen. Ihre Header-Informationen sollten die gleichen sein –