我们正在尝试从 Java 程序内部实现 WEKA 分类器。到目前为止一切都很好,但是当从 Weka GUI 中的训练集构建分类器时,我们使用 StringToWordVector IDF 转换来帮助提高分类准确性。
在将实例传递给分类器之前,如何从 Java 中的新实例计算 IDF 转换以为新实例中的每个标记值设置?
基本代码如下所示:
Instances ins = vectorize(msg);
Instances unlabeled = new Instances(train,1);
Instance inst = new Instance(unlabeled.numAttributes());
String tmp = "";
for(int i=0; i < ins.numAttributes(); i++) {
tmp = ins.attribute(i).name();
if(unlabeled.attribute(tmp)!=null)
inst.setValue(unlabeled.attribute(tmp), 1.0); //TODO: Need to figure out the IDF transformed value to put here NOT 1!!
}
unlabeled.add(inst);
unlabeled.setClassIndex(classIdx);
.....cl.distributionForInstance(unlabeled.instance(i));
那么我该如何进行编码,以便将正确的值放入我想要分类的新实例中?
为了清楚起见,inst.setValue(unlabeled.attribute(tmp), 1.0);
需要将行更改1.0
为 IDF 转换后的数字...