2014-06-10 3 views
-4

Weka를 사용하여 Java API를 통해 분류자를 만듭니다. 인스턴스는 Java 코드를 사용하여 작성됩니다. 분류 자이Weka 분류자를 사용하는 동안 Nullpointer 예외가 발생했습니다.

String args[]=" -x 10 -s 1 -W weka.classifiers.functions.Logistic".split(" "); 

String classname; 
String[] tmpOptions = Utils.splitOptions(Utils.getOption("W", args)); 
classname = tmpOptions[0]; 
System.out.println(classname); 
Classifier cls = (Classifier) Utils.forName(Classifier.class, classname, tmpOptions); 

그것은 잘 작동하고 교차 검증을 수행 다음 코드뿐만 아니라 통해 통과에서 생성되고있다.

그 후에 다시 교육 인스턴스를로드하고 출력에 레이블을 지정합니까? 및

for (int index = 0; index < postDatas.size(); index++) { 
    Instance instance = nominal.instance(index); 

    double label = classifier.classifyInstance(instance); 

    System.out.println(label); 

} 

classifier.classifyInstance(instance); 나에게 다음과 같은 예외를 제공하여 분류에 전달 :

어디에 내가 잘못 가고 어떤 단서
java.lang.NullPointerException 
    at weka.classifiers.functions.Logistic.distributionForInstance(Logistic.java:710) 

?

+0

데이터에 분류 Logistic 훈련을받은 적이처럼 보인다 : "Logistic.java:710". 그게 뭐야? –

+0

weka api의 일부입니다. 나는 심각하게 그것을 downvoting하기 전에 문제를 이해 주셔서 감사합니다. 자바 문제가 더 이상 weka 문제의 말을하지 않습니다. 나는 오라클 인증 자바 개발자이며 직접 자바 문제를 해결할 수 있습니다. – Terminator

+2

볼 수없는 코드는 디버깅 할 수 없습니다. – csmckelvey

답변

0

모든 관련 정보를 제공하지 않았기 때문에, 나는 어둠 속에서 촬영 할게요 :

난 당신이 웨카 버전 3.7.5을 사용하고 내가 온라인

을 다음 source code for Logistic.java을 찾을 수 있으리라 믿고있어를
public double [] distributionForInstance(Instance instance) throws Exception { 
    // line 710 
    m_ReplaceMissingValues.input(instance); 
    instance = m_ReplaceMissingValues.output(); 
    ... 
} 

이것은 단지 m_ReplaceMissingValues 잎, 당신이 instance에 대한 null를 통과하지 못한 가정. 그 멤버는 방법 Logistic.buildClassifier(Instances train)가 호출 될 때 초기화 :

public void buildClassifier(Instances train) throws Exception { 
    ... 
    // missing values 
    m_ReplaceMissingValues = new ReplaceMissingValues(); 
    m_ReplaceMissingValues.setInputFormat(train); 
    train = Filter.useFilter(train, m_ReplaceMissingValues); 
    ... 
} 

그것은 당신이 라인에서 개체를 만든 후이 당신의 단서

Classifier cls = (Classifier) Utils.forName(Classifier.class, classname, tmpOptions); 
+0

그래, buildClassifier를 호출하여 문제를 해결했습니다. 실제로 교차 유효성 검사를하고 모델을 만들었지 만 classifier.copy (buildClassifier)에있었습니다. 감사! – Terminator

관련 문제