我正在使用Weka通过Java API创建分类器。 实例是使用java代码创建的。 分类器也是通过传递以下
从代码创建的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 :(得分:0)
由于你没有提供所有相关信息,我会在黑暗中拍摄:
我假设您使用的是Weka版本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();
...
}
假设您没有为null
传递instance
,则只会离开m_ReplaceMissingValues
。调用方法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);
...
}
在行中创建对象后,您似乎从未在任何数据上训练过分类器Logistic
Classifier cls = (Classifier) Utils.forName(Classifier.class, classname, tmpOptions);