【问题标题】:Does a filter need to be applied before running cross validation in WEKA在 WEKA 中运行交叉验证之前是否需要应用过滤器
【发布时间】:2012-01-18 15:15:39
【问题描述】:

我想在我正在使用的一些分类器上运行 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));
  }

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

【问题讨论】:

    标签: java machine-learning weka classification


    【解决方案1】:

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

    干杯,伯恩哈德

    【讨论】:

    • 我实际上不想使用任何过滤器。我是 weka 的新手,所以想确保我只使用不过滤的 crossValidateModel 方法就可以了。我可以这样做吗?
    猜你喜欢
    • 2023-03-10
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2020-08-06
    • 2013-08-16
    • 2019-07-27
    • 2015-10-25
    相关资源
    最近更新 更多