Нужно ли применять фильтр перед выполнением перекрестной проверки в WEKA - PullRequest
0 голосов
/ 12 декабря 2011

Я хочу запустить 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));
  }

Также это приемлемый способ оценки производительности классификатора?

1 Ответ

2 голосов
/ 14 декабря 2011

Я бы посчитал это плохой практикой.Если фильтр зависит от / использует информацию о классе, тогда оценка перекрестной проверки будет (потенциально очень) смещена оптимистично и, следовательно, вероятно, будет бесполезной.Для крайнего примера подумайте о добавлении копии атрибута класса к данным.Почти во всех случаях вам будет лучше и безопаснее, если вы используете weka.classifiers.meta.FilteredClassifier. Есть пример того, как использовать его на той же вики-странице, которую вы цитируете.

cheers, Bernhard

...