【问题标题】:In Weka, how can I stop CfsSubsetEval from discretizing training instances?在 Weka 中,如何阻止 CfsSubsetEval 离散化训练实例?
【发布时间】:2014-11-02 01:31:09
【问题描述】:

我正在尝试编写一个调用 Weka 中的 CfsSubsetEval 类来执行特征子集选择的 java 程序。 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 使其不离散数据集?

非常感谢您的帮助。

【问题讨论】:

    标签: weka feature-selection discretization


    【解决方案1】:

    对称不确定性是一种基于熵的度量,适用于名义属性。 weka.filters.supervised.attribute.Discretize 不会改变任何名义属性。你说你的输入属性已经离散化了——它们实际上是编码为 Weka 类型数字的整数值属性吗?如果是这样,那么您应该使用 weka.filters.unsupervised.attribute.NumericToNominal 预处理数据。这将为您提供一个标称属性,其中包含与数据中该属性的不同值相对应的标签列表。完成此操作后,CFS 中的离散化过程将保持您的属性不变。

    干杯, 标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-18
      • 2015-01-13
      • 1970-01-01
      • 2015-03-29
      • 2012-10-11
      • 2015-12-12
      • 2014-12-06
      • 2015-10-25
      相关资源
      最近更新 更多