2011-12-12 69 views
0

我想對我正在使用的某些分類器運行n摺疊交叉驗證。我在WEKA Wiki(這裏是WekaDemo.java)上找到示例代碼,但是這在運行驗證之前應用了一個過濾器。這是否總是需要完成或者這不是必需的?在WEKA中運行交叉驗證之前是否需要應用過濾器

這裏是一段代碼:

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

而且這是評估的分類器的性能的可接受的方法是什麼?

回答

2

我會考慮這種不好的做法。如果過濾器依賴於/使用類信息,那麼交叉驗證估計將(可能非常)樂觀地偏向,因此可能無用。對於極端的例子,考慮將類屬性的副本添加到數據中。在幾乎所有情況下,如果您使用weka.classifiers.meta.FilteredClassifier,您將會變得更好,更安全,這裏有一個關於如何在您引用的同一個Wiki頁面上使用它的例子。

歡呼聲,Bernhard

+0

我實際上並不想使用任何過濾器。我是weka的新手,所以想要確保我沒問題,只需使用crossValidateModel方法即可,無需過濾。我可以這樣做嗎? – Chris

+1

當然你可以:-) – user988621