/ / Errore di runtime di Weka - java, weka, runtimeexception

Errore di runtime di Weka - java, weka, runtimeexception

Sto cercando di copiare il primo attributo del mio set di dati di addestramento e di copiare il corrispondente dal set di test per la conservazione dei libri. Il mio codice viene compilato correttamente. Ma non sono in grado di eseguirlo.

Ottengo il seguente errore quando eseguo java WekaRF

Exception in thread "main" java.lang.NoClassDefFoundError: weka/core/converters/CSVLoader
at WekaRF.main(WekaRF.java:17)
Caused by: java.lang.ClassNotFoundException: weka.core.converters.CSVLoader
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more

Se corro, java -cp weka-3-8-1 / weka.jar WekaRF, ottengo

Error: Could not find or load main class WekaRF

Il mio codice è riportato di seguito

import java.io.*;
import java.util.Random;
import weka.classifiers.Evaluation;
import weka.classifiers.trees.RandomForest;
import weka.core.Instances;
import weka.filters.unsupervised.attribute.Remove;
import weka.core.converters.*;

public class WekaRF {
public static void main(String[] args) {
int percent = 60;
Instances data = null;
try {
CSVLoader loader = new CSVLoader();
loader.setSource(new File("../../rf.csv"));
data = loader.getDataSet();
} catch (Exception e) {
e.printStackTrace();
return;
}
int TrainSize = (int) Math.round(data.numInstances() * percent/ 100);
int TestSize = data.numInstances() - TrainSize;

Instances Train = new Instances(data, 0, TrainSize);
Instances Test = new Instances(data, TrainSize, TestSize);
System.out.println(Test.attribute(0).name());
Remove remove = new Remove();
String[] options = new String[2];
options[0] = "-R";
options[1] = "1";
remove.setOptions(options);
remove.setInputFormat(data2);
Test = Filter.useFilter(Test, remove);
Train.setClassIndex(Train.numAttributes() - 1);
}
}

risposte:

0 per risposta № 1

Il classpath non include la directory corrente, quindi java non ha visto il tuo WekaRF classe. Prova ad usare java -cp .;weka-3-8-1/weka.jar WekaRF anziché. Nota punto all'inizio -cp discussione. Denota la directory corrente.

Aggiornamento: il carattere utilizzato per separare le singole voci del percorso classe è dipendente dal sistema operativo. Windows utilizza ; e molti altri sistemi usano :. Il separatore di percorso effettivo può essere recuperato interrogando java.io.File :: PathSeparator campo.