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 № 1Il 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.