2017-12-04 20 views
0

私はトレーニングデータセットの最初の属性をコピーし、ブックを保持する目的でテストセットから対応するものをコピーしようとしています。私のコードは正常にコンパイルされます。しかし、私はそれを実行することはできません。Wekaランタイムエラー

私は、次のerrorwhen実行javaは、私は、WEKA-3-8-1/weka.jar WekaRF -cp javaの実行した場合、私は

Error: Could not find or load main class 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 

をWekaRF取得

以下が与えられます

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); 
    } 
} 

答えて

0

あなたのクラスパスには現在のディレクトリが含まれていないので、javaはあなたのWekaRFクラスを見ませんでした。 java -cp .;weka-3-8-1/weka.jar WekaRFを代わりに使用してください。 -cp引数の先頭にドットが付きます。現在のディレクトリを示します。

更新:個々のクラスパスエントリを区切るために使用される文字は、オペレーティングシステムによって異なります。 Windowsでは;が使用され、他のほとんどのシステムでは:が使用されます。実際のパス区切り文字は、java.io.File::pathSeparatorフィールドを照会すると検索できます。

+0

それは働いた。それは次のものでなければならない。 – Shew

+0

正しいですが、パス区切り記号はシステム依存です。 Windowsでは ';'を使い、他のほとんどのシステムでは ':'を使います。 – user882813