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

时间:2015-10-28 21:35:02

标签: weka

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

还假设Process()有一些“泄漏”: 某些实例Leak = X-Y无法一致地编码,并且需要 获取默认分类FOO。训练标签也以泄漏装置而闻名。

我的问题是如何才能最好地将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);

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

2 个答案:

答案 0 :(得分:0)

赏金正在关闭,但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.Random)

然后,您可以调用buildClassifier()来处理每个训练折叠,进行修改 测试折叠到您的心脏内容,然后迭代实例 在使用Evaluation.evaluateModelOnce()的测试折叠中 或Evaluation.evaluateModelOnceAndRecordPrediction()。后来的版本是 如果您需要曲线汇总指标下的区域(如下所示),则非常有用 要求保留预测。)

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

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

答案 1 :(得分:-1)

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

  • HoeffdingTree
  • IBK
  • 科士达
  • LWL
  • MultiClassClassifierUpdateable
  • NaiveBayesMultinomialText
  • NaiveBayesMultinomialUpdateable
  • NaiveBayesUpdateable
  • SGD
  • SGDText

然后可以更新如下内容:

 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);
 }