2014-11-02 206 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

相关问题