在分类之后但在评估之前添加weka实例



假设X是一个原始的、标记的(即带有训练标签)数据集,Process(X)返回一组Y实例已经用属性编码并转换为像Y.arf.这样的weka友好文件

还假设Process()有一些"泄漏":某些实例Leak = X-Y无法一致编码,需要以获得默认分类CCD_ 6。训练标签也适用于泄漏集。

我的问题是如何最好地将Leak的实例引入weka评估流AFTER一些分类器已应用于子集Y,使用其默认值折叠Leak实例分类标签,在对整套X进行评估之前?代码中:

DataSource LeakSrc = new DataSource("leak.arff");
Instances Leak = LeakSrc.getDataSet();  
DataSource Ysrc = new DataSource("Y.arff");
Instances Y = Ysrc.getDataSet();  
classfr.buildClassifer(Y)
// YunionLeak = ??
eval.crossValidateModel(classfr, YunionLeak);

也许这是一个将结果折叠在一起的具体例子来自多个分类器?

赏金即将结束,但Mark Hall在另一个论坛上(http://list.waikato.ac.nz/pipermail/wekalist/2015-November/065348.html)应该算是目前的答案:

您需要实现构建用于交叉验证的分类器在您的代码中。您仍然可以使用评估对象来计算不过,修改后的测试会折叠起来,因为它计算的统计数据都是添加剂Instances.trainCV()和Instances.testCV()可用于创建折叠:

http://weka.sourceforge.net/doc.stable/weka/core/Instances.html#trainCV(int,%20int,%20java.util.Rondom)

然后可以调用buildClassifier()来处理每个训练折叠,修改测试让您满意,然后在实例上迭代在测试折叠中,同时使用Evaluation.evalateModelOnce()或Evaluation.eevaluateModelOnceAndRecordPrediction()。更高版本是如果您需要曲线下面积汇总指标(如下需要保留预测)。

http://weka.sourceforge.net/doc.stable/weka/classifiers/Evaluation.html#evaluateModelOnce(weka.Classifier.Classifier,%20weka.core.Istance)

http://weka.sourceforge.net/doc.stable/weka/classifiers/Evaluation.html#evaluateModelOnceAndRecordPrediction(weka.classers.Classifier,%20weka.core.Istance)

根据您的分类器,这可能非常容易!Weka有一个名为UpdateableClassifier的接口,任何使用它的类都可以在构建后更新!以下类实现此接口:

  • HoeffdingTree
  • IBk
  • KStar
  • LWL
  • MultiClassClassClassifierUpdateable
  • NaiveBayesMultinomialText
  • NaiveBayesMultinomialUpdateable
  • NaiveBayes可更新
  • SGD
  • SGD文本

然后可以更新如下:

 ArffLoader loader = new ArffLoader();
 loader.setFile(new File("/data/data.arff"));
 Instances structure = loader.getStructure();
 structure.setClassIndex(structure.numAttributes() - 1);
 NaiveBayesUpdateable nb = new NaiveBayesUpdateable();
 nb.buildClassifier(structure);
 Instance current;
 while ((current = loader.getNextInstance(structure)) != null) {
   nb.updateClassifier(current);
 }