在SVM分类的Java代码中使用哪些Weka和LibSVM.jar文件

在SVM分类的Java代码中使用哪些Weka和LibSVM.jar文件,java,jar,weka,libsvm,Java,Jar,Weka,Libsvm,如果我使用Weka Explorer运行一些训练数据,并使用带有线性核的SVM测试数据,那么一切都很好 但我需要在我自己的Java中以编程方式执行此操作,我当前的代码如下所示: Instances train = new Instances (...); train.setClassIndex(train.numAttributes() - 1); Instances test = new Instances (...) + ClassificationType classificationT

如果我使用Weka Explorer运行一些训练数据,并使用带有线性核的SVM测试数据,那么一切都很好

但我需要在我自己的Java中以编程方式执行此操作,我当前的代码如下所示:

Instances train = new Instances (...);
train.setClassIndex(train.numAttributes() - 1);
Instances test = new Instances (...) + 
ClassificationType classificationType = ClassificationTypeDAO.get(6);       
LibSVM libsvm = new LibSVM();
String options = (classificationType.getParameters());
String[] optionsArray = options.split(" ");                  
libsvm.setOptions(optionsArray);
String[] pars = libsvm.getOptions();     
Evaluation eval = new Evaluation(train);
libsvm.buildClassifier(train);       
eval.evaluateModel(libsvm, test);

System.out.println(eval.toSummaryString("\nResults\n======\n", false)); 
但是,在第行引发了一个异常:

eval.evaluateModel(libsvm,test)

尽管围绕此代码多次尝试使用
try…catch
块,但根据下面的完整堆栈跟踪,发生的异常仅报告为
null
(这非常有用)

我不相信这个问题是由于我自己的代码,因为其他分类器已经成功地运行了它。我正在研究的理论是,问题的原因是环境。但是在哪里和什么?我正在使用Tomcat通过NetBeans 8运行我的应用程序,并且在应用程序的
.lib
文件夹中有最新版本的
weka.jar
LibSVM.jar

但是我是否需要下载提供的
libsvm.jar

如果是后者,我如何解决Windows中的命名冲突,其中
LibSVM.jar
LibSVM.jar
被视为同一个文件

在过去的几个小时里,这让我很困惑。我尝试将
LibSVM.jar
LibSVM.jar
两个文件都添加到
.lib
文件夹中,对它们进行重命名,将它们放入新定义的
类路径中,但没有任何效果

Java异常的完整堆栈跟踪是:

空的 例如,weka.classifiers.functions.LibSVM.distributionFore(LibSVM.java:1489) weka.classifiers.Evaluation.evaluationForSingleInstance(Evaluation.java:1560) 分类器。评估。评估模型和记录预测(Evaluation.java:1597) weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1477) visualRSS.test.Weka_LibSVM_test.classification(Weka_LibSVM_test.java:48) visualRSS.Initialization.TestProgram\u Context\u Listener.contextInitialized(TestProgram\u Context\u Listener.java:29) org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972) org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) org.apache.catalina.core.StandardContext.reload(StandardContext.java:3228) org.apache.catalina.manager.ManagerServlet.reload(ManagerServlet.java:943) org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:361) javaservlet.http.HttpServlet.service(HttpServlet.java:617) javaservlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:558) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) org.apache.coyote.http11.http11aprotocol$Http11ConnectionHandler.process(http11aprotocol.java:579) org.apache.tomcat.util.net.aprenpoint$Worker.run(aprenpoint.java:1555)


我的测试代码的问题与Weka以编程方式运行LibSVM所需的
.jar
文件有关

如果我的代码是:

public static void classify() {      
    try {            
        Instances train = new Instances (...);            
        train.setClassIndex(train.numAttributes() - 1);         
        Instances test = new Instances (...);            
        test.setClassIndex(test.numAttributes() - 1);                      
        ClassificationType classificationType = ClassificationTypeDAO.get(6);  // 6 is SVM.        
        LibSVM classifier = new LibSVM();
        String options = (classificationType.getParameters());
        String[] optionsArray = options.split(" ");                          
        classifier.setOptions(optionsArray);        
        classifier.buildClassifier(train);        
        Evaluation eval = new Evaluation(train);
        eval.evaluateModel(classifier, test);
        System.out.println(eval.toSummaryString("\nResults\n======\n", false));       
    } 
    catch (Exception ex) {            
        Misc_Utils.printStackTrace(ex);
    }                       
}
我发现我需要将
weka.jar
(来自weka)和
libsvm.jar
(来自应用程序的
.lib
文件夹中。但由于Windows中的命名冲突,我将文件
libsvm.jar
(来自weka)重命名为
libsvm\u weka.jar
,并将其添加到
.lib
文件夹中


运行该程序,我现在得到的结果与Weka的Explorer相匹配,使用的关键词频率在5类数据中分布不均匀。

如果您提供了可运行的最低要点或等效代码来重现问题,则会更容易帮助您。您需要提供什么?我不明白您在评论中的要求。Ap语言学家:我的意思是,除了问题本身,你还需要我提供什么?这正是我在评论中要求的。