我想在我使用的某些分类器上运行n折交叉验证。我在WEKA Wiki(这里是WekaDemo.java)上找到了示例代码,但这在运行验证之前应用了过滤器。是否总是需要这样做还是不需要?

这是代码部分:

  /**
   * runs 10fold CV over the training file
   */
  public void execute() throws Exception {
    // run filter
    m_Filter.setInputFormat(m_Training);
    Instances filtered = Filter.useFilter(m_Training, m_Filter);

    // train classifier on complete file for tree
    m_Classifier.buildClassifier(filtered);

    // 10fold CV with seed=1
    m_Evaluation = new Evaluation(filtered);
    m_Evaluation.crossValidateModel(
        m_Classifier, filtered, 10, m_Training.getRandomNumberGenerator(1));
  }


这也是评估分类器性能的可接受方法吗?

最佳答案

我认为这是不好的做法。如果过滤器依赖于/使用类信息,则交叉验证估计值将(可能非常乐观)存在偏差,因此可能无用。举一个极端的例子,考虑向数据添加类属性的副本。在几乎所有情况下,使用weka.classifiers.meta.FilteredClassifier都会使您更好,更安全。在您引用的同一Wiki页面上,有一个如何使用它的示例。

干杯,伯恩哈德

09-26 17:37