2014-11-02 167 views
0

我正在嘗試編寫一個調用Weka中的CfsSubsetEval類來執行特徵子集選擇的java程序。 CfsSubsetEval分離數據集,我試圖避免這種情況,因爲數據集已經離散化了。以下是執行離散化的CfsSubsetEval.java中的行。在Weka中,如何停止離散化訓練實例的CfsSubsetEval?

m_isNumeric = m_trainInstances.attribute(m_classIndex).isNumeric(); 

if (!m_isNumeric) 
{ 
    m_disTransform = new Discretize(); 
    m_disTransform.setUseBetterEncoding(true); 
    m_disTransform.setInputFormat(m_trainInstances); 
    m_trainInstances = Filter.useFilter(m_trainInstances, m_disTransform); 
} 

由於類屬性在ARFF文件定義如下:

@ATTRIBUTE class {true,false} 

屬性不是數字,因此進行離散化。

儘管我對Weka實現有一些瞭解,但我試圖將這些行註釋掉以避免離散化。但是,它沒有工作,但以下情況除外報道:

java.lang.ArrayIndexOutOfBoundsException: 1 
at weka.attributeSelection.CfsSubsetEval.symmUncertCorr(CfsSubsetEval.java:515) 
at weka.attributeSelection.CfsSubsetEval.correlate(CfsSubsetEval.java:445) 
at weka.attributeSelection.CfsSubsetEval.evaluateSubset(CfsSubsetEval.java:392) 
at weka.attributeSelection.BestFirst.search(BestFirst.java:806) 
at weka.attributeSelection.AttributeSelection.SelectAttributes(AttributeSelection.java:606) 
at selecting_features.runFeatureSelection.main(runFeatureSelection.java:39) 

的問題是:我怎麼能更改CfsSubsetEval.java所以它不會discretise數據集?

您的幫助深表謝意。

回答

2

對稱不確定性是對名義屬性起作用的基於熵的度量。 weka.filters.supervised.attribute.Discretize不會改變任何名義屬性。你說你的輸入屬性已經離散化 - 他們實際上是整數值屬性,編碼爲Weka類型數字嗎?如果是這樣,那麼你應該使用weka.filters.unsupervised.attribute.NumericToNominal預處理數據。這將爲您提供一個名義屬性,其中包含與數據中該屬性的不同值相對應的標籤列表。做完這些之後,CFS中的離散化過程將不會影響您的屬性。

乾杯, 馬克。

+0

非常感謝。 – user52732 2014-11-05 08:50:09

相關問題