- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在不同的训练实例上一次性在 weka 中构建过滤分类器。我已经发布了示例代码来阐明我的观点
导入 weka.classifiers.meta.FilteredClassifier;
导入 weka.classifiers.trees.J48;
导入 weka.filters.unsupervised.attribute.Remove;
...
实例 train = ...//来自某处
实例 test = ...//来自某处
//筛选
删除 rm = 新删除();
rm.setAttributeIndices("1");//删除第一个属性
//分类器
J48 j48 = 新 J48();
j48.setUnpruned(true);//使用未修剪的 J48
//元分类器
FilteredClassifier fc = new FilteredClassifier();
fc.setFilter(rm);
fc.setClassifier(j48);
//训练并做出预测
fc.buildClassifier(train);
for (int i = 0; i < test.numInstances(); i++) {
双 pred = fc.classifyInstance(test.instance(i));
System.out.print("ID:"+ test.instance(i).value(0));
System.out.print(",实际:"+ test.classAttribute().value((int) test.instance(i).classValue()));
System.out.println(", 预测: "+ test.classAttribute().value((int) pred));
}
在将数据打印到控制台后的 for 循环内,我需要在另一个训练数据集上再次重建 FilteredClassifier (fc)。我目前正在尝试这样做,但没有成功,就像我使用 FilteredClassifier (fc) 的相同实例或创建 FilteredClassifier 的新实例一样,Weka 引发 NullPointerException。
我怎样才能做我想做的事?如果 FilteredClassifier 创建线程以便在我使用 FilteredClassifier 的另一个实例时挂起其操作,我是否需要使用任何 wait() 或 notification() 操作?
这是 JVM 引发的异常的 pintStack
java.lang.NullPointerException
在 java.util.Hashtable.hash(来源未知)
在 java.util.Hashtable.get(来源未知)
在 weka.core.Attribute.addStringValue(Attribute.java:868)
在 weka.core.StringLocator.copyStringValues(StringLocator.java:148)
在 weka.core.StringLocator.copyStringValues(StringLocator.java:93)
在 weka.filters.Filter.copyValues(Filter.java:364)
在 weka.filters.Filter.bufferInput(Filter.java:301)
在weka.filters.unsupervised.attribute.StringToWordVector.input(StringToWordVector.java:697)
在 weka.filters.Filter.useFilter(Filter.java:661)
在 weka.classifiers.meta.FilteredClassifier.buildClassifier(FilteredClassifier.java:390)
我感谢任何形式的帮助......
最佳答案
首先,我不知道原因,但这可能很有用:我恰好遇到了同样的异常,并且解决了它。
我正在将两个数据集合并为一个更大的数据集。 摘要
for (int i=0; i < datasetB.numInstances(); i++) {
Instance instance = datasetB.instance(i);
datasetA.add(instance);
}
datasetA
包含A+B
但是,当我尝试使用 datasetA
时,类似
public MyResponse classify(String msg) {
...
// rebuild classififer and filter
Instances filteredData = Filter.useFilter(dataset, filter); //BREAKS
...
// classify
MyResponse response = classifier.classifyInstance(filteredInstance)
}
它说
java.lang.NullPointerException
at java.util.Hashtable.hash(Unknown Source)
at java.util.Hashtable.get(Unknown Source)
at weka.core.Attribute.addStringValue(Attribute.java:868)
at weka.core.StringLocator.copyStringValues(StringLocator.java:148)
at weka.core.StringLocator.copyStringValues(StringLocator.java:93)
at weka.filters.Filter.copyValues(Filter.java:364)
at weka.filters.Filter.bufferInput(Filter.java:301)
at weka.filters.unsupervised.attribute.StringToWordVector.input(StringToWordVector.java:697)
at weka.filters.Filter.useFilter(Filter.java:661)
<小时/>
解决方案是:将 datasetB 的实例视为一个新实例。
如果您构建一个新实例,您将执行类似的操作
// Msg: String, Class: String
private Instance makeInstance(String text, String classValue) {
Instance instance = new Instance(2); // two attributes
Attribute messageAttribute = data.attribute("Msg");
instance.setValue(messageAttribute, messageAttribute.addStringValue(text));
instance.setClassValue(classValue);
instance.setDataset(this.dataset);
return instance;
}
与datasetB实例相同
private Instance makeInstance(Instance i) {
Instance instance = new Instance(2); // two attributes
Attribute messageAttribute = dataset.attribute("Msg");
instance.setValue(messageAttribute, messageAttribute.addStringValue(getMsg(i)));
instance.setDataset(this.dataset);
instance.setClassValue(getClassValue(i));
return instance
}
并在合并方法中调用该方法
for (int i=0; i < data.numInstances(); i++) {
Instance instance = data.instance(i);
Instance buildInstance = makeInstance(instance);
dataset.add(buildInstance);
}
关于java - 如何多次重建FilteredClassifier?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20813069/
我正在从命令行运行 WEKA 以创建用于训练的贝叶斯网络模型,然后使用该模型在单独的数据集上进行测试。贝叶斯网络使用带有简单估计器的 TAN 搜索选项。我的培训命令行调用如下所示: java -cp
我尝试对以下格式的数据使用过滤后的分类器: 实数,实数,实数,...,标称 其中我有 138 个实值和一个代表该类的名义字符串。我使用 J48 作为基分类器和监督离散化过滤器,如下所示: Filter
为此查看了很多示例,但到目前为止还没有成功。我想对自由文本进行分类。 配置文本分类器。 (使用 StringToWordVector 和 LibSVM 的 FilteredClassifier) 训练
我是一名优秀的程序员,十分优秀!