我正在尝试编写一个 java 程序,它在 Weka 中调用 CfsSubsetEval 类来执行特征子集选择。CfsSubsetEval 离散化数据集,我试图避免这种情况,因为数据集已经离散化。以下是 CfsSubsetEval.java 中执行离散化的行。
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 使其不离散数据集?
非常感谢您的帮助。