Mi sono formato e creato un modello J48 con GUI WEKA. Ho salvato il file del modello sul mio computer e ora mi piacerebbe usarlo per classificare una singola istanza nel mio codice Java. Mi piacerebbe avere una previsione per l'attributo "cluster". Quello che faccio è la seguente:Classificazione istanza singola 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);
}
Tuttavia, ottengo un'IndexArrayOutofBoundsException sulla linea inst_co.setValue(latitude, lat);
. Non sono riuscito a trovare il motivo di questa eccezione. Apprezzerò se qualcuno potesse indicarmi la giusta direzione.
Grazie per l'ottima risposta. Giusto per chiarire, classe A e classe B sono i possibili risultati della classificazione, cioè i nomi dei miei cluster, giusto? Suppongo che debbano essere uguali a quelli usati mentre stavo creando il modello. – Erol
Non funziona, sto diventando weka.core.UnassignedDatasetException: DenseInstance non ha accesso a un set di dati! errore. Suppongo che dovrò assegnarlo a un set di dati, forse quello che ho usato per addestrarlo? – Erol
@babatenor è necessario assegnarlo al set di dati con la stessa intestazione. Le loro informazioni di intestazione dovrebbero essere le stesse –